在TMS320f2808的定时器这个程序里面,我有几个不解:
第一,在进入中断之前,为什么没有这条代码:PieCtrlRegs.PIEACK.all=PIEACK_GROUP1; 因为dsp复位之后ACK寄存器是1,必须写1清零,才能相应P定时器中断;
第二,在进入中断之后,为什么没有清除标志位的代码:CpuTimer0Regs.TCR.bit.TIF = 1; // 写1清0
第三,我还想扩展问一下,看门狗定时器有标志位吗?
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.
在TMS320f2808的定时器这个程序里面,我有几个不解:
第一,在进入中断之前,为什么没有这条代码:PieCtrlRegs.PIEACK.all=PIEACK_GROUP1; 因为dsp复位之后ACK寄存器是1,必须写1清零,才能相应P定时器中断;
第二,在进入中断之后,为什么没有清除标志位的代码:CpuTimer0Regs.TCR.bit.TIF = 1; // 写1清0
第三,我还想扩展问一下,看门狗定时器有标志位吗?
haibing,
第一:手册中的复位后状态为1的说法有误,应该为0,所以不需要清零。你自己用2808测试一下就知道了。
第二:关于CPU timer中断,手册中对它的TIE中断使能是这么描述的,The CPU-Timer interrupt is enabled. If the timer decrements to zero, and TIE is set, the timer asserts its interrupt request. 即只要中断使能,只要timer 将为0就可以产生中断。所以也不需要清零。
第三:看门狗也有标志位。
非常感谢老师您的回答。再请问3个问题:
1.中断标志位(包括PIE级和CPU级的)不影响“中断是否能够进入中断”,故不需清零,标志位的作用只是判断是否进入中断的作用,只是有些是自动和手动清零的;
2.进入CPU timer中断,标志位是自动清零的还是必须手动清零的?
3.看门狗中断标志位是哪一个?它好像和其他中断标志位不一样,我看了它只有一个看门狗中断状态位:WDINTS(是SCSR寄存器的第二位)。
期待中...
Haibing,
1, 中断标志位会影响CPU是否响应中断请求,只不过CPU级别的标志它自动清除,PIE级别的标志位需要在ISR服务函数用PIEACK指令清除,外设级别需要在ISR服务函数清除。一般来讲,大多数中断如果你没清除标志位,后续的中断请求就响应不了。
2, 但也有例外,像CPU timer定时器,你可以看user guide > system control and interrupts一章,关于这个中断,上面说明只要CPU timer降为0,就能进入中断。但是如果你不清除标志位,标志位会一直都为1、