请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:RM42L432 主题中讨论的其他器件:HALCOGEN
您好!
我正在尝试使用 RTI 比较单元作为简单的计时器、以阻止应用程序中的执行。 我希望的流程是:
- 复位比较单元、使其阻断的时间准确
- 等到比较结束
- 继续执行我的程序
现在、这些装置被设置为使用计数器0、该计数器在后台自由运行。 我已经制作了这个片段、但是它看起来不起作用(compare0被设定为1uS、而 compare1被设定为10ms、通过 HalCoGen):
#include "sys_common.h" #include "RTI.h" uint32_t micros = 0; int main (void) { rtiInit(); _enable_IRQ (); //启用 RTI 填充并启动计时器 rtiEnableNotification (rtiNOTIFICATION_COMPARE0); rtiStartCounter (rtiCOUNTER_BLOCK0); uint32_t s =微秒; rtiREG1->INTFLAG = rtiNOTIFICATION_COMPARE1;//清除 rtiREG1->SETINTENA = rtiNOTIFICATION_COMPARE1;//启用 while (rtiREG1->INTFLAG & 0x02 = 0){}//等待 rtiREG1->CLEARINTENA= rtiNOTIFICATION_COMPARE1;//禁用 uint32_t d =微秒- s; //示例1等待 COMPARE0 ISR while (micros < 1000000){} 返回0; } // RTI ISR void rtiNotification (uint32_t notification) { //比较0是一个1us 周期 if (rtiNOTIFICATION_COMPARE0 == notification) { Micros += RTI_UDCP0_CONFIGVALUE / 10; } }
我不确定以下几点:
- 为什么在编程时间之后、COMPARE1位的 INTFLAG 寄存器不会转换为1 (d 仅为1)。
- 为了获得完整周期、我需要做什么来重置比较?
谢谢、
Nathan