<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 模塊) 2

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

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏

實(shí)驗2:輸出比較功能(OutputCompare)

所謂輸出比較功能就是根據需要設置輸出比較寄存器的值,自由運行計數器的值與輸出比較寄存器的值每隔4個(gè)總線(xiàn)周期比較一次,當兩者相等時(shí),會(huì )在規定的通道引腳上輸出預定的電平。如果允許中斷,會(huì )產(chǎn)生一次輸出比較中斷。

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

相應需要操作的寄存器有如下幾個(gè):

TCx寄存器(TimerInputCapture/OutputCompare0-7)

總共8個(gè)16位寄存器,分別對應8個(gè)輸出比較通道。當TCx=TCNT時(shí)滿(mǎn)足輸出比較條件,這時(shí)根據程序設置在對應輸出管腿輸出特定的電平(具體方法見(jiàn)TCTL1/TCTL2寄存器的功能設置)或者產(chǎn)生對應的中斷事件。

TIOS寄存器(TimerInputCapture/OutputCompareSelect)

用來(lái)設定某一通道是輸入捕捉功能還是輸出比較功能。IOSx=1對應位為輸出比較功能,IOSx=0對應位為輸入捕捉功能。

圖7TIOS寄存器

TIE寄存器(TimerInterruptEnableRegister)

其中某一位置1后則使能相應的通道的中斷,這里控制的中斷既包括輸出比較中斷也包括后面要介紹的輸入捕捉中斷。

圖8TIE寄存器

TCTL1/TCTL2寄存器(TimerControlRegister1/2)

用來(lái)決定輸出比較時(shí)的輸出模式和輸出電平。具體參見(jiàn)表格1。

表格1輸出比較動(dòng)作

OMx

OLx

動(dòng)作

00

不輸出

01

每次翻轉OCx的電平

10

OCx=0

11

OCx=1

圖9TCTL1/TCTL2寄存器

TFLG1寄存器(MainTimerInterruptFlag1)

用來(lái)標識中斷條件發(fā)生了,對某一位寫(xiě)1則清除對應位。

圖 10 TFLG1寄存器

有了這些就可以開(kāi)始第二個(gè)例子了。第二個(gè)例子利用通道0和通道1的輸出比較功能。在TCNT=TC0時(shí)將對應的PT0管腿的輸出電平翻轉,并且產(chǎn)生相應中斷。在TCNT=TC1時(shí)將對應的PT1管腿的輸出電平翻轉,并且產(chǎn)生相應中斷。這樣,PT0和PT1就會(huì )輸出兩個(gè)具有恒定相位差的同頻方波信號了。


  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/8
  7. TSCR2_TOI=1;//timeroverflowinterruptenable
  8. TSCR1_TEN=1;//timerenable
  9. TIOS_IOS0=1;//channel0asoutputcompare
  10. TIOS_IOS1=1;//channel1asoutputcompare
  11. TC0=10000;
  12. TC1=20000;
  13. TIE_C0I=1;//使能channel0中斷
  14. TIE_C1I=1;//使能channel1中斷
  15. TCTL2_OL0=1;
  16. TCTL2_OM0=0;
  17. TCTL2_OL1=1;
  18. TCTL2_OM1=0;
  19. }
  20. voidmain(void)
  21. {
  22. SCIInit();
  23. SCISetBaudRate(SCI0,9600,8192000L);
  24. ECTInit();
  25. DDRM_DDRM0=1;
  26. DDRM_DDRM1=1;
  27. DDRM_DDRM2=1;
  28. EnableInterrupts;
  29. for(;;)
  30. {
  31. _FEED_COP();/*feedsthedog*/
  32. }/*loopforever*/
  33. }
  34. interruptVectorNumber_VtimovfvoidECT_TimerOverflow_ISR(void)
  35. {
  36. TFLG2=TFLG2_TOF_MASK;//cleartimeroverflowinterruptflag
  37. PTM_PTM0=~PTM_PTM0;
  38. }
  39. interruptVectorNumber_Vtimch0voidECT_0_ISR(void)
  40. {
  41. unsignedintvalue;
  42. TFLG1=TFLG1_C0F_MASK;//clearchannel0interruptflag
  43. PTM_PTM1=~PTM_PTM1;
  44. }
  45. interruptVectorNumber_Vtimch1voidECT_1_ISR(void)
  46. {
  47. TFLG1=TFLG1_C1F_MASK;//clearchannel1interruptflag
  48. PTM_PTM2=~PTM_PTM2;
  49. }
  50. interruptVectorNumber_Vtimch7voidECT_7_ISR(void)
  51. {
  52. TFLG1=TFLG1_C7F_MASK;//clearchannel7interruptflag
  53. }

下面是用USBee抓下來(lái)的波形圖。PortM0是在溢出中斷中翻轉的。PT0、PT1分別對應兩個(gè)輸出比較通道,兩個(gè)上升沿的時(shí)間間隔為1/8192=1.22ms,測量結果與理論值完全相同。

下面將程序做一個(gè)很小的修改。將TC0和TC1的值改成相同的。

  1. voidECTInit(void)
  2. {
  3. //TSCR2_PR=7;//prescalefactoris8,busclock/128=8Mhz/8
  4. TSCR2_TOI=1;//timeroverflowinterruptenable
  5. TSCR1_TEN=1;//timerenable
  6. TIOS_IOS0=1;//channel0asoutputcompare
  7. TIOS_IOS1=1;//channel1asoutputcompare
  8. TC0=10000;
  9. TC1=10000;
  10. TIE_C0I=1;//使能channel0中斷
  11. TIE_C1I=1;//使能channel1中斷
  12. TCTL2_OL0=1;
  13. TCTL2_OM0=0;
  14. TCTL2_OL1=1;
  15. TCTL2_OM1=0;
  16. }



從波形圖中可以看出,輸出是正常的。但是有些低版本的ECT模塊有些問(wèn)題,在這種情況下只有通道0的中斷能夠響應,通道1的中斷無(wú)法響應。




評論


技術(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>