我正在使用TMS320F280045的芯片,其中有1个ADCA1(INT1.1)中断,发现有时会被TIMER2(INT14)打断。根据手册,ADCA1的优先级为5, 而TIMER2的优先级为18,为什么高优先级中断会被低优先级中断打断呢?这个是芯片本身的问题还是应用的问题呢?
Thanks
Teasir Chen
mangui zhang:相关帖子请参考
e2echina.ti.com/…/119601
我正在使用TMS320F280045的芯片,其中有1个ADCA1(INT1.1)中断,发现有时会被TIMER2(INT14)打断。根据手册,ADCA1的优先级为5, 而TIMER2的优先级为18,为什么高优先级中断会被低优先级中断打断呢?这个是芯片本身的问题还是应用的问题呢?
Thanks
Teasir Chen
Teasir Chen:
回复 mangui zhang:
谢谢你的答复!但是我的问题跟他们的还不一样,我的是高优先级的ADCA1中断,被低优先级的TIMER2 打断了。ADCA1中断进入后,代码还没执行完毕,TIMER2的时间到了,结果被它打断了。根据手册,ADCA1的优先级为5, 而TIMER2的优先级为18,现在的情况刚好反了,这是什么原因呢?
我正在使用TMS320F280045的芯片,其中有1个ADCA1(INT1.1)中断,发现有时会被TIMER2(INT14)打断。根据手册,ADCA1的优先级为5, 而TIMER2的优先级为18,为什么高优先级中断会被低优先级中断打断呢?这个是芯片本身的问题还是应用的问题呢?
Thanks
Teasir Chen
Susan Yang:
回复 Teasir Chen:
您现在是否使用了TI-RTOS?
您可以看一下 www.ti.com.cn/…/sprui33b.pdf 的 Table 3-4. CPU Interrupt Vectors
CPU TIMER2 Interrupt (for TI/RTOS use)
另外能否分享一下您的ISR代码?您使用了中断嵌套?
E2E上有一个类似的帖子,您也可以先看一下
e2e.ti.com/…/502545
我正在使用TMS320F280045的芯片,其中有1个ADCA1(INT1.1)中断,发现有时会被TIMER2(INT14)打断。根据手册,ADCA1的优先级为5, 而TIMER2的优先级为18,为什么高优先级中断会被低优先级中断打断呢?这个是芯片本身的问题还是应用的问题呢?
Thanks
Teasir Chen
Teasir Chen:
回复 Susan Yang:
Susan, 您好!
我没有用TI-RTOS,用的是uc OS/II,其中Timer 2用来当OS的timer ticket – 1ms时钟,ADCA1用来做ADC采样和控制算法 – 40KHz频率。因为ADCA1中跑的是实时性控制代码,不能被延时或被其它中断打断。但是希望ADCA1能打断其它的中断,包括Timer 2。下面分别是ADCA1和Timer 2的部分代码:
1. ADCA1中断代码
#pragma CODE_SECTION(adc_ISR, ".TI.ramfunc");interrupt void adc_ISR(void){ DINT; if(!OSRunning) { AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; return; } // 用户代码,这里没粘出来 // …… PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; asm(" NOP"); EINT;}
2. Timer 2中断代码
.page.text .global _OSTickISR_OSTickISR: .ref _OSTimeTick .ref _OSIntEnter .ref _OSIntExit .ref _OSTCBCur .ref _PieCtrlRegs .ref _OSIntNesting .ref _OSTestIOHigh .ref _OSTestIOLow PUSH RPC PUSH AR1H:AR0H PUSH XAR2 PUSH XAR3 PUSH XAR4 PUSH XAR5 PUSH XAR6 PUSH XAR7 PUSH XT ASP PUSH DP:ST1 CLRC PAGE0,OVM CLRC AMODE; MOVW DP,#_OSIntNesting; INC @_OSIntNesting LCR _OSIntEnter LCR _OSTimeTick LCR _OSIntExit POP DP:ST1 NASP POP XT POP XAR7 POP XAR6 POP XAR5 POP XAR4 POP XAR3 POP XAR2 POP AR1H:AR0H POP RPC IRET.end
我看了一下你给的这个帖子 e2e.ti.com/…/502545,觉得问题跟我的有点类似。如果ADCA1中不想被其它中断打断,用 IER &= xxx 屏蔽其它中断就可以了,对吗?
还有中断在运行的时候,高优先级的也可能会被低优先级的打断,只是同时有2个或多个中断在等待的时候,才会排优先级,我的理解对吗?
Thanks
Teasir Chen