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.

[参考译文] TMS320F28335:定时器问题。

Guru**** 2056000 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/569868/tms320f28335-timer-problem

器件型号: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。 但我看到一些随机数。 我的错在哪里?

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否停止 CPU 以检查 COMPARE_VAL? 由于您设置了软位和空闲位、因此即使在您停止后、计时器也将继续运行、因此我怀疑这会影响您的预期计数。

    不过、为了确定、您可以创建一个数组来存储 COMPARE_VAL 值、并且当数组已满时、停止程序并确保存储在数组中的值减100。 类似如下:

    uint32 compare_val 数组[64];
    I = 0;
    while (1)
    {
    if (SysTimerElapsed (&compare_val))
    {
    SysTimerSet (&compare_val、100);
    Compar_val_array[i++]= COMPARE_val;
    
    if (i ==64)
    {
    _asm (" ESTOP0");
    I = 0;
    }
    }
    

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我明白了。 感谢您的提示。