请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28335 我想将计时器设置为在没有中断的情况下进行毫秒计数。
因此、我配置一个计时器(CPU 频率= 120MHz)
void SysTimerInit (void) { uint32预分频器; //确保停止计时器: CpuTimer1Regs.TCR.bit.TSS = 1; //将定时器周期初始化为最大值: CpuTimer1Regs.PRD.All = 0xFFFFFFFF; 预分频器= 120000-1;//1000US->1ms CpuTimer1Regs.TPR.bit.TDDR =(预分频器和0x0000FFFF); CpuTimer1Regs.TPRH.bit.TDDRH =(预分频器>> 8); //初始化计时器控制寄存器: CpuTimer1Regs.TCR.bit.TRB = 1; // 1 =重新加载计时器 CpuTimer1Regs.tcr.bit.soft = 1; CpuTimer1Regs.TCR.bit.FREE = 1; //定时器自由运行 CpuTimer1Regs.tcr.bit.tie = 0; // 0 =禁用/ 1 =启用计时器中断 CpuTimer1Regs.TCR.bit.TSS = 0; // 1 =停止计时器,0 =启动/重新启动计时 器}
和函数来处理计数器
void SysTimerSet (uint32 *比较_val、uint32 count_ms) { uint32 timer_count_val = CpuTimer1Regs.TIM.all; *比较_val = timer_count_val - count_ms; } UINT16 SysTimerElapsed (UINT32 *比较_val) { uint32 timer_count_val = CpuTimer1Regs.TIM.all; 返回(timer_count_val <=*比较_val); }
然后我进行测试。
SysTimerInit(); SysTimerSet (&COMPARE_val、100); while (1) { if (SysTimerElapsed (&COMPARE_val)) }{ SysTimerSet (&COMPARE_val、100); }
在调试器中、我应该看到变量 COMPARE_Val 递减100。 但我看到一些随机数。 我的错在哪里?