MC9S12XS128之時間模塊TIM_第1頁
MC9S12XS128之時間模塊TIM_第2頁
MC9S12XS128之時間模塊TIM_第3頁
MC9S12XS128之時間模塊TIM_第4頁
MC9S12XS128之時間模塊TIM_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、MC9S12XS128之時間模塊TIM(1)輸入捕捉買了本嵌入式系統(tǒng)使用HCS12微控制器的設計與應用這本書,看了覺得幫助不大。因為里面有些東西講得不夠詳細,并且這本書不是針對XS128來寫的。網(wǎng)上也有一些網(wǎng)友寫的資料,那都只是針對某一方面的。我覺得最好的資料還是英文版的說明文檔,里面好多東西都講得很詳細,雖然看起來有點費勁,但那里值得的。接下來就自己的學習經(jīng)歷。TIM中的功能比較多,有輸入捕捉、輸出比較,還有脈沖累加器。這里主要記一下輸入捕捉和輸出比較。輸入捕捉這個功能很有用,他不僅可以捕捉外界事件的發(fā)生(這個功能和51中的外部中斷差不多),還可以捕捉外界事件發(fā)生的時間。捕捉外界時間這個功能

2、可以運用到驅(qū)動超聲波測距中去。IOC0IOC7是輸入捕捉輸出比較的外部針腳。當IOSx=0時(IOSx=1時為輸出比較),則將相應的通道配置為輸入捕捉了。當輸入捕捉檢測到有上升沿或下降沿時,就會把那時寄存器的值鎖存到TCx中,這樣就可以通過查詢TCx來確定事件發(fā)生的時間了。如果輸入捕捉控制寄存器TIE(CxI=1)中允許輸入捕捉中斷,則捕捉到事件時,系統(tǒng)會產(chǎn)生一次中斷。接下來依次說明一下相關的寄存器設置:TSCR1:TEN是定時器允許位。TEN=1時,允許定時器工作,TEN=0時,禁止定時器工作。其余不常用,設為0即可。TSCR2:TOI是定時器溢出中斷允許位。這個在輸入捕捉中沒用到,設為0即

3、可。TCRE是定時器計數(shù)寄存器復位允許位。用在輸出比較中,允許輸出比較寄存器7的事件來復位定時器計數(shù)寄存器。這里設為0即可。PR2PR0是定時器分頻因子選擇位。不同的組合可以設定不同的定時器時鐘:TIOS是輸入捕捉和輸出比較選擇寄存器,在這里設定IOC0IOC7是用于輸入捕捉還是用于輸出比較。里面的8位對應著IOC0IOC7八個通道,相應位位1,則設為輸出比較。相應位設為0,則為輸入捕捉。TCTL3和TCTL4是用來設定輸入捕捉極性的寄存器,在這里可以設為上升沿、下降沿、上升沿或下降沿觸發(fā)輸入捕捉。其中EDGxB和EDGxA一起來設相應通道輸入捕捉極性,對應的功能如下:(0 0)為禁止輸入捕捉

4、。(0 1)為上升沿捕捉(1 0)為下降沿捕捉(1 1)為上升沿或下降沿捕捉TIE是輸入捕捉或輸出比較中斷允許位。這里的每一位是和TIOS上的位一一對應的。相應置1時,則捕捉到事件時,則系統(tǒng)會產(chǎn)生中斷。相應位設為0時,則不能。TFLG1是輸入捕捉或輸出比較中斷標位寄存器。當發(fā)生輸入捕捉或輸出比較事件時,相應位置1。向該位寫1,可以清空該標志位。通道寄存器TC0TC7用于鎖存發(fā)生捕捉事件時自由運行的計數(shù)器的計數(shù)值。通過查詢TC0TC7相應的位,可以確定捕捉事件發(fā)生的時刻。與輸入捕捉相關的寄存器還有:ICOVW:輸入控制修改寄存器ICSYS:輸入控制系統(tǒng)控制寄存器DLYCT:延遲計數(shù)控制寄存器(可

5、以自動處理窄脈沖干擾)這些不常,可以不管接下來按照上面的寄存器設置好相應的功能,程序就出來了:void ECT0_INIT()       /輸入捕捉通道0初始化函數(shù) TSCR2=0X06;           /關閉溢出中斷且64分頻 TIOS_IOS0=0;          /定通道0為輸入捕

6、捉,1為輸出比較 TCTL4=0X01;             /上升沿捕捉  0x02為下降沿捕捉 TIE_C0I=1;               /通道0中斷使能 TSCR1=0X80;      /開

7、啟總定時器中斷 TFLG1_C0F=1;   /標志位清零中斷程序:#pragma CODE_SEG _NEAR_SEG NON_BANKED  /分配內(nèi)存空間void interrupt 8 timer_onput()    /輸入捕捉通道0的中斷向量為8   TFLG1_C0F=1;   /標志位清零   asm sei;      /關總中斷 

8、;  / PORTB=PORTB;   PORTB&=(1<<7);   delay_us(1);   PORTB|=(1<<7);      asm cli;   /開總中斷                

9、                                                  

10、                                                  

11、                                                  

12、                         BY DABAOMC9S12XS128之時間模塊TIM(2)輸出比較     輸出比較看似不能,卻磨折了我兩天,其中大多都是些小細節(jié)問題在糾纏?,F(xiàn)在終于想明白其中一些道理。不過有些寄存器還是沒有理解,如強制輸出比較寄存器CFORC,測試了好久,都未能得到想要的結果,希望

13、路過的高手能指點一下。            接下來繼續(xù)記一下學習輸出比較的點點滴滴吧。             XS128的定時器模塊中的輸入捕捉和輸出比較共用同一組管腳。可以通過設置TIOS寄存器來選擇。我覺得輸出比較的原理和PWM波的產(chǎn)生原理差不多,都是通過計數(shù)器的數(shù)值和某一寄存器里的值比較產(chǎn)生輸出的高低電平變化。在輸出比較中,當計數(shù)器的值與某一輸出比較通道的T

14、Cx(TC0TC7)的值相等時,該通道上引腳會輸出高電平、低電平,或是對引腳上的電平進行翻轉(zhuǎn)。這時標志位CxF會置位,如果開通中斷的話(TIE中的CxI=1),系統(tǒng)還會產(chǎn)生一個中斷。            輸出比較用到的寄存器好多都是和輸入捕捉的一樣,現(xiàn)在按照輸出比較的程序需要再過一遍。            定時器系統(tǒng)控制寄存器TSCR1:設置定時器正常工作 

15、60;          定時器系統(tǒng)控制寄存器TSCR2:設置定時器溢出中斷允許,和定時器時鐘分頻設置            定時器計數(shù)寄存器TCNT:這是個16位寄存器,在一般情況下是不可以寫的。輸入捕捉時,就是這個寄存器的值存入TCx中,輸出比較時,也是這個寄存器的值與TCx的值比較。它的時鐘由TSCR2設置的分頻決定。程序中這個寄存器一般情況下不用理會。   &

16、#160;    主定時器國斷標志寄存器TFLG2:在這個寄存器中只有最高位TOF有效,是定時器溢出標志位。當TCNT運行產(chǎn)生溢出時,該位就置位了。如果允許定時器溢出中斷的話,則系統(tǒng)會產(chǎn)生一個中斷。         輸入捕捉和輸出比較選擇寄存器TIOS:設置相應的通道為輸入捕捉或是輸出比較。         主定時器中斷標志寄存器TFLG1:輸入捕捉或輸出比較的各通道的中斷標志位。對相應的通道寫1,可以清除

17、標志位。              定時器中斷允許寄存器TIE:里面有8位,對應輸入捕捉或輸出比較的8個通道,設置是否允許相應通道的中斷。             通道寄存器TC0TC7:在輸出比較中隨時可以寫入,它的作用是,當TCx=TCNT時,相應的x通道就會發(fā)生輸出比較。此時相應的引腳就可以輸出高電平、低電平,或是翻轉(zhuǎn)引腳的電平。 

18、           上面的寄存器都是和輸入捕捉共用的,在輸入捕捉中講過。接下來就具體說明輸出比較特別有的寄存器設置。      TCTL1TCTL2:這個兩個寄存器中每個OMx和OLx組合在一起,來設置相應通道的引腳電平輸出方式: (0 0):輸出比較的通道與引腳邏輯斷開,也就是輸出比較的輸出不會影響相應的引腳的電平。 (0 1):翻轉(zhuǎn)輸出比較的引腳的電平。 (1 0):在相應的引腳上輸出低電平。

19、0;(1 1):在相應的引腳上輸出高電平。      CFORC:定時器強制輸出比較寄存器相應位置1時,可以把相應通道的輸出比較設為強制輸出比較。一般情況下不用。      OC7M:輸出比較通道7屏蔽寄存器      OC7D:輸出比較通道7數(shù)據(jù)寄存器通道7上的連續(xù)輸出比較會覆蓋所有其他通道的引腳上的輸出結果。OC7M就是設置其他通道的哪些通道會受通道7控制的。當OC7M的某位置1時,相應通道的輸出比較就會受通道7

20、控制,此時受控的通道在其通道上設置的OMx和OLx無效了,而是按照OC7D中對應的OC7Dx中的值輸出到相應的引腳上??偟膩碚f,OC7M是選擇受通道7控制的其他通道,而OC7D是受控的通道在通道7發(fā)生輸出比較時的輸出結果。      TTOV:定時器溢出翻轉(zhuǎn)寄存器相應通道置1時,計數(shù)器溢出時,允許翻轉(zhuǎn)輸出比較引腳上的電平。這個寄存器只在輸出比較模式下才有效。一般情況下,用不到這個寄存器,程序中不用做設置。     OCPD(OCPD0OCPD7):當相應位置1時,標志位正常,但是輸出比較的結果不

21、能輸出到引腳上,也就是輸出比較的寄存器與引腳邏輯斷開了。當相應位設為0時,標志位正常,引腳輸出也正常。  下面是相應的程序:     #include <hidef.h>      /* common defines and macros */#include "derivative.h"      /* derivative-specific definitions */v

22、oid main(void)  DDRB=0XFF;  PORTB=0X7F;  /DisableInterrupts;  TSCR2=0X07; /設置定時器分頻  TIOS=0X01;/通道0為輸出比較  TCTL2=0X01;  /模式為翻轉(zhuǎn)引腳輸出電平  TC0=0XAAAA;   /設置輸出引腳在一個周期內(nèi)翻轉(zhuǎn)的時間,      

23、0;                        /如果這個值保持不變的話,那總的來看,                       &#

24、160;   /引腳輸出電平的周期是不變的,周期等于計數(shù)器計數(shù)一周的時間  /TTOV=0X00;  /  /CFORC=0X01; /加上這一句,似乎沒什么影響。還沒清這個寄存器的具體作用。    TIE=0X01; /相應通道中斷允許     TSCR1=0X80;    /打開定時器  /PORTB=PTT;    

25、60;EnableInterrupts; while(1);#pragma CODE_SEG _NEAR_SEG NON_BANKED interrupt void  interrupt 8 CH0_ISR(void)   /要特別注意中斷函數(shù)的書寫格式,我就在這里吃了大虧DisableInterrupts;TFLG1=0x01;        /清零標志位if(TC0=0xAAAA)     /

26、改變引腳輸出的占空比。輸出的周期由計數(shù)器計數(shù)一                   /周的時間決定,要改變,只能改變定時器的時鐘分頻TC0=0xffff;TC0=0xAAAA; PORTB_PB7=PORTB_PB7;     /測試是否進入中斷EnableInterrupts;      

27、;                                                  

28、;           BY DABAOMC9S12XS128之時間模塊TIM(3)脈沖累加器         XS128中的脈沖累加器和DG128的很不一樣。相對DG128來說,XS128的脈沖累加器大大簡化了,其中只有三個寄存器需要設置:PACTL、PAFLG、PACNT。        16位脈沖累加器PACT與IOC7共用一個引腳。顧名思義

29、,脈沖累加器就是對有效邊沿(上升沿或下降沿)進行計數(shù),然后把計數(shù)的值保存在寄存器PACNT中。寄存器PACTL是16位脈沖累加器的核心,幾乎所有的設置都是在這個寄存器中。        接下來解剖一下這個核心寄存器PACTL:PAEN:脈沖累加器允許位,置1,則工作。置0,則禁止。PAEN與TEN無關,定時器TEN禁止時,脈沖累加器仍可以工作。PAMOD:工作方式選擇位。置1,為門控時間累加器方式。置0,為事件計數(shù)器方式。        門控時間

30、累加器方式:輸入引腳上的有效電平會觸發(fā)脈沖累加器對64分頻后的時鐘進行計數(shù)。        事件計數(shù)器方式:脈沖累加器對引腳上的每個有效邊沿計數(shù)。引腳上每產(chǎn)生一個有效邊沿,脈沖累加器計數(shù)器的值就會加1。PEDGE:邊沿跳變控制位。它的功能和脈沖累加器的工作方式有關。如下表:(0  0):事件計數(shù)器方式,下降沿有效(0  1):事件計數(shù)器方式,上升沿有效(1       0):門控時間累加器方式,IOC7引腳上的高電平使64分頻

31、后的總線時鐘輸入到脈沖累加器中。(1       1):門控時間累加器方式,IOC7引腳上的低電平使64分頻后的總線時鐘輸入到脈沖累加器中。CLK0CLK1:時鐘選擇位。其功能如下表:(0       0):使用TIM中分頻后的定時器時鐘作為計數(shù)時鐘(0       1):選PACLK作為計數(shù)時鐘(1       0)

32、:選PACLK/256作為計數(shù)時鐘(2       1):選PACLK/65536作為計數(shù)時鐘其中PACLK是對總線時鐘進行64分頻后的時鐘。PAVOI:脈沖累加器溢出中斷允許位。置1,則允許中斷產(chǎn)生。置0,則禁止中斷。PAI:脈沖累加器輸入中斷允許位。置1,則允許中斷產(chǎn)生。置0,則禁止中斷。標志寄存器PAFLG:PAVOF:當脈沖累加器溢出時,此位置1。如果有PAVOI=1時,則產(chǎn)生中斷。向該位寫1,可以清除標志位。PAIF:當在IOC7引腳上檢測到選定的邊沿跳變,此位置1。在事件計數(shù)方式下,事件沿跳變會使該位置位。在門控時間累加器方式下,IOC7引腳上門控信號的最后一個下降沿使該位置位。對其寫1,可以清除標志位。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論