一起学nRF51xx 3 - gpiote
前言
nRF5X系列芯片引入了TASK和EVENT這2個全新的概念。
?
TASK,可以理解為DMA,但DMA更側(cè)重數(shù)據(jù)傳輸,而TAST則是預定功能的觸發(fā)操作:
可以理解為執(zhí)行某個特定任務(wù)的一段代碼的集合,但不需要CPU參與。比如nRF5X中有一個很常用的TASK---TOGGLE。TOGGLE我們暫時翻譯為”翻轉(zhuǎn)”,它的功能就是在指定的引腳,把輸出的電平翻轉(zhuǎn)一次。比如當前引腳的電平為”高”,執(zhí)行完TOOGLE這個任務(wù)以后,引腳的電平會變?yōu)椤钡汀薄6偃缡褂脗鹘y(tǒng)的51或者PIC單片機來實現(xiàn)翻轉(zhuǎn)電平的功能,則需要執(zhí)行以下3個步驟:
??? 比較下來,是不是覺得使用TASK很方便,同時效率也很高?你只需啟動這個TASK,硬件自動幫你執(zhí)行后續(xù)的操作。
?
EVENT:
?? 可以簡單地理解為類似中斷一樣的東西,當指定引腳檢測到指定的電平變化或者指定的電平,會產(chǎn)生一個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獲取通知。關(guān)于OUT、IN寄存器的介紹請參考上一節(jié)的內(nèi)容。當GPIO引腳使能了TASK,那么該引腳將會被設(shè)置為輸出模式;當GPIO引腳使能了EVENT,那么該引腳將會被設(shè)置為輸入模式。假如在使能GPIOTE之前執(zhí)行過GPIO的配置,這些配置將會被忽略。
?
GPIOTE模塊提供的TASKS包括:
?
?
?? GPIOTE可以產(chǎn)生的EVENTS包括:
?
?
本節(jié)我們將用GPIOTE實現(xiàn)按鍵點燈操作,通過操作按鍵來實現(xiàn)LED燈的亮滅控制,只需要配置好功能代碼即可。
示例詳解
基于硬件平臺: nrf51822ek_tm開發(fā)板。
?
?
本示例所用的最小系統(tǒng)板原理圖:
?
?
工程名為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,可以減小程序體積,但仿真運行時可能會出現(xiàn)與代碼順序不一致現(xiàn)象:
?
調(diào)試工具選擇J-LINK,并將接口設(shè)置為SW口勾選下載程序后自動復位及運行:
?
?
按下按鍵,程序成功進入到中斷函數(shù)中:
清除所有斷點,繼續(xù)按按鍵發(fā)現(xiàn)可以實現(xiàn)用按鍵觸發(fā)LED亮滅操作了,是不是很簡單呢!!當然這里只是個示例,實際實驗過的朋友會發(fā)現(xiàn)上面這種處理方式感覺LED并不受控,有時按一下會翻轉(zhuǎn),有時測不會,這是因為機械按鍵抖動引起的,大家可以加入一些防抖操作即可解決。
OK,本期實驗完成!下期見!同時如果大家有什么疑問或是有想了解的其它內(nèi)容,也歡迎大家留言!!最后喜歡這個公眾號的同學們記得加關(guān)注了,會有不定期技術(shù)干貨推出!!
文中源碼資料下載,在公眾號里給十三發(fā)消息:
下載|一起學nRF51xx 3
?
關(guān)注十三公眾號
?
總結(jié)
以上是生活随笔為你收集整理的一起学nRF51xx 3 - gpiote的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一起学nRF51xx 2 - cloc
- 下一篇: 一起学nRF51xx 4 - int