色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          S3C2440PWM 定時(shí)器

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

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

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

          不同分頻信號(hào)(1/2,1/4,1/8,1/16和TCLK)的時(shí)鐘分頻器。每個(gè)定時(shí)器模塊從相應(yīng)8位預(yù)分頻器得到其自己的時(shí)鐘信

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

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

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

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

          操作。然而,如果定時(shí)器停止了,例如,在定時(shí)器運(yùn)行模式期間清除 TCONn 的定時(shí)器使能位,TCNTBn的值將不會(huì)

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

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

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

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

          一個(gè)定時(shí)器0初始化代碼

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

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

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

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

          //開發(fā)板的測(cè)試蜂鳴器的試驗(yàn)程序(我寫出了詳細(xì)的注釋)

          1. #include"2440addr.h"
          2. #include"2440lib.h"http://這個(gè)只使用了這個(gè)文件的延遲函數(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;//預(yù)分頻值為15
          10. rTCFG1&=~0x0f;
          11. rTCFG1|=0x02;//分頻值為8
          12. rTCNTB0=(PCLK>>7)/freq;//設(shè)定定時(shí)器0計(jì)數(shù)緩沖器的值
          13. rTCMPB0=rTCNTB0>>1;//定時(shí)器0比較緩沖器的值,PWM輸出占空比50%
          14. rTCON&=~0x1f;
          15. rTCON|=0xb;//自動(dòng)重載,關(guān)閉變相,手動(dòng)更新,開啟定時(shí)器0
          16. rTCON&=~2;//清除手動(dòng)更新位
          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)時(shí)鐘400M
          34. ChangeClockDivider(2,1);//設(shè)置分頻1:4:8
          35. CalcBusClk();//計(jì)算總線頻率
          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í)

          評(píng)論


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

          關(guān)閉