在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            S3C2440PWM 定時器

            作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
            S3C2440A 有5個16位定時器。其中定時器0、1、2和3具有脈寬調(diào)制(PWM)功能。定時器4是一個無輸出引腳

            的內(nèi)部定時器。定時器0還包含用于大電流驅(qū)動的死區(qū)發(fā)生器。
            定時器0和1共用一個8位預分頻器,定時器2、3和4共用另外的8位預分頻器。每個定時器都有一個可以生成5種

            本文引用地址:http://www.biyoush.com/article/201611/319195.htm

            不同分頻信號(1/2,1/4,1/8,1/16和TCLK)的時鐘分頻器。每個定時器模塊從相應8位預分頻器得到其自己的時鐘信

            號。8位預分頻器是可編程的,并且按存儲在TCFG0和TCFG1寄存器中的加載值來分頻PCLK。
            定時計數(shù)緩沖寄存器(TCNTBn)包含了一個當使能了定時器時的被加載到遞減計數(shù)器中的初始值。定時比較緩

            沖寄存器(TCMPBn)包含了一個被加載到比較寄存器中的與遞減計數(shù)器相比較的初始值。這種 TCNTBn 和CMPBn

            的雙緩沖特征保證了改變頻率和占空比時定時器產(chǎn)生穩(wěn)定的輸出。
            每個定時器有它自己的由定時器時鐘驅(qū)動的 16 位遞減計數(shù)器。當遞減計數(shù)器到達零時,產(chǎn)生定時器中斷請求通知

            CPU定時器操作已經(jīng)完成。當定時器計數(shù)器到達零時,相應的TCNTBn的值將自動被加載到遞減計數(shù)器以繼續(xù)下一次

            操作。然而,如果定時器停止了,例如,在定時器運行模式期間清除 TCONn 的定時器使能位,TCNTBn的值將不會

            被重新加載到計數(shù)器中。
            TCMPBn的值是用于脈寬調(diào)制(PWM)。當遞減計數(shù)器的值與定時器控制邏輯中的比較寄存器的值相匹配時定時

            器控制邏輯改變輸出電平。因此,比較寄存器決定PWM輸出的開啟時間(或關(guān)閉時間)。

            以上為數(shù)據(jù)手冊的描述

            定時器專用寄存器有6種共17個寄存器
            TCFG0 配置寄存器0
            TCFG1配置寄存器1
            TCON控制寄存器
            TCNTBn 計數(shù)初值寄存器(5個)
            TCMPBn比較寄存器(4個)
            TCNTOn觀察寄存器(5個)

            一個定時器0初始化代碼

            [cpp]view plaincopy
            1. voidTimer0_Init(void)
            2. {
            3. rTCFG0&=~(0xFF);//對TCFG0[0:15]清零
            4. rTCFG0|=99;//定時器的預分頻值為99
            5. rTCFG1&=~(0x0f);//對TCFG1[0:3]清零
            6. rTCFG1|=0x02;//選擇定時器0,分頻值為1/8
            7. rTCNTB0=62500;//1s中斷一次
            8. rTCON|=(1<<1);//手動更新TCNTB0的值
            9. rTCON=(1<<0)|(1<<3);//清除手動更新。自動重載,啟動定時器0
            10. }

            說明:
            定時器輸入時鐘頻率 = PCLK / {預分頻值+1} / {分頻值}
            {預分頻值} = 0~255
            {分頻值} = 2, 4, 8, 16

            開發(fā)板設(shè)置的PCLK為50MHZ

            定時器輸入的時鐘頻率=(50MHZ)/(99+1)/8=62500HZ

            //開發(fā)板的測試蜂鳴器的試驗程序(我寫出了詳細的注釋)

            1. #include"2440addr.h"
            2. #include"2440lib.h"http://這個只使用了這個文件的延遲函數(shù),和串口有關(guān)的函數(shù)
            3. voidBeep_Freq_Set(U32freq)
            4. {
            5. rGPBCON&=~3;
            6. rGPBCON|=2;//設(shè)置GPB0為OUT0
            7. rGPBUP=0x0;//使能上拉
            8. rTCFG0&=~0xff;
            9. rTCFG0|=15;//預分頻值為15
            10. rTCFG1&=~0x0f;
            11. rTCFG1|=0x02;//分頻值為8
            12. rTCNTB0=(PCLK>>7)/freq;//設(shè)定定時器0計數(shù)緩沖器的值
            13. rTCMPB0=rTCNTB0>>1;//定時器0比較緩沖器的值,PWM輸出占空比50%
            14. rTCON&=~0x1f;
            15. rTCON|=0xb;//自動重載,關(guān)閉變相,手動更新,開啟定時器0
            16. rTCON&=~2;//清除手動更新位
            17. }
            18. voidBeep_Stop(void)
            19. {
            20. rGPBCON&=~3;//setGPB0asoutput
            21. rGPBCON|=1;
            22. rGPBDAT&=~1;//輸出低電平
            23. }
            24. voidBeep_Init(U32freq,U32ms)
            25. {
            26. Beep_Stop();
            27. Delay(ms);
            28. Beep_Freq_Set(freq);
            29. }
            30. voidMain()
            31. {
            32. U16freq=800;
            33. SelectFclk(2);//設(shè)置系統(tǒng)時鐘400M
            34. ChangeClockDivider(2,1);//設(shè)置分頻1:4:8
            35. CalcBusClk();//計算總線頻率
            36. rGPHCON&=~((3<<4)|(3<<6));
            37. rGPHCON|=(2<<4)|(2<<6);//GPH2--TXD[0];GPH3--RXD[0]
            38. rGPHUP=0x00;//使能上拉功能
            39. Uart_Init(0,115200);
            40. Uart_Select(0);
            41. Uart_Printf("nBUZZERTEST(PWMControl)n");
            42. Uart_Printf("Press+/-toincrease/reducethefrequencyofBUZZER!n");
            43. Uart_Printf("PressESCkeytoExitthisprogram!nn");
            44. Beep_Init(freq,50);
            45. while(1)
            46. {
            47. U8key=Uart_Getch();
            48. if(key==+)
            49. {
            50. if(freq<2000)//lci20000
            51. freq+=10;
            52. Beep_Freq_Set(freq);
            53. }
            54. if(key==-)
            55. {
            56. if(freq>11)
            57. freq-=10;
            58. Beep_Freq_Set(freq);
            59. }
            60. Uart_Printf("tFreq=%dn",freq);
            61. if(key==ESC_KEY)
            62. {
            63. Beep_Stop();
            64. return;
            65. }
            66. }
            67. }



            關(guān)鍵詞: S3C2440PWM定時

            評論


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

            關(guān)閉