M9S12XS128單片機(jī) 有8個(gè)獨(dú)立的PWM輸出通道,其中每相鄰的兩個(gè)可以級(jí)聯(lián)成一個(gè)通道。
本文著重應(yīng)用實(shí)踐,理論性的東西少談為妙,因?yàn)槔碚摰臇|西資料上都有。想借此平臺(tái)記錄下調(diào)試心得以免日后遺忘,因本人也是初學(xué)該款單片機(jī),難免有錯(cuò)誤之處,還希望達(dá)人指點(diǎn)。
PWM應(yīng)用步驟:
一、PLL初始化,這一步應(yīng)該說不算PWM設(shè)置的內(nèi)容,但是又必須設(shè)置,因?yàn)檫@關(guān)系著PWM周期值的計(jì)算。從開發(fā)板上的晶振來看是16M,但是總線時(shí)鐘卻并不是16M,S12單片機(jī)里面有個(gè)鎖相環(huán)設(shè)置,要設(shè)置好了才準(zhǔn)確。具體這個(gè)PLL函數(shù)我還沒去了解?,F(xiàn)在是現(xiàn)成套用。
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //鎖相環(huán)時(shí)鐘=2*16*(2+1)/(1+1)=48MHz
CLKSEL=0X00;
PLLCTL=0XE1;
REFDV = 1; //總線時(shí)鐘=48/2=24MHz
SYNR = 2;
_asm(nop); // BUS CLOCK=24M
_asm(nop);
while (?。–RGFLG & 0x08)) ;
CLKSEL = 0x80; //選定鎖相環(huán)時(shí)鐘
}
用了這個(gè)PLL初始化函數(shù)以后,總線時(shí)鐘就是24M了。
二、PWM相關(guān)設(shè)置
1、禁止PWM。PWME
2、選擇時(shí)鐘源。PWMPRCLK, PWMSCLA, PWMSCLB ,PWMCLK。 其中通道0 、1、4、5 可以選擇 ClockA ClockSA。通道2、3、6、7 可以選擇ClockB ClockSB
其中值得說明的是ClockA或ClockB是通過總線時(shí)鐘預(yù)分頻獲得的。ClockSA或ClockB是分別對(duì)ClockA ClockB再次進(jìn)行分頻獲得的。分頻系數(shù)的設(shè)置都有相應(yīng)的寄存器進(jìn)行設(shè)置。后面會(huì)提到。
3、極性設(shè)置 PWMPOL 。極性是指初始時(shí)通道輸出的是高電平還是低電平。這個(gè)是關(guān)系到占空比的計(jì)算。
4、選擇對(duì)齊方式 PWMCAE。對(duì)齊方式有左對(duì)齊和中間對(duì)齊兩種。兩種方法在計(jì)算占空比時(shí)也有差別。
5、設(shè)置周期和占空比。PWMPERx PWMDTYx.
6、使能PWM。PWME。
相關(guān)寄存器列表如下。
PWM使能寄存器。相應(yīng)的每一位控制每一個(gè)通道。如果是級(jí)聯(lián)方式,那么使能將由高通道的使能決定。比如
通道0和通道1級(jí)聯(lián)成16位的PWM,那么這個(gè)級(jí)聯(lián)的PWM的使能就由 PWME_PWME1 決定。
PWM時(shí)鐘選擇。0,1,4,5通道 PWMCLK_PCLK(0 or 1 or 4 or 5) =0 (則選擇CLOCKA) =1 (則選擇CLOCKSA)
PWM時(shí)鐘源預(yù)分頻寄存器
分頻系數(shù)的對(duì)照表格。 E 代表總線時(shí)鐘,也就是前面PLL出來的 Bus Clock。
PWMSCLA寄存器實(shí)際上是對(duì) 前面已經(jīng)對(duì)總線實(shí)行分頻后的 ClockA 再次進(jìn)行分頻,從而得到更小的時(shí)鐘源。
極性設(shè)置寄存器。0 表示 初始輸出 點(diǎn)平。1 表示初始輸出 高電平
PWM對(duì)齊方式設(shè)置寄存器。0 左對(duì)齊。1 中間對(duì)齊
PWM 控制寄存器。主要用于設(shè)置是否級(jí)聯(lián)模式。若PWMCTL_CON01=1;則表示 通道0和1進(jìn)行級(jí)聯(lián)
PWM周期設(shè)置。 周期為PWMRERx 的數(shù) × 時(shí)鐘源周期 ;
占空比設(shè)置寄存器。PWM模塊中每個(gè)通道有一個(gè)8位的計(jì)數(shù)器,當(dāng)計(jì)數(shù)值實(shí)時(shí)跟占空比中的值進(jìn)行比較,一但相等,則將電平翻轉(zhuǎn),并且實(shí)時(shí)跟周期寄存器中的值進(jìn)行比較,一旦相等則清零重新計(jì)數(shù)。
示意圖:
調(diào)試心得:
1、關(guān)于程序中寄存器的書寫。
一種是總線方式。比如PWME 寄存器??梢灾苯涌偩€賦值。如PWME=0x01;也可以進(jìn)行位賦值 如 PWME_PWME0=1;(注意不能直接寫PWME0=1;)
2、級(jí)聯(lián)方式時(shí):級(jí)聯(lián)方式就是為了擴(kuò)展 周期、占空比的。因此兩個(gè)通道的 8位周期、占空比寄存器就級(jí)聯(lián)成了16位的周期、占空比寄存器。特別需要注意的是,此時(shí)的 這16位的寄存器的高8位 是低通道的8位寄存器。
比如01通道級(jí)聯(lián)成的16位寄存器的高8位是通道0的8位。
評(píng)論
查看更多