<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Freescale 9S12 系列單片機應用筆記(ECT 模塊) 1

Freescale 9S12 系列單片機應用筆記(ECT 模塊) 1

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
9S12系列單片機ECT(EnhancedCaptureTimerModule)模塊是在原68HC12的StandardTimermodule基礎上加以增強功能形成的。

本文引用地址:http://dyxdggzs.com/article/201611/318815.htm

ECT模塊主要由以下幾部分組成,參看圖1:

  • 一個(gè)帶可編程預分頻的16位向上計數的自由運行計數器
  • 8個(gè)獨立的定時(shí)器通道,每個(gè)通道具備輸入捕捉/輸出比較功能
  • 4個(gè)8位脈沖累加器,也可設置成2個(gè)16位脈沖累加器
  • 一個(gè)帶可編程預分頻的16位的向下計數的計數器

圖1ECT模塊結構示意圖

從上面示意圖中可以就看出,ECT模塊相當的復雜,不是簡(jiǎn)單的幾句話(huà)就能說(shuō)明白的。我也是通過(guò)很長(cháng)時(shí)間的學(xué)習實(shí)踐,才逐步掌握了ECT模塊的使用。

本文將通過(guò)一系列的實(shí)例,從最簡(jiǎn)單的功能開(kāi)始,逐步展開(kāi)。一步一步的展示ECT模塊的強大功能。

實(shí)驗1:自由運行計數器(TCNT)與溢出中斷

自由運行計數器(TCNT)也稱(chēng)為自由運行主定時(shí)器,是一個(gè)16位的計數器,可以說(shuō)是ECT的核心。在系統復位時(shí),這個(gè)自由運行計數器的初值為$0000。當ECT模塊運行時(shí),自由運行計數器從$0000~$FFFF循環(huán)遞增計數。當計數器溢出復零時(shí),會(huì )置位中斷標志。利用這個(gè)計數器,可以產(chǎn)生一個(gè)周期的中斷信號。

TCNT的輸入時(shí)鐘也是可以選擇的,圖2給出了TCNT的時(shí)鐘源的示意圖??梢钥闯?,TCNT的輸入時(shí)鐘可以來(lái)源于總線(xiàn)時(shí)鐘、總線(xiàn)時(shí)鐘經(jīng)過(guò)預分頻、外部引腳輸入的脈沖、外部引腳輸入脈沖經(jīng)過(guò)脈沖累加器分頻這四種選擇。當然,選擇哪個(gè)時(shí)鐘源其實(shí)就是在程序中設置一下相應的寄存器這么簡(jiǎn)單。

圖2TCNT的時(shí)鐘源

了解了上面的介紹,就可以開(kāi)始本文的第一個(gè)例子了,這個(gè)例子非常簡(jiǎn)單,將BUSCLOCK分頻后作為T(mén)CNT的輸入時(shí)鐘,使能TCNT溢出中斷。

在開(kāi)始代碼之前,還需要介紹幾個(gè)程序中用到的寄存器。

TCNT寄存器(TimerCountRegister)

這個(gè)寄存器其實(shí)已經(jīng)介紹過(guò)了,它是一個(gè)16位的只讀寄存器。在每個(gè)時(shí)鐘輸入下計數值會(huì )自動(dòng)加1,當計數值為0xFFFF后下一個(gè)時(shí)鐘脈沖會(huì )使計數器溢出為0x0000。程序中可以隨時(shí)讀取TCNT的值,唯一需要注意的是TCNT是個(gè)16位的寄存器,讀取時(shí)要一次將其讀出,如果分為高低兩個(gè)字節讀取,讀到的數據不一定能拼接成一個(gè)有效的計數值。

圖3TCNT寄存器

TFLG2寄存器(MainTimerInterruptFlag2)

這個(gè)寄存器只有最高位TOF是有意義的。當TCNT溢出時(shí)會(huì )置位TOF位,程序中可以輪詢(xún)這一位來(lái)判斷TCNT是否溢出了。當然這種輪詢(xún)的方法效率很低,更實(shí)用的方法是利用TCNT溢出中斷。向TOF位寫(xiě)1會(huì )清除TOF,在TCNT溢出中斷中就必須清除TOF,否則就不會(huì )響應下一次溢出中斷。

圖4TFLG2寄存器

TSCR2寄存器(TimerSystemControlRegister2)

這個(gè)寄存器由三部分功能組成。

TOI位是TimerOverflowInterruptEnable的簡(jiǎn)寫(xiě)。TOI位為0時(shí)表示禁止TCNT溢出中斷,這時(shí)只能通過(guò)輪詢(xún)TOF位來(lái)判斷是TCNT計數器是否溢出了。TOI位為1表示使能TCNT溢出中斷。

TCRE位是TimerCounterResetEnable的簡(jiǎn)寫(xiě)。TCRE位為0表示TCNT自由運行,TCRE位為1表示當TCNT=OC7時(shí)復位。

PR2、PR1、PR0是總線(xiàn)時(shí)鐘的預分頻因子。當PR2-0組成的三位2進(jìn)制數為N時(shí),表示將BUSCLOCK分頻2^N。

圖5TSCR2寄存器

TSCR1寄存器(TimerSystemControlRegister1)

TEN位為0時(shí)ECT模塊被禁用。TEN位為1時(shí)ECT模塊被使能。

TSWAI(TimerModuleStopsWhileinWait)位為0時(shí),ECT模塊在STOP模式下仍舊運行。TSWAI位為1時(shí),ECT模塊在STOP模式停止運行。

TSFRZ(TimerandModulusCounterStopWhileinFreezeMode),這一位與TSWAI位類(lèi)似。

TFFCA(TimerFastFlagClearAll)我還沒(méi)仔細研究,作用不明。

圖6TSCR1寄存器

有了上面這些介紹,就可以很容易的看懂下面的代碼了。在我的實(shí)驗板上,晶振頻率為16.384MHz,因為沒(méi)有開(kāi)啟PLL,BUSCLOCK為8.192MHz,內核頻率為16.384MHz。8.192MHz被128預分頻后為64KHz,16位計數器溢出頻率為0.98Hz(64000/65536)


  1. #include/*commondefinesandmacros*/
  2. #include"derivative.h"/*derivative-specificdefinitions*/
  3. #include"sci.h"
  4. voidECTInit(void)
  5. {
  6. TSCR2_PR=7;//prescalefactoris8,busclock/128=8MHz/128=64KHz
  7. TSCR2_TOI=1;//timeroverflowinterruptenable
  8. TSCR1_TEN=1;//timerenable
  9. }
  10. voidmain(void)
  11. {
  12. SCIInit();
  13. SCISetBaudRate(SCI0,9600,8192000L);
  14. ECTInit();
  15. EnableInterrupts;
  16. for(;;)
  17. {
  18. _FEED_COP();/*feedsthedog*/
  19. }/*loopforever*/
  20. }
  21. interruptVectorNumber_VtimovfvoidECT_TimerOverflow_ISR(void)
  22. {
  23. TFLG2_TOF=1;//cleartimeroverflowflag
  24. SCIPutChar(SCI0,x);
  25. }



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>