7411|4

88

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

①F2812 XINT1中断后,程序总是跑飞?? [复制链接]

问题有两个:

1。 为什么xint1的中断函数中要再次使能group1中断(下面代码中①)和总中断使能(下面代码中②)即使没有关闭中断(DINT)?其它的比如TIMER1,PWM,CAPTURE等中断则不需要在服务程序中再次使能
2。进入XINT1中断后,程序总是跑飞??

void IsrXINT1(void)
{
static Uint16 key_pad =0;
        volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all;
        IER |= MINT1;                  // ①

      PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;   // Acknowledge interrupt to PIE
        PieCtrlRegs.PIEACK.all = 0xFFFF;   // Enable PIE interrupts       

        DINT;
        PieCtrlRegs.PIEIER1.all = TempPIEIER;
        EINT; //②
return;
}

XIEXIE!!

最新回复

sorry, 我是没看清楚 :P。隐藏在注释中了。我就是有疑问,TI的例程干嘛要那样写。而且,我在调试的时候去掉还不行。而且我看了寄存器,GLOBLE 使能位在中断后就被清零,导致其他中断也没有响应。所以,加了EINT就可以了。郁闷。就这个XINT1其他中断都正常。 [ 本贴由 spancer 于 2005-7-11 04:22 PM 最后编辑 ]  详情 回复 发表于 2006-7-11 08:22
 
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不需要对IER寄存器进行操作
不需要返回值,所以使用RETURN是多余的
不清楚你的PIE中断向量表是否已正确的初始化和重定位
PieVectTable.XINT1   = &XINT1_ISR;             //re-mapped XINT1_ISR to PIE_table
还有好几个地方也是多余的
interrupt void  XINT1_ISR(void)
{
     unsigned int tmp;
     int tmpi;
     tmp=*AdinRegs<<2;
     tmpi=tmp;
     Adina[AdCount]=tmpi>>2;
     tmp=*AdinRegs<<2;
     tmpi=tmp;
     Adinb[AdCount]=tmpi>>2;
     tmp=*AdinRegs<<2;
     tmpi=tmp;
     Adinc[AdCount]=tmpi>>2;
     tmp=*AdinRegs<<2;
     tmpi=tmp;
     Adind[AdCount]=tmpi>>2;
     AdCount++;
     if(AdCount>512)
     {
       AdVala=CalTrueVal(Adina+1,512)/65536.0*10+0.0005;
       AdValb=CalTrueVal(Adinb+1,512)/65536.0*10+0.0005;
       AdValc=CalTrueVal(Adinc+1,512)/65536.0*10+0.0005;
       AdVald=CalTrueVal(Adind+1,512)/65536.0*10+0.0005;
       AdCount=0;
     }
  // Insert ISR Code here     
  
  // To receive more interrupts from this PIE group, acknowledge this interrupt
     //PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
     PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
  // Next two lines for debug only to halt the processor here
  // Remove after inserting ISR Code
  //  asm (\"  ESTOP0\";
  // for(;;

}
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
上面那一段是TI的例子里面的,只不过中断向量已经重新定位(PieVectTable.XINT1 = &IsrXINT1;)。我很奇怪,它为什么要重新操作IER寄存器,如果不那样做,后面的中断干脆就不进来了,用了之后,即使会跑飞(掉到陷阱里),但是还可以进这个XINT1中断。

另外,你的程序里面为什么连PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;都不要?不要清中断标志吗?
xiexie!!
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

4
 
有啊,没看清楚??
这是一段AD采样和计算512点电压有效值的程序,很正常的!!!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
sorry, 我是没看清楚 :P。隐藏在注释中了。我就是有疑问,TI的例程干嘛要那样写。而且,我在调试的时候去掉还不行。而且我看了寄存器,GLOBLE 使能位在中断后就被清零,导致其他中断也没有响应。所以,加了EINT就可以了。郁闷。就这个XINT1其他中断都正常。

[ 本贴由 spancer 于 2005-7-11 04:22 PM 最后编辑 ]
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表