PPI部分学习思维导图
PPI原理
1.1PPI简介
PPI实现的就是通过初始化配置,将不同外设的事件和任务连接起来,让事件自动去触发任务的功能,PPI有多个通道,
每个通道包含一个EEP和TEP,使用PPI连接外设事件和外设任务的时候,将外设事件寄存器的地址写入EEP,将外设任务
寄存器的地址写入到PPI通道的TEP,然后使能该PPI通道即可实现外设事件和外设任务的连接。
1.2预编程PPI通道
PPI中的通道20和通道31已经被预编程,这些PPI通道已经分配给了特定的外设事件和外设任务,CPU不能对这些通道进行
配置,但是CPU可以把他们加入到PPI组,也可以使能或禁止这些PPI通道。
详细见nRF52832数据手册
1.3PPI组
如果需要一个事件能同时触发多个任务或者一个任务能同时被多个事件触发,可以通过PPI组来实现。
相关寄存器
CHEN寄存器:使能或禁止PPI通道
CHENSET寄存器:用于使能PPI通道
CHENCLR寄存器:禁止PPI通道
PPI的应用步骤
3.1初始化PPI模块
uint32_t nrf_drv_ppi_init ( void )
3.2分配PPI通道
PPI通道是由驱动来分配的,而不是应用程序指定的,当需要一个PPI通道的时候,调用nrf_drv_ppi_channel_alloc()函数
该函数会查找空闲的PPI通道,并将查找到的第一个PPI通道传递给函数的输入参数p_channel
uint32_t nrf_drv_ppi_channel_alloc ( nrf_ppi_channel_t * p_channel )
3.3配置PPI通道的EEP和TEP
uint32_t nrf_drv_ppi_channel_assign (
nrf_ppi_channel_t channel, //PPI channel to be assigned endpoints
uint32_t eep, //事件寄存器的地址
uint32_t tep //任务寄存器的地址
)
地址的获得有两种方式
(1)从芯片的应用指南中查到
(2)通过调用外设的驱动函数来获得地址
如Timer0的COMPARE[0]事件寄存器地址获得
__STATIC_INLINE uint32_t nrf_drv_timer_event_address_get (
nrf_drv_timer_t const *const p_instance,
nrf_timer_event_t timer_event
)
3.4使能PPI通道
uint32_t nrf_drv_ppi_channel_enable ( nrf_ppi_channel_t channel )
参考资料
1 艾克姆科技 《nRF52832开发教程》