前一篇分析了前十個基礎實驗的代碼,從這裡開始分析後十個~
一、PPI原理:
PPI(Programmable Peripheral Interconnect),中文翻譯為可程式設計外設互連。
在nRF51822 内部設定了PPI 方式,可以通過任務和事件讓不同外設之間進行互連,而不需要CPU 進行參與。
PPI 通過通道讓任務和事件連接配接在一起。PPI 通道由兩個端點組成:
任務端點:Task End-Point (TEP)。
事件端點:Event End-Point (EEP)。
所謂的互聯就是将任務端點寫入需要連接配接的任務寄存器位址,事件端點寫入需要連接配接事件寄存器位址,之後,使能該PPI 通道,即實作了任務和事件的互聯。
可以通過如下兩種方式使能和關閉PPI 通道:
1) 通過獨立設定CHEN,CHENSET 和CHENCLR 寄存器。
2) 通過PPI 通道組的使能和關閉任務。使用這種方式,在觸發任務之前,需要先配置好哪些PPI 通道屬于哪個組。
二、運作邏輯:
實驗中,用到了3 個定時器:Timer 0、Timer 1 和Timer 2。
1) Timer 0 配置為計數器,在主循環中每100ms 被觸發一次,并通過序列槽列印出計數值。
2) Timer 1 每個偶數秒(2、4、6、8……)産生一次比較比對事件,該事件通過PPI通道0 和Timer 0 的STOP Task 互聯,互聯後通過該事件觸發Timer 0 的STOP Task。
3) Timer 2 每個奇數秒(1、3、5、7……)産生一次比較比對事件,該事件通過PPI通道1 和Timer 0 的START Task 互聯,互聯後通過該事件觸發Timer 0 的START Task。
實驗原理框圖如圖1 所示:
三、核心代碼分析
系統運作後,在循環中Timer 0 計數器的計數值每100ms 增加一次,在偶數秒時,Timer2 産生比較比對事件,通過PPI 觸發Timer 0 的STOP Task,Timer 0 停止計數。此時,盡管主循環中每隔100ms 觸發一次Timer 0 計數,但是由于Timer 0 已經停止,是以,計數值不會增加。每個奇數秒,Timer2 産生比較比對事件,通過PPI 觸發Timer 0 的START Task,Timer 0 恢複計數。
main函數部分:
<a></a>
定時器初始化部分:
PPI連接配接事件部分: