一起学nRF51xx 3 - gpiote
前言
nRF5X系列芯片引入了TASK和EVENT這2個全新的概念。
?
TASK,可以理解為DMA,但DMA更側重數據傳輸,而TAST則是預定功能的觸發操作:
可以理解為執行某個特定任務的一段代碼的集合,但不需要CPU參與。比如nRF5X中有一個很常用的TASK---TOGGLE。TOGGLE我們暫時翻譯為”翻轉”,它的功能就是在指定的引腳,把輸出的電平翻轉一次。比如當前引腳的電平為”高”,執行完TOOGLE這個任務以后,引腳的電平會變為”低”。而假如使用傳統的51或者PIC單片機來實現翻轉電平的功能,則需要執行以下3個步驟:
??? 比較下來,是不是覺得使用TASK很方便,同時效率也很高?你只需啟動這個TASK,硬件自動幫你執行后續的操作。
?
EVENT:
?? 可以簡單地理解為類似中斷一樣的東西,當指定引腳檢測到指定的電平變化或者指定的電平,會產生一個EVENT,通知CPU。
?
GPIOTE為GPIO TASKS AND EVENTS的縮寫,它是NRF5X芯片集成的一個獨立的功能模塊。GPIOTE有4個通道,GPIO中的任何一個引腳都可以使用這4個通道中的一個。
?
有了這個功能模塊GPIO就可以使用GPIOTE里面TASK和EVENT的功能。要提醒一下,當GPIO使用了GPIOTE模塊以后,GPIO中用來管理輸出輸入的OUT、IN寄存器將失效,此時只能通過GPIOTE模塊里面的OUT TASK和IN EVENT來輸出或者獲取引腳的輸入電平 。只有當GPIOTE功能禁止掉,我們才可以像使用普通的GPIO一樣使用它。我們可以啟動TASK,輸出想要的電平;也可以使能EVENT,當引腳上有我們想要的電平的時候,通過EVENT獲取通知。關于OUT、IN寄存器的介紹請參考上一節的內容。當GPIO引腳使能了TASK,那么該引腳將會被設置為輸出模式;當GPIO引腳使能了EVENT,那么該引腳將會被設置為輸入模式。假如在使能GPIOTE之前執行過GPIO的配置,這些配置將會被忽略。
?
GPIOTE模塊提供的TASKS包括:
?
?
?? GPIOTE可以產生的EVENTS包括:
?
?
本節我們將用GPIOTE實現按鍵點燈操作,通過操作按鍵來實現LED燈的亮滅控制,只需要配置好功能代碼即可。
示例詳解
基于硬件平臺: nrf51822ek_tm開發板。
?
?
本示例所用的最小系統板原理圖:
?
?
工程名為nrfxx-gpiote確認后按下圖選擇芯片為nrf51822_xxAA->ok
在彈出的對話框中勾選CMSIS中的CORE;Device中的Startup(后面有nrf51 Series字樣的);在nrf_device中勾選nrf_gpio, nrf_gpiote,nrf_delay.
?
OK之后工程自動生成如下代碼:
新建一個空白文檔,保存為main.c,并加入工程中:
?
?
配置工程,選擇使用MicroLIB庫,可以減小程序體積:
加入NRF51定義,并選擇化等級3,可以減小程序體積,但仿真運行時可能會出現與代碼順序不一致現象:
?
調試工具選擇J-LINK,并將接口設置為SW口勾選下載程序后自動復位及運行:
?
?
按下按鍵,程序成功進入到中斷函數中:
清除所有斷點,繼續按按鍵發現可以實現用按鍵觸發LED亮滅操作了,是不是很簡單呢!!當然這里只是個示例,實際實驗過的朋友會發現上面這種處理方式感覺LED并不受控,有時按一下會翻轉,有時測不會,這是因為機械按鍵抖動引起的,大家可以加入一些防抖操作即可解決。
OK,本期實驗完成!下期見!同時如果大家有什么疑問或是有想了解的其它內容,也歡迎大家留言!!最后喜歡這個公眾號的同學們記得加關注了,會有不定期技術干貨推出!!
文中源碼資料下載,在公眾號里給十三發消息:
下載|一起學nRF51xx 3
?
關注十三公眾號
?
總結
以上是生活随笔為你收集整理的一起学nRF51xx 3 - gpiote的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一起学nRF51xx 2 - cloc
- 下一篇: 一起学nRF51xx 4 - int