一、定時器時鍾走向
二、程序實現
1.bsp_timer0.c文件內容:
1 /* 2 * bsp_timer0.c 3 * 4 * Created on: 2020年4月22日 5 * Author: Mr.W 6 */ 7 #include "./timer0/bsp_timer0.h" 8 9 10 /* 11 * 函數名:bsp_timer0_init 12 * 描述:定時器0初始化 13 * 參數:無 14 * 返回值無 15 * 作者:Mr.W 16 * 時間:2020-4-22 17 */ 18 void bsp_timer0_init(void) 19 { 20 /* #1:打開定時器0的電源(默認是打開的) */ 21 LPC_SC->PCONP &= ~(1 << 1); 22 LPC_SC->PCONP |= (1 << 1); 23 /* #2:時鍾分頻選擇(默認00),00 四分頻, 01 不分頻, 10 二分頻, 11 八分頻 */ 24 LPC_SC->PCLKSEL0 &= ~(3 << 2); 25 LPC_SC->PCLKSEL0 |= (0 << 2); 26 /* #3:復位定時器中斷 */ 27 LPC_TIM0->IR = 0x3F; 28 /* #4:復位計數器 */ 29 LPC_TIM0->TCR = 0x02; 30 /* #5:設置為定時器模式,計數模式遞增 */ 31 LPC_TIM0->CTCR = 0; 32 /* #6:從0開始計數 */ 33 LPC_TIM0->TC = 0; 34 /* #7:指定預分頻器最大的分頻值 */ 35 LPC_TIM0->PR = 0; 36 /* #8:設置匹配寄存器的值,如果外設時鍾是24MHz,要使定時器每10ms觸發一次中斷,需要設置MR0=24MHz/100 */ 37 LPC_TIM0->MR0 = PCLK/100; 38 /* #8:MR0與TC值匹配時將產生中斷,TC復位 */ 39 LPC_TIM0->MCR = 0x03; 40 /* #9:設置中斷優先級 */ 41 NVIC_SetPriority(TIMER0_IRQn, 5); 42 /* #10:使能定時器中斷*/ 43 NVIC_EnableIRQ(TIMER0_IRQn); 44 /* #11:開啟定時器 */ 45 LPC_TIM0->TCR = 0x01; 46 } 47 48 49 /* 50 * 函數名:TIMER0_IRQHandler 51 * 描述:中斷處理函數 52 * 參數:無 53 * 返回值無 54 * 作者:Mr.W 55 * 時間:2020-4-22 56 */ 57 void TIMER0_IRQHandler(void) 58 { 59 /* 如果MR0匹配中斷產生 */ 60 if(LPC_TIM0->IR & 0x01) 61 { 62 /* 63 * 這里添加用戶的中斷處理程序 64 */ 65 } 66 /* 清除MR0中斷標志位 */ 67 LPC_TIM0->IR = 0x01; 68 }
2.bsp_timer0.h文件內容:
1 /* 2 * bsp_timer0.h 3 * 4 * Created on: 2020年4月22日 5 * Author: Mr.W 6 */ 7 8 #ifndef TIMER0_BSP_TIMER0_H_ 9 #define TIMER0_BSP_TIMER0_H_ 10 11 #ifdef __USE_CMSIS 12 #include "LPC17xx.h" 13 #endif 14 15 16 void bsp_timer0_init(void); 17 18 #endif /* TIMER0_BSP_TIMER0_H_ */