Thread 中讨论的其他器件:CC3200
大家好、
我们使用硬件计时器进行 UNIX 时间戳增量、以秒为单位。 但硬件计时器始终以毫秒为单位中断。 下面是我们使用的代码。 我们发现的问题是、在从服务器获取到 MCU 的实际时间戳后、我们每4小时更新一次时间戳、MCU 时间戳比实际更新服务器时间戳快2秒。 如果我们不更新时间戳、时间可能为4或5天、时间戳将比实际当前时间戳快大约15秒。
静态中断 void SysTick InterruptHandler()
{
ui64SysTickCounter++;
/*需要调用 extern 变量以增加 UNIX 时间戳*/
if (g_UnixTimestamp!= 0)
{
if ((ui64SysTickCounter % 1000)=0)
{
G_UnixTimestamp++;
}
}
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
}
静态空 Timer0Initialize (浮点频率、浮点周期)
{
uint32_t tick;
tick =(uint32_t)(freq * period);
CpuTimer0Regs.PRD.All =节拍;
CpuTimer0Regs.TPR.ALL = 0;
CpuTimer0Regs.TPRH 全部= 0;
CpuTimer0Regs.TCR.bit.TSS = 1; // 1 =停止计时器,0 =启动/重新启动计时器
CpuTimer0Regs.TCR.bit.TRB = 1; // 1 =重新加载计时器
CpuTimer0Regs.tcr.bit.soft = 1;
CpuTimer0Regs.TCR.bit.FREE = 1; //定时器自由运行
CpuTimer0Regs.tcr.bit.tie = 1; // 0 =禁用/ 1 =启用计时器中断
ui64SysTickCounter = 0;
EALLOW;
PieVectTable.TINT0 =&SystickInterruptHandler;
EDIS;
CpuTimer0Regs.TCR.bit.TSS = 0;
IER |= 0x0001;
PieCtrlRegs.PIEIER1.bit.INTx7=1;
}
void Hwtimer_Initialize (void)
{
Timer0Initialize (150000000、0.001);// 150kHz 和1ms 计时器
。}
那么、代码中可能会出现什么问题、以及我们需要在代码中实现哪些其他功能。
G_UnixTimestamp 是时间戳、显示速度始终比实际电流时间快2秒。
谢谢