新聞中心

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

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

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

        實(shí)驗(yàn)6:模數(shù)遞減計(jì)數(shù)器MCCNT和定時(shí)中斷

        ECT模塊包含一個(gè)16位的模數(shù)遞減計(jì)數(shù)器計(jì)數(shù)寄存器MCCNT。MCCNT的輸入時(shí)鐘信號(hào)由BUSCLOCK分頻得到,分頻系數(shù)有四種選擇。每次時(shí)鐘到來后MCCNT自動(dòng)減1。當(dāng)MDC計(jì)數(shù)值減到0后,立即置位模數(shù)遞減計(jì)數(shù)器標(biāo)志寄存器MCFLG中的中斷標(biāo)志MCZF,若MCCTL中的中斷允許位MCZI=1,則向CPU發(fā)出中斷請(qǐng)求,向MCFLG的MCZF位寫1將清除該標(biāo)志。

        本文引用地址:http://www.104case.com/article/201611/318820.htm

        MCCNT有兩種工作方式:?jiǎn)未斡?jì)數(shù)方式和循環(huán)(連續(xù))工作方式。由模數(shù)遞減計(jì)數(shù)器控制寄存器MCCTL中的模數(shù)模式允許位MODMC決定當(dāng)前工作方式。

        l當(dāng)MODMC=0時(shí)為單次計(jì)數(shù)方式,計(jì)數(shù)值減到$0000后便停止計(jì)數(shù)。如果再次將定時(shí)常數(shù)直接寫入計(jì)數(shù)寄存器MCCNT,MDC便又開始一次遞減計(jì)數(shù),減到0后停止。

        l當(dāng)MODMC=1時(shí)為循環(huán)(連續(xù))工作方式,計(jì)數(shù)值減到$0000后,自動(dòng)從加載寄存器加載定時(shí)常數(shù),并開始新一輪遞減計(jì)數(shù)。

        MCCNT寄存器(ModulusDown-CounterCountRegister)

        如前所述,MCCNT為一個(gè)可置初值的遞減計(jì)數(shù)器。當(dāng)遞減到0后可以產(chǎn)生中斷信號(hào)。

        圖1MCCNT寄存器

        MCCTL寄存器(ModulusDown-CounterControlRegister)

        MCZI位是ModulusCounterUnderflowInterruptEnable的縮寫。MCZI=1時(shí)使能中斷。

        MODMC位是ModulusModeEnable的縮寫。MODMC=0表示單次計(jì)數(shù)模式。MODMC=1表示循環(huán)計(jì)數(shù)模式。

        RDMCL位是ReadModulusDown-CounterLoad的縮寫。RDMCL=0時(shí)讀MCCNT讀出的是MCCNT的當(dāng)前值。RDMCL=1時(shí)讀MCCNT讀的是加載寄存器的值。所謂加載寄存器存放的是當(dāng)MCCNT遞減到0后重新加載的那個(gè)值。加載寄存器和MCCNT公用一個(gè)地址,通過RDMCL來確定當(dāng)前讀的是哪個(gè)值。

        FLMC位是ForceLoadRegisterintotheModulusCounterCountRegister的縮寫。向ELMC寫1強(qiáng)制將加載寄存器的值加載到MCCNT。

        MCEN位是ModulusDown-CounterEnable的縮寫。MCEN=1表示使能MCCNT。

        MCPR1,MCPR0位是ModulusCounterPrescalerselect的縮寫。確定分頻系數(shù)。當(dāng)MCPR1、MCPR0組成的兩位2進(jìn)制數(shù)為N時(shí),表示分頻系數(shù)為2^N。

        圖2MCCTL寄存器

        MCFLG寄存器(ModulusDown-CounterFLAGRegister)

        MCZF—ModulusCounterUnderflowFlag

        圖3MCFLG寄存器

        下面的例子產(chǎn)生500Hz的方波。


        1. #include/*commondefinesandmacros*/
        2. #include"derivative.h"/*derivative-specificdefinitions*/
        3. #include"sci.h"
        4. voidECTInit(void)
        5. {
        6. MCCTL_MODMC=1;//循環(huán)計(jì)數(shù)模式
        7. MCCTL_MCEN=1;
        8. MCCTL_MCPR=0;
        9. MCCNT=8192;
        10. MCCTL_MCZI=1;//ModulusCounterUnderflowInterruptEnable
        11. TSCR1_TEN=1;//timerenable
        12. }
        13. voidmain(void)
        14. {
        15. ECTInit();
        16. DDRM_DDRM0=1;
        17. EnableInterrupts;
        18. for(;;)
        19. {
        20. _FEED_COP();/*feedsthedog*/
        21. }/*loopforever*/
        22. }
        23. interruptVectorNumber_VtimmdcuvoidECT_ModulusDown_ISR(void)
        24. {
        25. MCFLG_MCZF=1;
        26. PTM_PTM0=~PTM_PTM0;
        27. }




        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 监利县| 永善县| 拉萨市| 横山县| 额济纳旗| 丹凤县| 霍邱县| 卢氏县| 如皋市| 衢州市| 察哈| 景泰县| 白银市| 腾冲县| 祁东县| 建阳市| 金山区| 东乡| 闽侯县| 麦盖提县| 松溪县| 宜章县| 普兰县| 徐水县| 溧水县| 郓城县| 大姚县| 红桥区| 迁西县| 顺义区| 承德市| 澜沧| 城步| 日土县| 合川市| 东平县| 法库县| 安康市| 高安市| 屯留县| 河源市|