Nordic_Timer

Nordic Timer

Timer的简单介绍

Timer的模式

  • Timer
  • Counter

Timer的时钟源

Timer的时钟源来源于HFCLK,可以被4bit的分频寄存器分频处理;

Ftimer = 16Mhz/2^PRESCALER

当Ftimer小于1Mhz的时候,系统会自动切换到PCLK 1Mhz,节省功耗;

  • PRESCALER:Timer模式下,用于分频

  • BITMODE:用于修改Timer的最大值

以上两个参数只有在Timer Stop的情况下,才可以修改。

代码分析

Timer初始化函数 nrfx_timer_init

  • nrf_drv_timer_t 定义Timer句柄

  • nrf_drv_timer_config_t Timer初始化配置结构体

    • frequency 选择频率3k – 16Mhz
    • mode:模式 Timer&counter&low-power counter
    • bit_width:位宽:8&16&24&32
    • interrupt_priority:中断优先级
    • p_context :中断服务函数
  • nrfx_timer_event_handler_t :Timer事件服务函数

Timer 将ms转换成计时器滴答函数 nrf_drv_timer_ms_to_ticks

  • nrfx_timer_t 定义的Timer句柄
  • 待转换的ms值

Timer 将定时器设置为比较模式函数 nrf_drv_timer_extended_compare

  • nrfx_timer_t 定义Timer句柄
  • nrf_timer_cc_channel_t 比较的通道数 0–5
  • cc_value 比较值
  • nrf_timer_short_mask_t:技术器对应的编号
  • enable_int:使能或者禁止比较通道中断

Timer 使能函数 nrf_drv_timer_enable

  • nrfx_timer_t 定义Timer句柄

代码移植

  • 添加Timer头文件 #include "nrf_drv_timer.h
  • 添加库文件

    • nRF5_SDK_15.3.0_59ac345\modules\nrfx\drivers\include nrf_timer.c
    • nRF5_SDK_15.3.0_59ac345\integration\nrfx\legacy nrf_drv_timer.h
  • 修改sdk_config.h,增加Timer相关宏定义

  • 修改Main主函数相关参数

源代码参考

https://github.com/Tangdabao/Nordic_Demo