dsp 28335 ConfigCpuTimer()詳細介紹


我自己的理解;寫的不一定對,還請多指教;

從網上看到的好多都是復制粘貼的一個版本,感覺不太對

圖上的是系統時鍾(SYSCLKOUT)=75MHz;

ConfigCpuTimer(&CpuTimer0, 150, 500000);

這樣不太現實,系統時鍾跑75M次是1s,你cpu定時器跑150M才是1s,怎么可能?TPR里的TDDRH:TDDR沒法設置啊,不可能讓他們等於1/2吧!所以我覺得這說的不對;

下圖是我們在程序中經常見到的對cpu定時器的設置;

從注釋中可以知道,CPU定時器的時鍾頻率是150Mhz時(區別於系統時鍾SYSCLKOUT),(500000是定時器一個周期的時間,應該就是設定的時間T)每50ms會發生一次中斷;怎么實現的呢?

CPUFreqInMHz這個是cpu定時器的頻率,由ConfigCpuTimer()的Freq可知為150,單位為Mhz;(區別於系統時鍾SYSCLKOUT),

CPU的定時器時鍾周期即:TIMCLK=(TDDRH:TDDR+1)x(1/SYSCLKOUT),他的倒數就是cpu定時器的頻率,已知函數中自定義的Freq就是頻率,那么就可以求得(TDDRH:TDDR)的值了;Freq是等於系統時鍾頻率的所以TDDR是1;在這里

這樣設置TPR(即PSC+TDDR)就表示定時器的時鍾等於系統時鍾;

為什么將(Freq*Period)賦給PRD?PRD是定時器周期寄存器,意思應該就是定時器從開始到發出中斷的時間,讓它走(Freq*Period)個定時器周期,停止然后中斷;

ConfigCpuTimer(&CpuTimer0, 150, 500000);由此函數知

T(想要的定時時間/定時器周期)=TIMCLK*(PRDH:PRD)==>(PRDH:PRD)=T/TIMCLK=T*Freq;

(比如說系統時鍾150MHz,即一個周期是6.67ns;由PRD知運行的系統周期是500000x150=75000000個;75000000x6.666667=500000250ns,大約就是0.5s);

ConfigCpuTimer(&CpuTimer0, 75, 500000);

即:cpu定時器的頻率是75MHz,即每兩個系統時鍾周期代表一個CPU定時器周期;那么時間就變位2x6.666667ns(1/75);

我需要的一個定時器周期是500000us,一個周期是(1/75M)s,那么我就需要500000x75個這樣的周期,所以PRDH:PRD就被設置為75*500000=37.5M;

(PRDH:PRD)*2x6.666667ns=0.5s;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM