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秒。
谢谢