设为首页收藏本站

Discuz! Board

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3162|回复: 9

nrf51822 协议栈下的定时器配置

[复制链接]

3

主题

12

帖子

55

积分

注册会员

Rank: 2

积分
55
小小张 发表于 2018-12-5 17:50:50 | 显示全部楼层 |阅读模式
各位大佬,小弟最近小在带协议栈的代码里加个外设定时器功能可是事件不按照我设定的时间触发,代码如下:
uin32_t time_ms=1000;
const nrf_drv_timer_t TIMER_LED = NRF_DRV_TIMER_INSTANCE(1);
  nrf_drv_timer_config_t timer_cfg=NRF_DRV_TIMER_DEFAULT_CONFIG(1);
  err_code=nrf_drv_timer_init(&TIMER_LED, &timer_cfg, timer_led_event_handler);

    APP_ERROR_CHECK(err_code);
    time_ticks = nrf_drv_timer_ms_to_ticks(&TIMER_LED, time_ms);
  printf("time_ticks %d\r\n",time_ticks);
nrf_drv_timer_extended_compare(   
         &TIMER_LED, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);
    nrf_drv_timer_enable(&TIMER_LED);
事件一直在触发

回复

使用道具 举报

248

主题

1698

帖子

6077

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6077
admin 发表于 2018-12-6 08:53:23 | 显示全部楼层
我们写了一篇专门的协议栈下硬件定时器的教材,你可以去看看,注意脉宽设置为32位的
回复 支持 反对

使用道具 举报

3

主题

12

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 小小张 发表于 2018-12-6 10:53:27 | 显示全部楼层
admin 发表于 2018-12-6 08:53
我们写了一篇专门的协议栈下硬件定时器的教材,你可以去看看,注意脉宽设置为32位的

我用的是sdk10,但是我是仿照SDK15教材做的,现在就是触发的时间跟我设定的不对
回复 支持 反对

使用道具 举报

248

主题

1698

帖子

6077

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6077
admin 发表于 2018-12-6 12:21:42 | 显示全部楼层
小小张 发表于 2018-12-6 10:53
我用的是sdk10,但是我是仿照SDK15教材做的,现在就是触发的时间跟我设定的不对

具有哪里不对,触发时间差多少?
回复 支持 反对

使用道具 举报

3

主题

12

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 小小张 发表于 2018-12-6 13:45:55 | 显示全部楼层
一直在触发(好像几毫秒就触发一次),我定义的是1秒触发一次。
#define NRF_DRV_TIMER_DEFAULT_CONFIG(id)                                              \
    {                                                                                 \
        .frequency          = (nrf_timer_frequency_t)NRF_TIMER_FREQ_16MHz,                             \
        .mode               = (nrf_timer_mode_t)NRF_TIMER_MODE_TIMER,                \
        .bit_width          = (nrf_timer_bit_width_t)NRF_TIMER_BIT_WIDTH_32,      \
        .interrupt_priority = APP_IRQ_PRIORITY_LOW,                          \
        .p_context          = NULL                                                    \
    }
如上的配置是我自己配置的。教程上的配置如下但是我没找到出处,我定义的是定时器1
   .frequency  =(nrf_timer_frequency_t)NRFX_TIMER_DEFAULT_CONFIG_FREQUENCY,\
         .mode =(nrf_timer_mode_t)NRFX_TIMER_DEFAULT_CONFIG_MODE, \
         .bit_width =(nrf_timer_bit_width_t)NRFX_TIMER_DEFAULT_CONFIG_BIT_WIDTH,\
         .interrupt_priority=NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY, \
         .p_context= NULL \
回复 支持 反对

使用道具 举报

248

主题

1698

帖子

6077

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6077
admin 发表于 2018-12-6 17:14:34 | 显示全部楼层
小小张 发表于 2018-12-6 13:45
一直在触发(好像几毫秒就触发一次),我定义的是1秒触发一次。
#define NRF_DRV_TIMER_DEFAULT_CONFIG(id ...

nrf51822下TIME1 只有16位位宽,TIME0有32位位宽,你可以改成16位  或者用下TIM0试试
回复 支持 反对

使用道具 举报

3

主题

12

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 小小张 发表于 2018-12-7 14:38:41 | 显示全部楼层
admin 发表于 2018-12-6 17:14
nrf51822下TIME1 只有16位位宽,TIME0有32位位宽,你可以改成16位  或者用下TIM0试试

我看教程上说的是协议栈下的定时器只能用TIME1或者TIME2,time0被占用了不能用了我改成16位还是不行,我觉得是不是时钟的问题啊!在协议栈下用定时器用的是外部16M的嘛

回复 支持 反对

使用道具 举报

248

主题

1698

帖子

6077

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6077
admin 发表于 2018-12-7 19:35:58 | 显示全部楼层
小小张 发表于 2018-12-7 14:38
我看教程上说的是协议栈下的定时器只能用TIME1或者TIME2,time0被占用了不能用了我改成16位还是不行,我觉 ...

教程讲的是52832
回复 支持 反对

使用道具 举报

3

主题

12

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 小小张 发表于 2018-12-10 17:46:48 | 显示全部楼层
admin 发表于 2018-12-7 19:35
教程讲的是52832

嗯,发现了是不是51822做不了硬件定时器,只能软件实现。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

60

积分

注册会员

Rank: 2

积分
60
peteryu 发表于 2022-6-10 18:35:05 | 显示全部楼层
学习学习,学习学习。
回复 支持 反对

使用道具 举报

Archiver|手机版|小黑屋|Comsenz Inc.   

GMT+8, 2022-6-27 15:41 , Processed in 0.187099 second(s), 29 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表