天天看點

(5.3)uboot詳解——PWM定時器(番外)

這篇文章是一些拓展内容,如果想了解uboot的啟動過程,可以先跳過本章,如果需要掌握一些編寫裸機程式或者核心與計時器相關的驅動的知識,可以了解一下。

PWM定時器

1.概述

脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模拟電路進行控制的一種非常有效的技術,廣泛應用在測量、通信到功率控制與變換的許多領域中——百科上如是說,科學語言總是這樣的嚴謹卻又不好了解,這裡用草根語言解釋一下:PWM是改變輸出波形的一種方法,包括改變波形的頻率和占空比。

模拟信号的值可以連續變化,其時間和幅度的分辨率都沒有限制。9V電池就是一種模拟器件,因為它的輸出電壓并不精确地等于9V,而是随時間發生變化,并可取任何實數值。與此類似,從電池吸收的電流也不限定在一組可能的取值範圍之内。模拟信号與數字信号的差別在于後者的取值通常隻能屬于預先确定的可能取值集合之内,例如在{0V, 5V}這一集合中取值。

模拟電壓和電流可直接用來進行控制,如對汽車收音機的音量進行控制。在簡單的模拟收音機中,音量旋鈕被連接配接到一個可變電阻。擰動旋鈕時,電阻值變大或變小;流經這個電阻的電流也随之增加或減少,進而改變了驅動揚聲器的電流值,使音量相應變大或變小。與收音機一樣,模拟電路的輸出與輸入成線性比例。

盡管模拟控制看起來可能直覺而簡單,但它并不總是非常經濟或可行的。其中一點就是,模拟電路容易随時間漂移,因而難以調節。能夠解決這個問題的精密模拟電路可能非常龐大、笨重(如老式的家庭立體聲裝置)和昂貴。模拟電路還有可能嚴重發熱,其功耗相對于工作元件兩端電壓與電流的乘積成正比。模拟電路還可能對噪聲很敏感,任何擾動或噪聲都肯定會改變電流值的大小。

通過以數字方式控制模拟電路,可以大幅度降低系統的成本和功耗。此外,許多微控制器和DSP已經在晶片上包含了PWM控制器,這使數字控制的實作變得更加容易。

總的來說,數字信号的波形比模拟信号的波形規則穩定,而且友善便宜,便于操作,可以用pwm控制器進行管理,比如我們人眼對光比聲音敏感,也許可以用模拟電路産生的時鐘來驅動音頻,但是用來驅動顯示器是不好的,稍微有點偏差就會影響我們的觀看品質。

我們知道,模拟電路中的波形常常是正弦形式的,有波峰有波谷,但是數字電路中的波形常常是鋸齒形式的,有高電平有低電平,是以一個波形的上升沿到下一個波形的上升沿這段區間就是一個周期,然而這中間的下降沿的位置就決定了該波的占空比,這個下降沿可能位一一個波的中間,也可能位于一個波的前三分之一的位置,晶片中的pwm就是用程式設計的方式來改變這兩個量的。

下面将分析怎麼使用s3c2440的pwm産生想要的時鐘。

s3c2440有5個16比特的計時器,0,1,2,4具有pwm功能,但是4沒有輸出引腳,用作内部時鐘,計時器0有死區發生器,用于大電流的裝置。

計時器0和1共用一個8比特的預分頻器,計時器2,3,4共用另外一個8位的預分頻器,每一個計時器有一個時鐘除法器,可以分出5種不同等分的時鐘信号(1/2,1/4,1/8,1/16和TCLK),每一個定時器從相應的除法器得到自己的時鐘信号,這個8位的預分頻器是可程式設計的,它可以将PCLK進行分頻,具體分頻的值可以通過設定TCFG0和TCFG1來完成。

定時計數緩沖寄存器(TCNTBn)包含了一個當使能了定時器時的被加載到遞減計數器中的初始值。

定時比較緩沖寄存器(TCMPBn)包含了一個被加載到比較寄存器中的與遞減計數器相比較的初始值。這種 TCNTBn 和CMPBn的雙緩沖特征保證了改變頻率和占空比時定時器産生穩定的輸出。

每個定時器有它自己的由定時器時鐘驅動的 16 位遞減計數器。當遞減計數器到達零時,産生定時器中斷請求通知CPU定時器操作已經完成。當定時器計數器到達零時,相應的TCNTBn的值将自動被加載到遞減計數器以繼續下一次操作。然而,如果定時器停止了,例如,在定時器運作模式期間清除 TCONn 的定時器使能位,TCNTBn的值将不會

被重新加載到計數器中。

TCMPBn的值是用于脈寬調制(PWM)。當遞減計數器的值與定時器控制邏輯中的比較寄存器的值相比對時定時器控制邏輯改變輸出電平。是以,比較寄存器決定PWM輸出的開啟時間(或關閉時間)。

定時器專用寄存器有6種共17個寄存器

TCFG0  配置寄存器0

TCFG1 配置寄存器1

TCON 控制寄存器

TCNTBn  計數初值寄存器(5個)

TCMPBn 比較寄存器(4個)

TCNTOn 觀察寄存器(5個)

(5.3)uboot詳解——PWM定時器(番外)

從上圖可以看出,要配置一個定時器,必須要配置下面這些寄存器:

1.TCON(定時器控制寄存器):這個寄存器是用來配置每個寄存器的工作模式的,包括自動加載,手動配置或者死區等

2.TCFG0(定時器配置寄存0):這個寄存器是用來配置prescaler的,設定prescaler0預分頻的大小是0~7bit,最大值是255,16~23bit用來設定死區的長度

3.TCFG1(定時器配置寄存1):這個寄存器用來配置clock divider,包括設定哪個除數和DMA模式選擇

4.TCMPB和TCNTB:用來設定比較寄存器和計數初值寄存器

5.TCNTOn: 觀察寄存器

設定完這些寄存器以後,就可以在對應的輸出口上擷取到想要的波形了

關于pwm定時器和實時時鐘用途雖然比較廣泛,但是在uboot的啟動過程卻影響不大,這裡隻是概述一下。