一起学nRF51xx 5 - ppi
前言
可編程外圍互連(PPI)使不同的外圍設備能夠自主交互彼此使用任務和事件,而無需使用CPU。PPI提供了一種機制,可以作為事件的結果自動觸發一個外圍設備中的任務發生在另一個外圍。任務通過PPI通道連接到事件。PPI通道為由兩個端點寄存器組成,事件端點(EEP)和任務端點(TEP)。一個接口任務通過使任務寄存器的地址與任務關聯實現連接到任務端點。類似地,外圍事件使用事件寄存器的地址連接到事件端點實現與事件相關聯。
啟用和禁用PPI通道的方法有兩種:
?使用CHEN、CHENSET和CHENCLR分別啟用或禁用PPI通道寄存器。
?通過組的Enable和,在PPI通道組中啟用或禁用PPI通道禁用任務。
在觸發這些任務之前,必須觸發PPI通道組配置為定義哪些PPI通道屬于哪些組。
PPI任務(例如CHG0EN)可以像其他任務一樣通過PPI觸發,這意味著它們可以作為TEP連接到PPI通道。一個事件可以通過使用多個通道和觸發多個任務一個任務可以由多個事件以相同的方式觸發。
上圖是PPI的結構,其中EEP: 是 EVENT END POINT 的縮寫。每個PPI通道擁有一個EEP。EEP是用來存放 EVENT 寄存器地址的,如上面說的條件,當 EVENT 產生的時候, 它會馬上知道。TEP:是 TASK END POINT 的縮寫,每個PPI通道有一個TEP。TEP是用來存放TASK 寄存器地址的,如上面說的要執行的動作。
每個 nRF5x 芯片有31個PPI通道, 而這31個通道被編成組(GROUP)。多個PPI通道編成組以后,我們可以用一個TASK 執行組里面所有的 PPI 通道的使能或者關閉,很方便使用。PPI是nRF5X 系列芯片特有的一個功能,它減輕了CPU的負擔,提高了外設之間交互響應的速度,用途非常廣泛。我們可以把 PPI 看成一根導線,導線的一端接要執行的動作,導線的另一端接動作執行的條件。當條件滿足的時候,自動執行預設好的動作。
CH[n]? :? 單個通道, nRF51 系列有31個PPI 通道,
CHG[m]: 通道組, 1個以上通道構成一個組。
CHEN:是個總開關,所有的PPI 通道的允許或者禁止都可以在這里操作。
?
本節將利用PPI模塊,實現不使用中斷,也不需要CPU介入,實現按鍵控制LED操作。
?
示例詳解
基于硬件平臺: nrf51822ek_tm開發板。
?
?
本示例所用的最小系統板原理圖:
?
?
工程名為nrfxx-ppi確認后按下圖選擇芯片為nrf51822_xxAA->ok
在彈出的對話框中勾選CMSIS中的CORE;Device中的Startup(后面有nrf51 Series字樣的);在nrf_device中勾選nrf_gpio, nrf_gpiote,nrf_delay,nrf_ppi.
?
OK之后工程自動生成如下代碼:
新建一個空白文檔,保存為main.c,并加入工程中:
配置工程,選擇使用MicroLIB庫,可以減小程序體積:
加入NRF51定義,并選擇化等級3,可以減小程序體積,但仿真運行時可能會出現與代碼順序不一致現象:
?
調試工具選擇J-LINK,并將接口設置為SW口勾選下載程序后自動復位及運行:
?
?
?
關于PPI的更多接口函數可以查看nrf_ppi.h文件,里面的函數名字與功能很好理解。
?
OK,本期實驗完成!下期見!同時如果大家有什么疑問或是有想了解的其它內容,也歡迎大家留言!!最后喜歡這個公眾號的同學們記得加關注了,會有不定期技術干貨推出!!
文中源碼資料下載,在公眾號里給十三發消息:
下載|一起學nRF51xx 5
?
關注十三公眾號
?
總結
以上是生活随笔為你收集整理的一起学nRF51xx 5 - ppi的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一起学nRF51xx 4 - int
- 下一篇: 一起学nRF51xx 6 - uart