cc2530的PWM實(shí)現(xiàn)
CC2530 結(jié)合了領(lǐng)先的RF 收發(fā)器的優(yōu)良性能,業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051 CPU,系統(tǒng)內(nèi)可編程閃存,8-KB RAM 和許多其它強(qiáng)大的功能。CC2530 有四種不同的閃存版本:CC2530F32/64/128/256,分別具有32/64/128/256KB 的閃存。CC2530 具有不同的運(yùn)行模式,使得它尤其適應(yīng)超低功耗要求的系統(tǒng)。
運(yùn)行模式之間的轉(zhuǎn)換時(shí)間短進(jìn)一步確保了低能源消耗。CC2530F256 結(jié)合了德州儀器的業(yè)界領(lǐng)先的黃金單元ZigBee 協(xié)議棧(Z-Stack?),提供了一個(gè)強(qiáng)大和完整的ZigBee 解決方案。CC2530F64 結(jié)合了德州儀器的黃金單元RemoTI,更好地提供了一個(gè)強(qiáng)大和完整的ZigBee RF4CE 遠(yuǎn)程控制解決方案。
先看TImer1的操作模式,分別是Free-Running, Modulo, Up-and-Down。
具體的講,F(xiàn)ree-Running就是在每個(gè)時(shí)鐘沿到來(lái)是計(jì)數(shù)器加1,從0x0000一直加到0xFFFF(如果設(shè)置了溢出中斷,則發(fā)生中斷,默認(rèn)開(kāi)啟中斷,在TIMIF.T1OVFIM可以失能中斷),計(jì)數(shù)范圍固定不變,可以通過(guò)預(yù)分頻來(lái)控制計(jì)數(shù)頻率。
Modulo則是通過(guò)設(shè)置T1CC0H,T1CC0L兩個(gè)寄存器來(lái)改變TImer1的計(jì)數(shù)上限。但是,如果timer1啟動(dòng)時(shí),計(jì)數(shù)值大于T1CC0H,T1CC0L,則timer1會(huì)繼續(xù)向上計(jì)數(shù)到0xFFFF,然后產(chǎn)生溢出中斷。如果timer1啟動(dòng)時(shí),計(jì)數(shù)值小于T1CC0H,T1CC0L,則當(dāng)計(jì)數(shù)值等于T1CC0H,T1CC0L,計(jì)數(shù)值重置。
在這個(gè)模式下如果使用比較輸出的話,T1CC0因?yàn)橛米霰容^輸出的最大值,所以通道0沒(méi)有最后兩種輸出模式。在最后兩種模式中,狀態(tài)轉(zhuǎn)換是與T1CC0和T1CCn(n表示通道)比較得出的。通道0重疊了!!
另外有一點(diǎn)需要注意,在配置T1CC0H,T1CC0L確保定時(shí)器暫停,先寫(xiě)低位在寫(xiě)高位
Up-and-Down,并不是pwm模式,我看網(wǎng)蜂pdf的定時(shí)器章節(jié)里,在T1CTL的描述中,把Up-and-Down寫(xiě)成了pwm。實(shí)際上,這并不是PWM模式??梢岳斫馐?,Modulo模式中加多一個(gè)到達(dá)計(jì)數(shù)最大值時(shí),往回計(jì)數(shù)到0x0000時(shí)產(chǎn)生溢出中斷。適用于中心對(duì)稱(chēng)PWM。
其實(shí),datasheet里面的圖已經(jīng)很清晰了。
接下來(lái)是比較輸出,設(shè)置T1CC0H,T1CC0L,當(dāng)計(jì)數(shù)值與T1CC0H,T1CC0L相等時(shí),相關(guān)通道產(chǎn)生輸出。timer1總共有5個(gè)通道(0~4)。比較輸出總共有9鐘模式,但是要注意4~5,6~7這兩對(duì)是對(duì)應(yīng)著不同操作模式,通過(guò)T1CCTLn.CMP來(lái)設(shè)置。datasheet是這樣描述的,還是挺好理解的。
使用PWM的話,一般應(yīng)該是選擇后6種吧。前2種,如果不軟件改變輸出狀態(tài),那么狀態(tài)就只改變一次,第3種則沒(méi)有PWM效果,但是可以實(shí)現(xiàn)時(shí)間大于0xFFFF的輸出翻轉(zhuǎn)。還有就是不是每一個(gè)通道都有上述9種模式。比如通道0就沒(méi)有最后兩個(gè)模式。
最后就是設(shè)置IO了,將對(duì)應(yīng)的IO口設(shè)置為外設(shè)IO就可以了。先來(lái)看看外設(shè)IO分布情況
可以看出來(lái),timer1的對(duì)應(yīng)的IO口和串口0,1重合,這里為了方便,可以通過(guò)PERCFG.U1CFG和PERCFG.U0CFG把IO設(shè)置到Alternative 2 location,也就是P1口。否則timer將不會(huì)有比較輸出。
弄清楚這些之后就是配置寄存器的問(wèn)題了。(代碼僅供參考,具體請(qǐng)根據(jù)datasheet配置相關(guān)寄存器)。先看定時(shí)器部分。