新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 凌陽61單片機(jī)之定時(shí)器

凌陽61單片機(jī)之定時(shí)器

作者: 時(shí)間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
時(shí)基信號發(fā)生器:
時(shí)間基準(zhǔn)信號,簡稱時(shí)基信號,來自于32768Hz實(shí)時(shí)時(shí)鐘,通過頻率選擇組合而成。時(shí)基信號發(fā)生器的選頻邏輯TMB1,為TimerA的時(shí)鐘源B提供各種頻率選擇信號,并為中斷系統(tǒng)提供中斷源(IRQ6)信號。此外,時(shí)基信號發(fā)生器還可以通過分頻產(chǎn)生2Hz、4Hz、1024Hz、2048Hz以及4096Hz的時(shí)基信號,為中斷系統(tǒng)提供各種實(shí)時(shí)中斷源(IRQ4和IRQ5)信號。
時(shí)基信號發(fā)生器通過對P_Timebase_Setup(寫)($700EH)單元的編程寫入來進(jìn)行選頻操作。
定時(shí)器/計(jì)數(shù)器:
SPCE061A提供了兩個16位的定時(shí)/計(jì)數(shù)器:TimerA和TimerB。TimerA為通用計(jì)數(shù)器;TimerB為多功能計(jì)數(shù)器。TimerA的時(shí)鐘源由時(shí)鐘源A和時(shí)鐘源B進(jìn)行“與”操作而形成;TimerB的時(shí)鐘源僅為時(shí)鐘源A。
定時(shí)器發(fā)生溢出后會產(chǎn)生一個溢出信號(TAOUT/TBOUT)。一方面,它會作為定時(shí)器中斷信號傳輸給CPU中斷系統(tǒng);另一方面,它又會作為4位計(jì)數(shù)器計(jì)數(shù)的時(shí)鐘源信號,輸出一個具有4位可調(diào)的脈寬調(diào)制占空比輸出信號APWMO或BPWMO(分別從IOB8 和IOB9輸出),可用來控制馬達(dá)或其它一些設(shè)備的速度。此外,定時(shí)器溢出信號還可以用于觸發(fā)ADC輸入的自動轉(zhuǎn)換過程和DAC輸出的數(shù)據(jù)鎖存。
向定時(shí)器的P_TimerA_Data(讀/寫)($700AH)單元或P_TimerB_Data(讀/寫)($700CH)單元寫入一個計(jì)數(shù)值N后,選擇一個合適的時(shí)鐘源,定時(shí)器/計(jì)數(shù)器將在所選的時(shí)鐘頻率下開始以遞增方式計(jì)數(shù)N,N+1,N+2,…0xFFFE,0xFFFF。當(dāng)計(jì)數(shù)達(dá)到0xFFFF后,定時(shí)器/計(jì)數(shù)器溢出,產(chǎn)生中斷請求信號,被CPU響應(yīng)后送入中斷控制器進(jìn)行處理。同時(shí),N值將被重新載入定時(shí)器/計(jì)數(shù)器并重新開始計(jì)數(shù)。
時(shí)鐘源A和時(shí)鐘源C是高頻時(shí)鐘源(從圖中可以看出,時(shí)鐘源A和時(shí)鐘源C的結(jié)構(gòu)是相同的),來自帶鎖相環(huán)的晶體振蕩器輸出Fosc;時(shí)鐘源B的頻率來自32768Hz實(shí)時(shí)時(shí)鐘系統(tǒng),也就是說,時(shí)鐘源B可以作為精確的計(jì)時(shí)器。例如,2Hz定時(shí)器可以作為實(shí)時(shí)時(shí)鐘的時(shí)鐘源。
時(shí)鐘源A和時(shí)鐘源B的組合,為TimerA提供了多種計(jì)數(shù)速度。若以ClkA作為門控信號,‘1’表示允許時(shí)鐘源B信號通過,而‘0’則表示禁止時(shí)鐘源B信號通過。例如,如果時(shí)鐘源A為“1”,TimerA時(shí)鐘頻率將取決于時(shí)鐘源B;如果時(shí)鐘源A為“0”,將停止TimerA的計(jì)數(shù)。EXT1和EXT2為外部時(shí)鐘源。
定時(shí)/計(jì)數(shù)器控制的寄存器:
這是最重要的,單片機(jī)的操作說白了就是對寄存器的操作,不管是8位、16位還是32位。
P_Timebase_Setup(寫)($700EH)
時(shí)基信號發(fā)生器通過對P_Timebase_Setup(寫)($700EH)單元的編程寫入來進(jìn)行選頻操作。
P_Timebase_Clear(寫)($700FH)
TimerA的數(shù)據(jù)單元,用于向16位預(yù)置寄存器寫入數(shù)據(jù)(預(yù)置計(jì)數(shù)初值)或從其中讀取數(shù)據(jù)。在寫入數(shù)值以后,計(jì)數(shù)器便會在所選擇的頻率下進(jìn)行加一計(jì)數(shù),直至計(jì)數(shù)到0xFFFF產(chǎn)生溢出。溢出后P_TimerA_Data中的值將會被重置,再以置入的值繼續(xù)加一計(jì)數(shù)。
P_TimerA_Data(讀/寫)($700AH)
TimerA的數(shù)據(jù)單元,用于向16位預(yù)置寄存器寫入數(shù)據(jù)(預(yù)置計(jì)數(shù)初值)或從其中讀取數(shù)據(jù)。在寫入數(shù)值以后,計(jì)數(shù)器便會在所選擇的頻率下進(jìn)行加一計(jì)數(shù),直至計(jì)數(shù)到0xFFFF產(chǎn)生溢出。溢出后P_TimerA_Data中的值將會被重置,再以置入的值繼續(xù)加一計(jì)數(shù)。
P_TimerA_Ctrl(寫)($700BH)
TimerA的控制單元如表5.3所示。用戶可以通過設(shè)置該單元的第0~5位來選擇TimerA的時(shí)鐘源(時(shí)鐘源A、B)。設(shè)置該單元的第6~9位(如表2.13所示),TimerA將輸出不同頻率的脈寬調(diào)制信號,即對脈寬占空比輸出APWMO進(jìn)行控制。
P_TimerB_Data(讀/寫)($700CH)
TimerB的數(shù)據(jù)單元,用于向16位預(yù)置寄存器寫入數(shù)據(jù)(預(yù)置計(jì)數(shù)初值)或從其中讀取數(shù)據(jù)。寫入數(shù)據(jù)后,計(jì)數(shù)器就會以設(shè)定的數(shù)值往上累加直至溢出。計(jì)數(shù)初值的計(jì)算方法和TimerA相同。
P_TimerB_Ctrl(寫)($700DH)
TimerB的控制單元(如表5.7所示)。用戶可以通過設(shè)置該單元的第0~2位來選擇TimerB的時(shí)鐘源。設(shè)置第6~9位,TimerB將輸出不同頻率的脈寬調(diào)制信號,即對脈寬占空比輸出BPWMO進(jìn)行控制。
定時(shí)/計(jì)數(shù)器設(shè)置的C函數(shù):
SPCE061.lib中提供了相應(yīng)的API函數(shù)如下所示:
函數(shù)原型:
void Set_TimerA_Data(unsigned int);
void Set_TimerB_Data(unsigned int);
功能說明 預(yù)置計(jì)數(shù)器初值
用法
Set_TimerA_Data(TimerA_Data);
Set_TimerB_Data(TimerB_Data);
參數(shù)
TimerA_Data = 0xFFFF – (Source A & Source B Frequency) / Desired Frequency
TimerB_Data = 0xFFFF – (Source C Frequency) / Desired Frequency
函數(shù)原型
unsigned int Get_TimerA_Data(void);
unsigned int Get_TimerB_Data(void);
功能說明 讀計(jì)數(shù)器的值
用法
TimerA_Data = Get_TimerA_Data();
TimerB_Data = Get_TimerB_Data();
函數(shù)原型
void Set_TimerA_Ctrl(unsigned int);
void Set_TimerB_Ctrl(unsigned int);
功能說明 選擇時(shí)鐘源頻率和占空比
用法
Set_TimerA_Ctrl(TimerA_Ctrl_Data);
Set_TimerB_Ctrl(TimerB_Ctrl_Data);
參數(shù)
TimerA_Ctrl_Data = Source A + Source B Frequency + Duty Cycle
TimerB_Ctrl_Data = Source C Frequency + Duty Cycle



評論


技術(shù)專區(qū)

關(guān)閉