NRF52芯片硬件设备初探之—PPI

PPI设备

  • 什么是PPI
  • PPI寄存器及结构
  • PPI驱动程序
    • PPI通道使能
    • PPI通道关闭
    • PPI通道事件任务配置
    • PPI联动任务配置
    • PPI分组配置
  • 典型应用代码示例
  • 参考网站

什么是PPI

PPI — Programmable peripheral interconnect,可编程的设备互连器。
PPI通俗讲就是事件和任务的联动器,它通过一个设备的事件触发另一个设备执行某个任务。PPI最大的用处就是在不需要CPU干预的前提下使设备之间能够高精度实时同步执行一些预设的功能操作。通过PPI还能使一个事件可以同时触发多个操作,同时一个操作也可以被多个事件触发。
NRF52芯片硬件设备初探之—PPI_第1张图片

PPI寄存器及结构

NRF52芯片硬件设备初探之—PPI_第2张图片

PPI驱动程序

PPI通道使能

NRF_PPI->CHENSET = 0x01<

PPI通道关闭

NRF_PPI->CHENCLR = 0x01<

PPI通道事件任务配置

NRF_PPI->CH[(uint32_t) channel].EEP = eep;
NRF_PPI->CH[(uint32_t) channel].TEP = tep;

PPI联动任务配置

NRF_PPI->FORK[(uint32_t) channel].TEP = fork_tep;

PPI分组配置

NRF_PPI->CHG[(uint32_t) channel_group] =
NRF_PPI->CHG[(uint32_t) channel_group] | (PPI_CHG_CH0_Included << ((uint32_t) channel));
NRF_PPI->TASKS_CHG[(uint32_t) group].EN = 1UL;
NRF_PPI->TASKS_CHG[(uint32_t) group].DIS = 1UL;

典型应用代码示例

//判断PPI通道是否已经被占用
if (nrf_ppi_channel_enable_get(START_PPI_CHANNEL) == NRF_PPI_CHANNEL_ENABLED ||
		nrf_ppi_channel_enable_get(END_PPI_CHANNEL) == NRF_PPI_CHANNEL_ENABLED)
{
    return false;
}
//设置通道事件和任务
nrf_ppi_channel_endpoint_setup(START_PPI_CHANNEL,
    nrf_drv_gpiote_in_event_addr_get(NRF_GPIOTE_EVENTS_IN_0),
    nrf_saadc_task_address_get(NRF_SAADC_TASK_SAMPLE));
	
nrf_ppi_channel_endpoint_setup(END_PPI_CHANNEL,
    nrf_saadc_event_address_get(NRF_SAADC_EVENT_END),
    nrf_saadc_task_address_get(NRF_SAADC_TASK_START));
//使能通道
nrf_ppi_channel_enable(START_PPI_CHANNEL);
nrf_ppi_channel_enable(END_PPI_CHANNEL);

参考网站

1: http://www.nordicsemi.com/
2: https://infocenter.nordicsemi.com/index.jsp
3: https://devzone.nordicsemi.com/

你可能感兴趣的:(技术)