我的代码设置如下: 定时器配置为向上计数模式,计数间隔为1us,10us中断一次关闭定时器,在中断中处理完后再打开定时器,再过10us进中断,如此循环下去。 开关定时器方法: 定时器中断函数() { 关闭定时器,CEN位=0;----------------此时CNT寄存器有时是0,有时是1,为什么呢? 执行处理代码; 打开定时器,CEN位=1;----------------CNT计数起点受制于前面,如果是1,那么下次9us后进入中断,而不是10 } 疑问: 进入中断后,立即关闭定时器时,CNT寄存器停住的值可能每次不一样,导致开启定时器时计数起点不同。难道芯片每次进入中断后运行到关闭定时器的那行代码的时间会变化吗?代码编译完成后执行时间不都是固定的吗?大神能否解释一下? 想到的解决办法: 1、添加对CNT寄存器设置操作 定时器中断函数() { 关闭定时器,清除CEN位; 执行处理代码; CNT = 0;----------------设置为0,让其每次都从0开始计数 打开定时器,设置CEN位; } 2、将定时器设置为单脉冲模式----onePulse,查看参考手册发现设置为单脉冲模式,定时器溢出后自动停止计数器。 以上两种方法是否可行?哪种方法好呢。请大神指点!谢谢! |
评分
查看全部评分
对, 进入中断后判断状态寄存器标志位这些操作会占用一定的时间,计数器仍然在计数,请问如果我的设计不变,改成单脉冲方式,会不会解决我的上面的问题?
不好意思 单脉冲的我没有试过
评分
查看全部评分
评分
查看全部评分