新聞中心

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

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
依舊從datasheet開(kāi)始看起,鍛煉下閱讀英文技術(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輸出的打開(kāi)時(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,如果中斷開(kāi)啟的話就會(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í)器的值可以寫(xiě)到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í)器的開(kāi)始位來(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://2s4d.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è)置開(kāi)始位,手動(dòng)更新位設(shè)為0.關(guān)閉反轉(zhuǎn)器,打開(kāi)自動(dòng)重加載.在等待時(shí)間后定時(shí)器開(kāi)始計(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)被寫(xiě)入.


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í)器的開(kāi)始位來(lái)停止定時(shí)器.如果TCNTn<=TCMPn,輸出高;如果TCNTn>TCMPn,輸出低.
3.可以通過(guò)TCON的反轉(zhuǎn)開(kāi)關(guān)來(lái)決定TOUT是否反轉(zhuǎn).反轉(zhuǎn)器會(huì)移除額外的電流來(lái)適應(yīng)輸出電平.

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

(注:因?yàn)門(mé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)開(kāi)關(guān)0=關(guān)閉 1=打開(kāi)TOUT0的反轉(zhuǎn)
Timer0手動(dòng)更新(注意) [1] 決定Timer0的手動(dòng)更新位0=不操作 1=更新TCNTB0&TCMPB0
Timer0開(kāi)始/停止 [0] 決定Timer0的開(kāi)始/關(guān)閉0=停止 1=開(kāi)啟
注意:在下次寫(xiě)之前要被清除
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] 為T(mén)imer0設(shè)置比較緩沖值
TCNTB0 Bit Description
定時(shí)器計(jì)數(shù)緩沖寄存器 [15:0] 為T(mén)imer0設(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)閉