ppio

参考 https://zhuanlan.zhihu.com/p/286648977

核心就是 

//定义PPI通道
nrf_ppi_channel_t my_ppi_channel;
void ppi_config(void)
{
    ret_code_t err_code = NRF_SUCCESS;
    //初始化PPI模块
    err_code = nrf_drv_ppi_init();
    APP_ERROR_CHECK(err_code);
    //申请PPI通道
    err_code = nrfx_ppi_channel_alloc(&my_ppi_channel);
    APP_ERROR_CHECK(err_code);
    //设置PPI通道EEP和TEP端点地址    
    err_code = nrfx_ppi_channel_assign(my_ppi_channel,nrfx_gpiote_in_event_addr_get(BUTTON_1),nrfx_gpiote_out_task_addr_get(LED_1));
    APP_ERROR_CHECK(err_code);
    //使能PPI通道
    err_code = nrfx_ppi_channel_enable(my_ppi_channel);
    APP_ERROR_CHECK(err_code);
}

主要是  nrfx_ppi_channel_assign(my_ppi_channel,nrfx_gpiote_in_event_addr_get(BUTTON_1),nrfx_gpiote_out_task_addr_get(LED_1)); 我一个事件A的发生去触发任务B的执行!!!

A B 参数怎么搞!

看看 D:\TSBrowserDownloads\DeviceDownload\nRF5SDK1310\examples\peripheral\ppi\pca10056\blank\arm5_no_packs

参数 AB 都是U32 是结构体的一个成员

 

https://www.cnblogs.com/iini/p/9348504.html

 

做一个定时器ppi通知LED翻转的实验 D:\TSBrowserDownloads\DeviceDownload\nRF5SDK1310\examples\peripheral\gpiote

测试代码 LED 不闪烁

对比CFG文件 找到time驱动文件的不同 需要设置频率 还有 16位不行 我设置的数据太大了 需要32位才可以

#define TIMER_DEFAULT_CONFIG_FREQUENCY 4

#define TIMER_DEFAULT_CONFIG_BIT_WIDTH 3

#include "nrf_drv_gpiote.h"
#include "nrf_drv_timer.h"
 #define GPIO_OUTPUT_PIN_NUMBER 25
static nrf_drv_timer_t timer = NRF_DRV_TIMER_INSTANCE(2);
static void led_blinking_setup()
{
    uint32_t compare_evt_addr;
    uint32_t gpiote_task_addr;
    nrf_ppi_channel_t ppi_channel7;
    ret_code_t err_code;
    nrf_drv_gpiote_out_config_t config = GPIOTE_CONFIG_OUT_TASK_TOGGLE(false);

    err_code = nrf_drv_gpiote_out_init(GPIO_OUTPUT_PIN_NUMBER, &config);
    APP_ERROR_CHECK(err_code);


    nrf_drv_timer_extended_compare(&timer, (nrf_timer_cc_channel_t)0, 200 * 1000UL, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, false);

    err_code = nrf_drv_ppi_channel_alloc(&ppi_channel7);
    APP_ERROR_CHECK(err_code);

    compare_evt_addr = nrf_drv_timer_event_address_get(&timer, NRF_TIMER_EVENT_COMPARE0);
    gpiote_task_addr = nrf_drv_gpiote_out_task_addr_get(GPIO_OUTPUT_PIN_NUMBER);

    err_code = nrf_drv_ppi_channel_assign(ppi_channel7, compare_evt_addr, gpiote_task_addr);
    APP_ERROR_CHECK(err_code);
 
    err_code = nrf_drv_ppi_channel_enable(ppi_channel7);
    APP_ERROR_CHECK(err_code);

    nrf_drv_gpiote_out_task_enable(GPIO_OUTPUT_PIN_NUMBER);

}

void timer_dummy_handler(nrf_timer_event_t event_type, void * p_context){    NRF_LOG_INFO("Heart %d.\r\n",__LINE__);}
    
    
void ppi_test(void)
{
    ret_code_t err_code;

    err_code = nrf_drv_ppi_init();
    APP_ERROR_CHECK(err_code);

    
    if (!nrf_drv_gpiote_is_init())
    {
        err_code = nrf_drv_gpiote_init();
		APP_ERROR_CHECK(err_code);
    }
// https://blog.csdn.net/duapple/article/details/109077490


    nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;
    err_code = nrf_drv_timer_init(&timer, &timer_cfg, timer_dummy_handler);
    APP_ERROR_CHECK(err_code);

    // Setup PPI channel with event from TIMER compare and task GPIOTE pin toggle.
    led_blinking_setup();
    NRF_LOG_INFO("Heart %d.\r\n",__LINE__);
    // Enable timer
    nrf_drv_timer_enable(&timer);
}

 

 

现在有个问题 我想debug看看定时器到了 LED翻转 在翻转里面debug 我不知道是哪个函数?

这是nordic设计的 我不能debug

我可以把U32打印出来

这个不是一般的函数 我们一般函数都是在站上的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值