很早就从某国产芯片FAE处听过这么一句话“毕竟是国产IC”,
一款蓝牙产品需要做闹钟功能,BOSS测试,一周有5分钟左右偏差
设计时,没太在意时钟问题,想着BLE的时钟很严格,时间不会差的很过分。
直接用系统时钟做计时器了,1S重复中断,结果翻车了。
系统16Mhz的晶振,1S的精准计时都做不到,
项目进度优先,底层寄存器之类的,完全封闭的,无法“刨根问底”。
烧录几个机器,跑下一致性,要数据一致,就直接每3小时快进5秒,控制一周误差10S内。
//定时定义
osal_start_reload_timer(user_task_id,PMW_LIGHT_TIMER_60S_EVT,1000);
//中断处理
f_xx() { //实际测量时间,15个小时,差了25秒,和500PPM的理论一致。
//精度测量
//用硬件Timer测量,2991557 3991602 有 0.2%的误差
// 这个应该是最可信的,但是和实际时间对不上,
LOG("yyyyy--%d %08x\n", AP_TIM3->CurrentCount-lk, AP_TIM3->CurrentCount); lk = AP_TIM3->CurrentCount;;
//这个和实际一致 1598 误差0.00125左右
LOG("yyyyy1--%d\n", hal_systick()-li); li = hal_systick();
//这个惨不忍睹,33275,33265.. 和理论32768误差能有0.016
LOG("yyyyy2--%d\n", rtc_get_counter()-lj); lj = rtc_get_counter();
//秒计时
}
//

