一、定时器时钟走向
二、程序实现
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_ */