设为首页收藏本站

Discuz! Board

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5761|回复: 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);
事件一直在触发

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
沙发
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教材做的,现在就是触发的时间跟我设定的不对
回复 支持 反对

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
地板
admin 发表于 2018-12-6 12:21:42 | 只看该作者
小小张 发表于 2018-12-6 10:53
我用的是sdk10,但是我是仿照SDK15教材做的,现在就是触发的时间跟我设定的不对

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

使用道具 举报

3

主题

12

帖子

55

积分

注册会员

Rank: 2

积分
55
5#
 楼主| 小小张 发表于 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 \
回复 支持 反对

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
6#
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
7#
 楼主| 小小张 发表于 2018-12-7 14:38:41 | 只看该作者
admin 发表于 2018-12-6 17:14
nrf51822下TIME1 只有16位位宽,TIME0有32位位宽,你可以改成16位  或者用下TIM0试试

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

回复 支持 反对

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

3

主题

12

帖子

55

积分

注册会员

Rank: 2

积分
55
9#
 楼主| 小小张 发表于 2018-12-10 17:46:48 | 只看该作者
admin 发表于 2018-12-7 19:35
教程讲的是52832

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

使用道具 举报

0

主题

11

帖子

364

积分

中级会员

Rank: 3Rank: 3

积分
364
10#
peteryu 发表于 2022-6-10 18:35:05 | 只看该作者
学习学习,学习学习。
回复 支持 反对

使用道具 举报

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

GMT+8, 2024-4-24 21:09 , Processed in 0.142762 second(s), 28 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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