"); //-->
所以根据上面的模块结构图和说明想要实现定时器,我们需要做如下几个步骤:
1 选择Timer/Countermo模块为timer模式,并设置bitmode(8,16,,2,32位)
2 通过设置分屏来设置timer的时钟
3 设置cc[n](后面我们的例子选择使用cc0),来设置计数到多少产生compares[n]事件(当计数值技术到cc[n]的值时对应产生compare[n]事件)
4 设置compare事件产生时触发中断。
5 通过NVIC函数启动MCU 的timer中断
6 最后启动timer就可以了。
#include "nrf51.h"
#include "nrf_gpio.h"
//定义自己板子上的LED灯
#define LED 22
int main(){
nrf_gpio_cfg_output(LED);
//NRF_TIMER0定义在nrf51.h中,该指针指向timer0中的寄存器组
NRF_TIMER0->PRESCALER = 4; //2^4 16分频得到1M timer时钟
NRF_TIMER0->MODE = 0; //timer模式
NRF_TIMER0->BITMODE = 3; // 设置32bit
NRF_TIMER0->CC[0] = 1000000; //一个tick是1us,1000000代表1s
NRF_TIMER0->INTENSET = 1<<16;//设置compare[0]事件产生时触发中断
//该设置使timer模块中的conter计数到cc[0]值时会自动清零,以带到重//新计数的目的
NRF_TIMER0->SHORTS = 1;
//启动timer模块
NRF_TIMER0->TASKS_START = 1;
//开启MCU的timer0中断
NVIC_SetPriority(TIMER0_IRQn, 3);
NVIC_ClearPendingIRQ(TIMER0_IRQn);
NVIC_EnableIRQ(TIMER0_IRQn);
while(1);
return 0;
}
//中断函数中翻转灯状态
void TIMER0_IRQHandler(){
if(NRF_TIMER0->EVENTS_COMPARE[0] == 1){
NRF_TIMER0->EVENTS_COMPARE[0] = 0; //清除事件,不然会导致一
//直产生中断
nrf_gpio_pin_toggle(LED);
}
} *博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。