LPC1768定时器0配置-定时器模式

一、定时器时钟走向

 二、程序实现

  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_ */
原文地址:https://www.cnblogs.com/wenhao-Web/p/12752677.html