读实例程序如下:
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
// Acknowledge this interrupt to receive more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
请问中断标志位TIF为什么没有清空呢?这样不应该是一直进入中断吗?为什么实际情况下会正常运行?
Di Jiao:
网上找到解释说:源码的中断服务程序中没有将中断标志位清0 的指令。当程序开始运行并执行到指令“CpuTimer0Regs.TCR.bit.TSS = 0;”时,定时器中断标志位TIF(TCR[15])即从0 变成1。这意味着一旦启动定时器即触发定时器中断之后,即使通过软件将该位置1,也不能将其清0。
这段话我不理解,为什么TSS重启定时器TIF会置位?后面的软件无法置位又是什么意思?
不懂。。。
求指点!
读实例程序如下:
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
// Acknowledge this interrupt to receive more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
请问中断标志位TIF为什么没有清空呢?这样不应该是一直进入中断吗?为什么实际情况下会正常运行?
Di Jiao:
网上找到的解释:源码的中断服务程序中没有将中断标志位清0 的指令。当程序开始运行并执行到指令“CpuTimer0Regs.TCR.bit.TSS = 0;”时,定时器中断标志位TIF(TCR[15])即从0 变成1。这意味着一旦启动定时器即触发定时器中断之后,即使通过软件将该位置1,也不能将其清0。
这又是什么意思?复位定时器会置位TIF?为什么后来又无法软件置位TIF?
读实例程序如下:
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
// Acknowledge this interrupt to receive more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
请问中断标志位TIF为什么没有清空呢?这样不应该是一直进入中断吗?为什么实际情况下会正常运行?
Di Jiao:
回复 Di Jiao:
求指点。。。
读实例程序如下:
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
// Acknowledge this interrupt to receive more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
请问中断标志位TIF为什么没有清空呢?这样不应该是一直进入中断吗?为什么实际情况下会正常运行?
mangui zhang:
回复 Di Jiao:
我也没看懂 你可以看看datasheet 这个标志是否需要软件清零
如果需要软件清零 CpuTimer0Regs.TCR.bit.TSS = 1;才应该是清零吧