This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我正在使用TMS320F280045的芯片,其中有1个ADCA1(INT1.1)中断,发现有时会被TIMER2(INT14)打断。根据手册,ADCA1的优先级为5, 而TIMER2的优先级为18,为什么高优先级中断会被低优先级中断打断呢?这个是芯片本身的问题还是应用的问题呢?
Thanks
Teasir Chen
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