请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS570LS3137 您好!
我尝试使64位计时器计数器运行。
现在、我将把计数器0配置为45MHz 的上计数器、每次溢出时、手动写入计数器1的 FRCx、然后返回64位值、如下所示:
void rtiNotification (uint32通知)
{
switch (notification){
案例 rtiNOTIFICATION_COUNTER0:
++rtiREG1->CNT[1].FRCx;
中断;
}
}
uint64_t getTime(){
disable_IRQ ();
uint32_t frcLow = rtiREG1->CNT[0].FRCx;
uint32_t frcHigh = rtiREG1->CNT[1].FRCx;
_enable_IRQ ();
返回(uint64_t)((((uint64_t) frcHigh << 32)|(uint64_t) frcLow);
}
//每个节拍的分辨率= 1/f * NsInSec
#define RES (uint64_t)(1.0/45000000 * 1000000000)
void delay (uint64_t delay_ns){
if (delay_ns > RES){
uint64_t start = getTime();
uint64_t 节拍=(uint64_t)(DELAY_ns/RES);
while ((getTime()- start)< tick);
}
}
int main (void)
{
rtiInit();
rtiEnableNotification (rtiNOTIFICATION_COUNTER0);
_enable_IRQ ();
rtiSetPeriod (0、0xffffffff);
rtiStartCounter (rtiCOUNTER_BLOCK0);
while (1){
延迟(30000000000);//以纳秒为单位
ledToggle ();
//pinToggle ();
}
}
问题:
*是否有更好的方法来实现此目的?
*在数据表中看到这一点让我有点困惑、请用更简单的词语进行解释(我很难理解这是什么)?
RTI 递增计数器0寄存器(RTCIU0)
描述: 递增计数器0。 该寄存器保存递增计数器0的当前值并预分频 RTI 时钟。 它将只由之前读取的自由运行计数器0 (RTIFRC0)进行更新。 这种更新方法有效地提供了对两个计数器的64位读取、而不会出现在递增计数器0 (RTIUC0)和自由运行计数器0 (RTIFRC0)两次连续读取之间更新计数器的问题。 读取该计数器将返回读取 RTIFRC0时计数器的值。 对该计数器执行写操作会将其预设为一个值。 然后、计数器从写入的值向上递增
感谢您的支持!
KB