原创 【博客大赛】NRF51822之定时器

2014-6-30 00:54 6789 23 26 分类: MCU/ 嵌入式 文集: C

一、了解

   

       NRF51822的定时器是运行在系统的高频率下面的, HFCLK = 16 MHz ,包括一个四位的分频器,用来对HFCLK 进行分频。也就是说,最大16分频。

 由于其丰富的定时器任务、时间和中断特点,所以可编程外设互连系统能够与任何外设进行互连使用时,进行定时或计数。可编程外设互连系统(PPI)能用使用任何一个GPIO口输出周期性的信号和PWM波。在同一时间内,输入或者输出的数目收到GPIOTE 模块的数目的限制。

 

GPIOTE则是GPIO 任务事件块,用来规定当前能用多少GPIO的任务事件。

 

NRF51822有三个定时器。  一个24位的,两个16位的。

 

1113.jpg

 

二、程序——

 

 

/*

*NRF51822 共有三个定时器,TIMER0,TIMER1,TIMER2

*/

 

/*

* 利用定时器进行定时 ,单位ms

*/

void NRF_Timer_Delay_ms(timer_t timer,uint16_t volatile Number_ms)

{

volatile NRF_TIMER_Type *p_timer = Timer_Init(timer); //定义一个定时器指针,并完成初始化

 

p_timer->MODE = TIMER_MODE_MODE_Timer; //定时器模式,还有另一种模式,计数器,Counter

p_timer->PRESCALER = 9 ;               //预分频,f=16M/2^(prescale),最大为9,即最大512分频

p_timer->BITMODE  = TIMER_BITMODE_BITMODE_16Bit; //定时器位宽

p_timer->TASKS_CLEAR = 1;             //清除任务

 

//最大分频为512后得到的周期是32us, 再要乘以31.25才得到ms

p_timer->CC[0] = Number_ms*31;

p_timer->CC[0] += Number_ms/4;

p_timer->TASKS_START = 1;    //开启定时器

 

while(p_timer->EVENTS_COMPARE[0] == 0)

{

//wait

}

 

p_timer->EVENTS_COMPARE[0] = 0;

p_timer->TASKS_STOP        = 1; //停止定时器

}

 

/*

* 定时器初始化 ,使用16M高频晶振

*/

static volatile NRF_TIMER_Type *Timer_Init(timer_t timer)

{

volatile NRF_TIMER_Type *p_timer; //这里要与NRF_TIMER_Type相对应

 

//启动16M晶振

NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;

NRF_CLOCK->TASKS_HFCLKSTART    = 1;

 

while(NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)

{

//等待起振

}

 

//返回指向该定时器的地址的指针

switch(timer)

{

case TIMER0:

p_timer = NRF_TIMER0;

  break;

case TIMER1:

p_timer = NRF_TIMER1;

  break;

case TIMER2:

p_timer = NRF_TIMER2;

 break;

default:

p_timer = 0;

 break;

}

return p_timer;

}

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2015-2-6 17:50

最大不是16的分频,最大是2的9次方分频 512

用户513428 2015-1-12 09:37

这不就是根据里程翻译了一变吗,又不是自己原创的,剽窃

用户377235 2014-11-13 15:56

问一下 COUNTER模式你用过么~
相关推荐阅读
啊左不是蜗牛 2015-01-28 09:21
【博客大赛】那样的人生,看不穿
         昨晚11点跟PM姐姐聊天,问她今晚要不要加班,她回:刚刚开发哥哥陪她出来打的。。。我以为我十点半从实验室回去已经够晚了。。我脸红了。        我问她为什么不早点回去...
啊左不是蜗牛 2015-01-13 19:41
【智能手机】三个观点说说国产手机未来
在此篇文章之前还有一个各大手机品牌的总结,请点击查看。 智能手机之论英雄出处      谈手机之前换个角度,类比一下PC领域。 PC领域毛利最高的时候,国产PC一直混在低端。随着时代发...
啊左不是蜗牛 2015-01-09 17:56
【智能手机】论英雄出处
我认为,如果你不知道对手的底细,那么你就很难战胜对手。知己知彼,百战百胜。所以,我简单地说说我对这几家手机品牌的看法。个人之见,欢迎讨论。   苹果: 1976年成立,在乔布斯这样的天...
啊左不是蜗牛 2014-11-19 13:48
【博客大赛】蜗牛求职记之华为篇
1、前言说明          蜗牛是电赛出身,本科做硬件嵌入式,画板子和写C程序,然后研究生阶段是转战android,但是由于项目涉及到硬件,导师项目众多,小伙伴少,于是我也负责部分st...
啊左不是蜗牛 2014-08-16 14:38
以另一种位图的思想来解决一道OJ题目
前言: 以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次。常见的例子不外乎在《编程珠玑》上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一...
啊左不是蜗牛 2014-08-15 11:57
Android 笔记之 listview 性能优化
列表显示需要三个元素, (1)listview 视图,用来显示列表的View ; (2)适配器,用来把数据映射到listView上面的 (3)数据,具体将被映射的数据,包括字符串,图片...
EE直播间
更多
我要评论
3
23
关闭 站长推荐上一条 /3 下一条