日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

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

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

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

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

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

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

          相應(yīng)需要操作的寄存器有如下幾個:

          TCx寄存器(TimerInputCapture/OutputCompare0-7)

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

          TIOS寄存器(TimerInputCapture/OutputCompareSelect)

          用來設(shè)定某一通道是輸入捕捉功能還是輸出比較功能。IOSx=1對應(yīng)位為輸出比較功能,IOSx=0對應(yīng)位為輸入捕捉功能。

          圖7TIOS寄存器

          TIE寄存器(TimerInterruptEnableRegister)

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

          圖8TIE寄存器

          TCTL1/TCTL2寄存器(TimerControlRegister1/2)

          用來決定輸出比較時的輸出模式和輸出電平。具體參見表格1。

          表格1輸出比較動作

          OMx

          OLx

          動作

          00

          不輸出

          01

          每次翻轉(zhuǎn)OCx的電平

          10

          OCx=0

          11

          OCx=1

          圖9TCTL1/TCTL2寄存器

          TFLG1寄存器(MainTimerInterruptFlag1)

          用來標(biāo)識中斷條件發(fā)生了,對某一位寫1則清除對應(yīng)位。

          圖 10 TFLG1寄存器

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


          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抓下來的波形圖。PortM0是在溢出中斷中翻轉(zhuǎn)的。PT0、PT1分別對應(yīng)兩個輸出比較通道,兩個上升沿的時間間隔為1/8192=1.22ms,測量結(jié)果與理論值完全相同。

          下面將程序做一個很小的修改。將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模塊有些問題,在這種情況下只有通道0的中斷能夠響應(yīng),通道1的中斷無法響應(yīng)。




          評論


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

          關(guān)閉