1. 程式人生 > 其它 >國產藍芽SOC晶片ST17H66的時鐘問題分析

國產藍芽SOC晶片ST17H66的時鐘問題分析

很早就從某國產晶片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();


        //秒計時  
    }    

//