『Cortex M3 – LM2016 學習筆記』 定時器

 

 

介紹 2016定時器設置和計算的方法:

1.定時器採用減一的計數方式,減到0X00時觸發中斷標誌。

2.定時器溢出後會自動重載裝載值。

3.定時器計算方法 8M晶振爲例

1>沒有使用預分頻,則每經過1/8000000秒則計數值減1

2>使用100預分頻,則每經過(1/8000000)*100秒計數值減1,如需要定時500ms,則裝載值=0.5/((1/8000000)*100)=0.5*80000=40000

4.進入中斷後軟件清除中斷標誌位

 

 

#define TIMER_125MS     10000UL //定時器125MS 裝載值

#define TIMER_250MS     20000UL //定時器250MS 裝載值

#define TIMER_500MS     40000UL //定時器500MS 裝載值

 

 

/*********************************************************************************************************

** Function name:      timer0Init

** Descriptions:       Timer0的初始化函數

** input parameters:  

** output parameters: 

** Returned value:       

** Created By:        siw

** Created date:            2009.12.28

*********************************************************************************************************/

void timer0Init( void )

{

  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);   // 使能定時器模塊

  TimerDisable(TIMER0_BASE, TIMER_A);

  TimerDisable(TIMER0_BASE, TIMER_B);

 

TimerConfigure( TIMER0_BASE ,TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_PERIODIC |  TIMER_CFG_A_PERIODIC);  //設置兩個定時器爲16

 

  TimerControlStall(TIMER0_BASE, TIMER_A, true);   //設置進入調試模式時,停止計數

  TimerControlStall(TIMER0_BASE, TIMER_B, true);   //設置進入調試模式時,停止計數

 

TimerPrescaleSet(TIMER0_BASE , TIMER_A , 99);    //預先進行100分頻

TimerPrescaleSet(TIMER0_BASE , TIMER_B , 99);    //預先進行100分頻

 

  TimerLoadSet(TIMER0_BASE , TIMER_A , TIMER_125MS);   //125MS中斷一次

  TimerLoadSet(TIMER0_BASE , TIMER_B , TIMER_500MS);   //500MS中斷一次

 

  TimerIntEnable(TIMER0_BASE , TIMER_TIMA_TIMEOUT);// 使能TimerA超時中斷

  TimerIntEnable(TIMER0_BASE , TIMER_TIMB_TIMEOUT);// 使能TimerB超時中斷

 

  IntEnable(INT_TIMER0A);                          //  使能TimerA中斷

  IntEnable(INT_TIMER0B);                          //  使能TimerB中斷

 

  IntMasterEnable();                               //  使能處理器中斷

  TimerEnable(TIMER0_BASE , TIMER_A); 

  TimerEnable(TIMER0_BASE , TIMER_B); 

}

 

 

/*********************************************************************************************************

** Function name:      Timer0A_ISR

** Descriptions:       Timer0_A定時器中斷服務程序 125MS中斷一次

** input parameters:  

** output parameters: 

** Returned value:       

** Created By:        siw

** Created date:       2009.12.28

 

*********************************************************************************************************/

void Timer0A_ISR(void)

{

        TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);  

        //清除定時器中斷源,在進入中斷後要清除中斷標誌,否則會不斷的進入中斷。

 timer0ATrick++;

ClkFlagA = BIT0;

 

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章