nrf52 无协议栈时,利用组件库创建多定时器


#include <stdbool.h>
#include <stdint.h>
#include "nrf.h"
#include "nrf_drv_timer.h"
#include "bsp.h"
#include "app_error.h"

const nrf_drv_timer_t TIMER_LED = NRF_DRV_TIMER_INSTANCE(0);
const nrf_drv_timer_t TIMER_LED2 = NRF_DRV_TIMER_INSTANCE(1);

/**
 * 定时器中断
 */
void timer_led_event_handler(nrf_timer_event_t event_type, void* p_context)
{
    static uint32_t i;
    uint32_t led_to_invert = ((i++) % LEDS_NUMBER);

    switch (event_type)
    {
        case NRF_TIMER_EVENT_COMPARE0:
            bsp_board_led_invert(led_to_invert);
            i = 4;
            break;
        default:
            //Do nothing.
            break;
    }
}

void timer_led2_event_handler(nrf_timer_event_t event_type, void* p_context)
{
    static uint32_t i;
    uint32_t led_to_invert = ((i++) % LEDS_NUMBER);

    switch (event_type)
    {
        case NRF_TIMER_EVENT_COMPARE0:
            bsp_board_led_invert(led_to_invert);
            i = 56;
            break;

        default:
            //Do nothing.
            break;
    }
}

void time1_init()
{
    uint32_t time_ms = 1000; //定时器比较事件的时间
    uint32_t time_ticks;
    uint32_t err_code = NRF_SUCCESS;

    //配置开发板所有的灯
    bsp_board_init(BSP_INIT_LEDS);

    //配置定时器相关事件
    nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;
    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);
   //触发定时器比较
    nrf_drv_timer_extended_compare(
         &TIMER_LED, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);
    
    //触发定时器比较
    nrf_drv_timer_extended_compare(
         &TIMER_LED, NRF_TIMER_CC_CHANNEL1, time_ticks*2, NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK, true);
    
//      nrf_drv_timer_extended_compare(
//         &TIMER_LED, NRF_TIMER_CC_CHANNEL0, 31250, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);
    //使能定时器
    nrf_drv_timer_enable(&TIMER_LED);
}

void time2_init()
{
    uint32_t time_ms = 1000; //定时器比较事件的时间
    uint32_t time_ticks;
    uint32_t err_code = NRF_SUCCESS;

    //配置开发板所有的灯
    bsp_board_init(BSP_INIT_LEDS);

    //配置定时器相关事件
    nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;
    err_code = nrf_drv_timer_init(&TIMER_LED2, &timer_cfg, timer_led2_event_handler);
    APP_ERROR_CHECK(err_code);

    time_ticks = nrf_drv_timer_ms_to_ticks(&TIMER_LED2, time_ms);
   //触发定时器比较
    nrf_drv_timer_extended_compare(
         &TIMER_LED2, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);
    
    //触发定时器比较
    nrf_drv_timer_extended_compare(
         &TIMER_LED2, NRF_TIMER_CC_CHANNEL1, time_ticks*2, NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK, true);
    
//      nrf_drv_timer_extended_compare(
//         &TIMER_LED, NRF_TIMER_CC_CHANNEL0, 31250, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);
    //使能定时器
    nrf_drv_timer_enable(&TIMER_LED2);
}

/**
 *主函数
 */
int main(void)
{

    time1_init();
    time2_init();
    while (1)
    {
   }

}

demo下载链接:https://download.csdn.net/download/u012840934/89626888

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值