PPI部分學習思惟導圖
編程
PPI實現的就是經過初始化配置,將不一樣外設的事件和任務鏈接起來,讓事件自動去觸發任務的功能,PPI有多個通道,
每一個通道包含一個EEP和TEP,使用PPI鏈接外設事件和外設任務的時候,將外設事件寄存器的地址寫入EEP,將外設任務
寄存器的地址寫入到PPI通道的TEP,而後使能該PPI通道便可實現外設事件和外設任務的鏈接。函數
PPI中的通道20和通道31已經被預編程,這些PPI通道已經分配給了特定的外設事件和外設任務,CPU不能對這些通道進行
配置,可是CPU能夠把他們加入到PPI組,也能夠使能或禁止這些PPI通道。
詳細見nRF52832數據手冊學習
若是須要一個事件能同時觸發多個任務或者一個任務能同時被多個事件觸發,能夠經過PPI組來實現。ui
CHEN寄存器:使能或禁止PPI通道
CHENSET寄存器:用於使能PPI通道
CHENCLR寄存器:禁止PPI通道code
uint32_t nrf_drv_ppi_init ( void )
PPI通道是由驅動來分配的,而不是應用程序指定的,當須要一個PPI通道的時候,調用nrf_drv_ppi_channel_alloc()函數
該函數會查找空閒的PPI通道,並將查找到的第一個PPI通道傳遞給函數的輸入參數p_channelblog
uint32_t nrf_drv_ppi_channel_alloc ( nrf_ppi_channel_t * p_channel )
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 )
uint32_t nrf_drv_ppi_channel_enable ( nrf_ppi_channel_t channel )
參考資料
1 艾克姆科技 《nRF52832開發教程》事件