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.

[参考译文] CCS/TMS570LS1224:使用 rtiSetPeriod()动态更改 RTI 计时器

Guru**** 2563000 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/826027/ccs-tms570ls1224-using-rtisetperiod-to-dynamically-change-rti-timer

器件型号:TMS570LS1224

工具/软件:Code Composer Studio

尊敬的 Hercules 团队:

我目前正在寻找将 RTI 模块用作"SLEE()函数。

我注意到 rtiSetPeriod()函数仅在前一个周期长度的额外"节拍"通过后更新(预期行为)。

不幸的是、当将周期设置为较大值(如1000ms)、然后尝试更改为较小值(100us)时、我们必须等待额外的1000ms、才能更改计时器。

是否有办法强制"节拍"更快发生、以便我们可以立即将周期切换为更小的值?

下面是我当前尝试用作"睡眠"或"延迟"函数的代码、以帮助澄清我尝试执行的操作:

//********
//延迟功能,输入=微秒数
//********
void delayus (uint16us){
如果(us = 0)
返回;
其他
{
rtiSetPeriod (rtiCOMPARE0,10*us);
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);
rtiStartCounter (rtiCOUNTER_BLOCK0);
while (RTI_TIMEOUT=0);//this 在 notification.c rtiNotification 中设置为1
RTI_TIMEOUT = 0;
rtiDisableNotification (rtiNOTIFICATION_COMPARE0);
rtiStopCounter (rtiCOUNTER_BLOCK0);
rtiResetCounter (rtiCOUNTER_BLOCK0);
}
}

//*******
//notificait.c:
//*******
void rtiNotification (uint32 notification)
{
/*在用户代码开始和用户代码结束之间输入用户代码。 */
*用户代码开始(9)*/
RTI_TIMEOUT = 1;
/*用户代码结束*/
} 

要使上述代码正常工作、我需要添加另一个"while ()"循环、等待"rtiSetPeriod"生效前出现一个节拍。

谢谢!

Vince Toledo

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

    Vince、

    由于您已识别 rtiSetPeriod 只为所选计数器配置"更新比较值"。 此值仅对比较匹配有效、以便要比较的下一个计数器值与您选择的新周期匹配。

    为了克服这一限制、您应该编写自己的函数来设置要检查的实际比较值、以便在计数器停止并复位后生成第一个比较匹配事件。 您可以停止计数器并将其重置为延迟函数的一部分。 请使用 rtiInit 函数作为参考、以便根据所需的持续时间配置比较值寄存器。

    此致、

    Sunil

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

    谢谢 Sunil!

    我肯定会混淆 Compx 和 UCPx 值、因此我非常感谢您的澄清。 我能够使其正常工作!

    感谢您的耐心和时间、

    Vince Toledo