天天看點

[nRF51822] 8、基礎實驗代碼解析大全 · 實驗11 - PPI

前一篇分析了前十個基礎實驗的代碼,從這裡開始分析後十個~

一、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 所示:

[nRF51822] 8、基礎實驗代碼解析大全 · 實驗11 - PPI

三、核心代碼分析

系統運作後,在循環中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連接配接事件部分: