<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          GNU ARM匯編--(九)s3c2440的PWM

          作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
          依舊從datasheet開始看起,鍛煉下閱讀英文技術(shù)手冊(cè)的能力

          PWM TIMER
          概述
          s3c2440有5個(gè)16bit的定時(shí)器.Timer0,1,2和3有PWM功能.Timer4是沒(méi)有輸出管腳的內(nèi)部定時(shí)器.Timer0有一個(gè)dead-zone產(chǎn)生器,用于大電流設(shè)備.
          Timer0和1共用一個(gè)8bit的預(yù)分頻器,而timer2,3,4共用另外一個(gè)8bit的預(yù)分頻器.每一個(gè)定時(shí)器都有一個(gè)時(shí)鐘除法器,可以產(chǎn)生5個(gè)不同的除法信號(hào)(1/2,1/4,1/8,1/16和TCLK).每一個(gè)定時(shí)器從時(shí)鐘除法器接收各自的時(shí)鐘信號(hào),除法器從各自的8bit預(yù)分頻器接收時(shí)鐘.8bit的預(yù)分頻器是可編程控制的,將PCLK除成要加載的值,存在TCFG0和TCFG1中.
          當(dāng)定時(shí)器啟用時(shí)定時(shí)器計(jì)數(shù)緩沖寄存器(TCNTBn)將初始值加載到down-counter中.定時(shí)器比較緩沖寄存器(TCMPBn)將初始值加載到比較寄存器中與donw-counter的值比較.當(dāng)頻率變化時(shí)TCNTBn和TCMPBn的雙緩沖屬性保證定時(shí)器產(chǎn)生穩(wěn)定的輸出.
          每個(gè)定時(shí)器有自己的16bit down-counter,由定時(shí)器時(shí)鐘驅(qū)動(dòng).當(dāng)down-counter為0,定時(shí)器中斷請(qǐng)求產(chǎn)生來(lái)通知CPU定時(shí)器操作以及完成了.當(dāng)定時(shí)器的計(jì)數(shù)器為0,相關(guān)的TCNTBn的值會(huì)自動(dòng)的加載到down-counter中來(lái)繼續(xù)下一次操作.然而,當(dāng)定時(shí)器停止,比如在定時(shí)器運(yùn)行中清除TCONn的定時(shí)器使能位,TCNTBn不會(huì)重加載到計(jì)數(shù)器中.
          TCMPBn的值被用于PWM.當(dāng)down-counter的值與比較寄存器的值吻合時(shí),定時(shí)器控制邏輯會(huì)改變輸出電平.所以比較寄存器決定PWM輸出的打開時(shí)間.


          屬性
          5個(gè)16bit的定時(shí)器
          兩個(gè)8bit的預(yù)分頻器&兩個(gè)4bit的除法器
          輸出波形可編程控制
          自動(dòng)重加載模式或one-shot pulse mode
          dead-zone產(chǎn)生器


          PWM TIMER OPERATION
          Prescaler&Divider


          BASIC TIMER OPERATION
          一個(gè)定時(shí)器(除了5)有TCNTBn,TCNTn,TCMPBn和TCMPn.當(dāng)定時(shí)器為0時(shí)TCNTBn和TCMPBn加載到TCNTn和TCMPn中.當(dāng)TCNTn為0,如果中斷開啟的話就會(huì)產(chǎn)生一個(gè)中斷請(qǐng)求.

          AUTO RELOAD&DOUBLE BUFFERING
          PWM定時(shí)器有一個(gè)雙緩沖功能,保證下次定時(shí)器操作時(shí)重加載的值改變時(shí)無(wú)需停止當(dāng)前的定時(shí)器操作.所以新的定時(shí)器的值設(shè)定,當(dāng)前的定時(shí)器操作也可以成功完成.
          定時(shí)器的值可以寫到TCNTBn中,定時(shí)器的當(dāng)前計(jì)數(shù)值可以從TCNTOn中讀到.TCNTBn被讀取的值,不表明計(jì)數(shù)器的當(dāng)前狀態(tài),而是下一次定時(shí)器持續(xù)期間的重加載值.
          當(dāng)TCNTn為0,自動(dòng)重加載操作會(huì)復(fù)制TCNTBn到TCNTn中.如果TCNTn為0,而自動(dòng)重加載的使能位為0,那么TCNTn不會(huì)再操作了.


          TIMER INITIALIZATION USING MANUAL UPDATE BIT AND INVERTER BIT
          當(dāng)down-counter為0,定時(shí)器的自動(dòng)重加載操作就會(huì)動(dòng)作.所以u(píng)ser要預(yù)先定義TCNTn的初始值.在這種情況下,初始值通過(guò)手動(dòng)更新位進(jìn)行加載.下面的步驟描述如何啟動(dòng)一個(gè)定時(shí)器:
          1.向TCNTBn和TCMPBn中些初始值
          2.設(shè)置定時(shí)器的手動(dòng)更新位.推薦配置inverter on/off bit(不管用不用)
          3.設(shè)置定時(shí)器的開始位來(lái)啟動(dòng)定時(shí)器(同時(shí)清除手動(dòng)更新位)
          如果定時(shí)器被強(qiáng)行停止,TCNTn保持計(jì)數(shù)器的值而且不會(huì)從TCNTBm中重加載.如果要設(shè)置一個(gè)新值,要執(zhí)行手動(dòng)更新.
          注意:不論何時(shí)TOUT inverter on/off bit被更改,在定時(shí)器運(yùn)行時(shí)TOUTn的邏輯值都會(huì)改變.因此,最好在配置手動(dòng)更新位的時(shí)候配置inverter on/off bit.
          TIMER OPERATION

          上面的圖是下面操作的結(jié)果:

          本文引用地址:http://www.ex-cimer.com/article/201611/321722.htm

          1.使能自動(dòng)重加載功能.設(shè)置TCNTBn為160(50+110),TCMPBn為110.設(shè)置手動(dòng)更新位并配置反轉(zhuǎn)位(on/off).手動(dòng)更新位將TCNTn和TCMPn的值更新到TCNTBn和TCMPBn中. 接下來(lái)設(shè)置TCNTBn為80(40+40),TCMPBn為40,它們決定下一次重加載的值.

          2.設(shè)置開始位,手動(dòng)更新位設(shè)為0.關(guān)閉反轉(zhuǎn)器,打開自動(dòng)重加載.在等待時(shí)間后定時(shí)器開始計(jì)數(shù)

          3.當(dāng)TCNTn和TCMPn有相同的值時(shí),TOUTn的邏輯電平由低變?yōu)楦?/p>

          4.當(dāng)TCNTn為0時(shí),中斷請(qǐng)求產(chǎn)生,TCNTBn的值被加載到一個(gè)臨時(shí)寄存器.在下次定時(shí)器周期,TCNTn會(huì)重載臨時(shí)寄存器的值.

          5.在中斷服務(wù)例程中,TCNTBn設(shè)為80(20+60),TCMPBn設(shè)置為60,同樣用于下一次周期.

          6.當(dāng)TCNTn和TCMPn有相同的值時(shí),TOUTn的邏輯電平由低變?yōu)楦?/p>

          7.當(dāng)TCNTn為0,TCNTn自動(dòng)加載TCNTBn的值,觸發(fā)中斷請(qǐng)求.

          8.在中斷服務(wù)例程中自動(dòng)重加載和中斷請(qǐng)求被禁用,停止定時(shí)器

          9.當(dāng)TCNTn與TCMPn有相同值,TOUTn的邏輯電平由低變?yōu)楦?/p>

          10.即使TCNT0為0,因?yàn)樽詣?dòng)重加載被禁用了所以TCNTn不會(huì)再重加載,定時(shí)器停止了

          11.沒(méi)有中斷請(qǐng)求產(chǎn)生了

          PULSE WIDTH MODULATION(PWM)

          通過(guò)使用TCMPBn來(lái)實(shí)現(xiàn)PWM功能.PWM的頻率由TCNTBn來(lái)決定.
          減少TCMPBn的值可以有更高的PWM值.增加TCMPBn的值可以有更低的PWM值.如果輸出反轉(zhuǎn)使能了,增加和減少操作也要反轉(zhuǎn).
          雙緩沖功能允許在ISR中將下一次PWM的TCMPBn的值在當(dāng)前PWM的周期的任何一個(gè)時(shí)間點(diǎn)被寫入.


          OUTPUT LEVEL CONTROL

          假定反轉(zhuǎn)功能時(shí)關(guān)閉的,下面的步驟描述如何保證TOUT是高還是低:
          1.關(guān)閉自動(dòng)重加載位.TOUTn時(shí)高電平,當(dāng)TCNTn為0時(shí)定時(shí)器停止.
          2.通過(guò)清除定時(shí)器的開始位來(lái)停止定時(shí)器.如果TCNTn<=TCMPn,輸出高;如果TCNTn>TCMPn,輸出低.
          3.可以通過(guò)TCON的反轉(zhuǎn)開關(guān)來(lái)決定TOUT是否反轉(zhuǎn).反轉(zhuǎn)器會(huì)移除額外的電流來(lái)適應(yīng)輸出電平.

          PWM的各個(gè)寄存器描述

          (注:因?yàn)門Q2440的板子是用TOUT0來(lái)控制蜂鳴器的,所以有些寄存器就不關(guān)注了)

          定時(shí)器配置寄存器0(TCFG0)

          定時(shí)器輸入時(shí)鐘周期 = PCLK/(prescaler + 1)/(divider value)

          {prescaler} = 0~255

          {divider value} = 2,4,8,16

          Register Address R/W Description

          TCFG0 0x51000000 R/W 配置兩個(gè)8的預(yù)分頻器

          TCFG0 Bit Description

          Dead zone length [23:16] 死區(qū)的長(zhǎng)度,長(zhǎng)度等于timer0的單位長(zhǎng)度

          Prescaler1 [15:8] 這個(gè)是給Timer2 3 4用的

          Prescaler0 [7:0] 這個(gè)是給Timer0 1用的

          定時(shí)器配置寄存器1(TCFG1)

          Register Address R/W Description

          TCFG1 0x51000004 R/W 5路MUX和DMA模式選擇寄存器

          TCFG1 Bit Description

          DMA mode [23:20] 選擇DMA請(qǐng)求通道

          0000=No select 0001=Timer00010=Timer1

          0011=Timer20100=Timer3 0101=Timer4

          MUX4 [19:16] 為PWM Timer4選擇復(fù)用輸入

          0000=1/2 0001=1/4 0000=1/8

          0011=1/16 01xx=External TCLK1

          MUX3 [15:12] 為PWM Timer3選擇復(fù)用輸入

          0000=1/2 0001=1/4 0000=1/8

          0011=1/16 01xx=External TCLK1

          MUX2 [11:8] 為PWM Timer2選擇復(fù)用輸入

          0000=1/2 0001=1/4 0000=1/8

          0011=1/16 01xx=External TCLK1

          MUX1 [7:4] 為PWM Timer1選擇復(fù)用輸入

          0000=1/2 0001=1/4 0010=1/8

          0011=1/16 01xx=External TCLK1

          MUX0 [3:0] 為PWM Timer0選擇復(fù)用輸入

          0000=1/2 0001=1/4 0010=1/8

          0011=1/16 01xx=External TCLK1

          Timer控制寄存器
          Register Address R/W Description
          TCON 0x51000008 R/W 定時(shí)器控制寄存器
          TCON Bit Descrption
          Dead zone enable [4] 決定死區(qū)的操作 0=disable 1=enable
          Timer0 auto reload on/off [3] 決定Timer0的自動(dòng)重載 0=one-shot 1=auto reload
          Timer0 output inverter on/off [2] 決定Timer0的輸出電平反轉(zhuǎn)開關(guān)0=關(guān)閉 1=打開TOUT0的反轉(zhuǎn)
          Timer0手動(dòng)更新(注意) [1] 決定Timer0的手動(dòng)更新位0=不操作 1=更新TCNTB0&TCMPB0
          Timer0開始/停止 [0] 決定Timer0的開始/關(guān)閉0=停止 1=開啟
          注意:在下次寫之前要被清除
          Timer0 COUNT BUFFER REGISTER & COMPARE BUFFER REGISTER(TCNTB0/TCMPB0)
          Register Address R/W Description
          TCNTB0 0x5100000c R/W Timer0計(jì)數(shù)緩沖寄存器
          TCMPB0 0x51000010 R/W Timer0比較緩沖寄存器
          TCMPB0 Bit Description
          定時(shí)器比較緩沖寄存器 [15:0] 為Timer0設(shè)置比較緩沖值
          TCNTB0 Bit Description
          定時(shí)器計(jì)數(shù)緩沖寄存器 [15:0] 為Timer0設(shè)置計(jì)數(shù)緩沖值
          Timer0計(jì)數(shù)觀察寄存器(TCNTO0)
          Register Address R/W Description
          TCNTO0 0x51000014 R Timer0計(jì)數(shù)觀察寄存器
          按照datasheet的一些說(shuō)明和步驟,給出匯編代碼:
          [cpp]view plaincopy

          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: ARM匯編s3c2440PW

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();