nRF52832-PPI部分學習


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開發教程》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM