CC2530通過定時器3中斷方式每10ms輸出一個下降沿
阿新 • • 發佈:2019-02-14
Request/Task:
由於專案中硬體電路遲遲未到位,故利用一個CC2530板子的P0.0口作為輸出,模擬10ms一次的下降沿中斷,給除錯電路板。
Idea
定時器3和定時器4是兩個8位定時器,一般上,控制暫存器TxCTL被用來控制定時器模式。本文選用的是自由執行模式,計數器從0x00開始,在每一個活動時鐘邊沿遞增,當計數器到達0xFF時,計數器重置為0x00並繼續遞增。當最終計數器值到達0xFF時(如發生溢位),中斷標誌位TIMIF.TxOVFIF將被置1。如已設定相應中斷遮蔽位TxCTL.OVFIM,產生中斷請求。所以需要設定的關於定時器3的暫存器有:T3CTL(定時器3控制)、IRCON(中斷標誌)、T3IE(定時器3中斷使能)、EA(總中斷使能)。Implement
/**************************************************************************** * 文 件 名: main.c * 描 述: 定時器T3通過中斷方式控制每10ms輸出一個下降沿 ****************************************************************************/ #include <ioCC2530.h> typedef unsigned char uchar; typedef unsigned int uint; #define LED1 P0_0 // P0.0口控制LED1 uint count; //用於定時器計數 /**************************************************************************** * 名 稱: InitLed() * 功 能: 設定LED燈相應的IO口 * 入口引數: 無 * 出口引數: 無 ****************************************************************************/ void InitLed(void) { P0DIR |= 0x01; //P0.0定義為輸出 LED1 = 1; //使LED1燈上電預設為熄滅 } /**************************************************************************** * 名 稱: InitT3() * 功 能: 定時器初始化,系統不配置工作時鐘時預設是2分頻,即16MHz * 入口引數: 無 * 出口引數: 無 ****************************************************************************/ void InitT3() { T3CTL |= 0x08 ; //開溢位中斷 T3IE = 1; //開總中斷和T3中斷 T3CTL &= ~0x80; T3CTL |= 0x60; //8分頻,8/16000000*N=0.005S,N=10000 T3CTL &= ~0x03; //自動重灌 0x00->0xff 10000/255=39(次) T3CTL |= 0x10; //啟動 EA = 1; //開總中斷 } //定時器T3中斷處理函式 #pragma vector = T3_VECTOR __interrupt void T3_ISR(void) { IRCON = 0x00; //清中斷標誌, 也可由硬體自動完成 if(count++ > 35) //約為0.005 秒時間 { //經過示波器測量確保精確 count = 0; //計數清零 LED1 = ~LED1; //改變LED1的狀態 } } /**************************************************************************** * 程式入口函式 ****************************************************************************/ void main(void) { InitLed(); //設定LED燈相應的IO口 InitT3(); //設定T3相應的暫存器 while(1) {}; }