cc2530 timer 3 PWM <可調占空比>


前提:

  開始用的是 cc2530 timer 1來做PWM的,已經可調占空比了,但是由於硬件的改動,需要用timer 3 和 timer 4 代替。由於調試過程中出了些小問題,於是自己把這個貼出來。關鍵點注釋出來。

 

說說  硬件吧:    

 

timer 1    P1_0 口

timer 3   P1_6   P1_7口。

 注意: P1_6 對應着timer 3的通道 0 ,也就是對應着 t3cc0 這類寄存器,而非t3cc1; P1_7對應着timer 3的通道1,也就是對應着t3cc1 這類寄存器。不同的通道,對應着不同的端口。當然,也要選擇I/O為外設功能、且將它置為 保留地址2.<具體看代碼>

<硬件就沒了>

 

設置timer 3 ,很簡單的,只是需要3個寄存器,網絡上的資料要么為了編程技巧,寫的很復雜。

 timer 3 通道 0的寄存器編程,只需要對這三個寄存器進行操作即可:  T3CTL\T3CCTL0\T3CC0,如下圖:

 其中,T3CNT這個寄存器的屬性屬於只讀屬性,向它寫值是沒有作用的。但是抱歉的是,網絡上很多資料都對它賦值,這完全是不需要的。

另外,在output compare mode 下, 要修改 T3CCTLx  T3CCx 的值,必須要等到 T3CNT里面的值清為 0x00 才行,如圖:

 

 

 下面是我對 T3CTL寄存器的設置:

 分頻、中斷失能<非使能>、自由運行模式。<在其他運行模式下沒有成功調占空比>

 

下面是 T3CCTL0 的設置 <自己只是使用了timer 3的通道 0>

注意這個寄存器的 [5:3] 位, 必須選擇為 101  ,否則無法調占空比<具體原因后面附圖>

 

至於 T3CC0, 這個里面的值不可以超過 0xFF <當然也無法超過0xFF ~~>.

這整個運行的過程描述如下。

T3CNT 的寄存器 從 0x00 開始不斷的 加1 <加1的方式見手冊>,每次加1,就和T3CC0的值進行比較。 如果規定在T3CNT 等於 0x00的時候,I/O口的電平為低;當T3CNT的值等於或者大於T3CC0的時候,將I/O口的電平翻轉為高;在0xff的時候,將T3CNT的值清為0 <這個清零的過程,是硬件機制做,無法人工干預--唯一能做的是在 T3CTL里面設置>,那么用簡短的C可描述如下:

 

 1 {
 2     T3CNT = 0x00;
 3     T3CC0 = 0x55;
 4     P1_6 = 0;
 5     while(1) {
 6     T3CNT++;
 7     if (T3CNT >= T3CC0)
 8         P1_6 = 1;
 9     if(T3CNT == 0xFF) {
10         P1_6 = 0;
11         T3CNT = 0x00;
12     }
13 }

下面附上一個更加簡潔的圖片:

如圖所示:每次T3CNT的值達到T3CC0的時候,如果我們有設置,I/O端口就該有變化了。變化穩定持續的時間是T3CNT繼續加加到0xFF 的時間。然后將清零、翻轉。

<I/O 高低電平在X軸上分別持續的時間,分別以藍色和紫色線標示出來了。如圖所示,我們只需更改T3CC0的值,就可以控制它們的比例>

----

ok  貼上代碼:

 

 1 void int_port_timer3(void)
 2 {
 3     P1DIR |= 0x80;
 4     P1SEL |= 0x80;
 5     P2SEL |= 0x20;
 6     PERCFG |= 0x20;
 7 }
 8 
 9 void init_timer3(void)
10 {
11     T3CC0 = 0x55;
12     T3CCTL0 = 0x2C;
13     T3CTL = 0xB0;  //別忘記了啟動timer 3,  第4位為啟動位,應該設為 1
14 }
15 
16 void start_timer3(void)
17 {
18     int_port_timer3();
19     init_timer3();
20 }

代碼已經不需要解釋了,前面很清楚了。至於timer 3的通道1,如上面添加下 T3CC1  T3CTL1兩個寄存器即可。

參考本人另外一篇筆記:

 

cc2530 timer 1 PWM 輸出

http://www.cnblogs.com/chineseboy/p/3664355.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM