GNU ARM匯編--(九)s3c2440的PWM
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é)果:
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
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論