参考 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打印出来
这个不是一般的函数 我们一般函数都是在站上的