nRF51822外設應用[2]:GPIOTE的應用-按鍵檢測


版權聲明:本文為博主原創文章,轉載請注明作者和出處。    作者:強光手電[艾克姆科技-無線事業部]

1. nRF51822寄存器類型

  nRF51822的寄存器和一般的單片機有所差別,nRF51822的寄存器分為下面的三種類型。

  • Task :任務寄存器,可以由程序或事件觸發。
  • Event:事件寄存器,事件可以產生中斷或觸發任務。
  • Register:普通寄存器,和一般單片機的寄存器一樣。

  Task和event使得操作片上外設十分方便簡潔,只需進行少量的配置,即可輕松運用各種外設。同時,Task和event能有效減少CPU的占用時間,降低CPU的負荷。

  Task和Event更多的是用來和PPI(可編程外設互連)配合使用,通過PPI 將某個Event和Task連接起來,連接后,該Event即可觸發對應的Task執行相應的功能。

  示例:實現每隔1S翻轉一次指示燈的狀態。

  •  一般的做法:配置定時器定時時間為1S,每秒產生一次中斷,在中斷服務程序中通過軟件操作翻轉指示燈的狀態。在這個過程中,必須要通過軟件操作才能實現。
  • 通過Task和Event實現:配置定時器的相關參數,配置GPIOTE的Task為翻轉管腳狀態,配置PPI的一個通道用於連接定時器的匹配事件和GPIOTE的Task。這樣,當定時器產生匹配事件時,會自動觸發GPIOTE的Task,在無需任何軟件干預的情況下實現指示燈狀態的翻轉。

2. GPIOTE(GPIO Tasks and Events)

2.1 功能描述

  nRF51822在GPIO的基礎上引入了任務和事件(GPIOTE)的概念,nRF51822的GPIOTE共有4個通道,每個通道都可以選擇一個管腳,選擇的管腳可以配置為Task mode或Event mode。需要注意的是:不能將某個管腳同時分配給多個GPIOTE通道,否則會導致無法預料的錯誤。

  GPIOTE通道的Task可以用來執行以下寫操作:

  • 置位。
  • 清除。
  •  翻轉。

  事件可以由以下的輸入狀態產生:

  • 上升沿。
  • 下降沿。
  • 任意電平跳變。 

2.1.1 管腳Tasks和Events

  Tasks和Events通過CONFIG[n](n=0~3)配置,每個CONFIG[n]寄存器對應一組OUT[n] 任務寄存器和IN[n]事件寄存器。OUT[n]用於寫管腳,IN[n]由管腳狀態變化觸發。

  當把某個管腳分配給OUT[n]任務或IN[n]事件后,該管腳就只能被GPIOTE模塊寫操作,正常的GPIO寫入無效。

  一旦配置OUT[n]任務或IN[n]事件控制某個管腳,那么該管腳的輸出值只能通過GPIOTE模塊操作,使用GPIO的寄存器操作會被忽略。

  當GPIOTE通道被配置用於操作一個任務管腳時,CONFIG[n]寄存器中的OUTINIT決定了該管腳腳的初始值。可以通過配置OUTINIT來設置管腳初始化狀態為高電平或是低電平。

2.1.2 PORT事件

  GPIOTE除了4個通道外,還包含一個PORT事件。PORT事件由使用GPIO DETECT信號的多個管腳觸發,PORT中的任意一個管腳上的上升沿都會觸發PORT事件。

可以設置一個或多個GPIO DETECT用來產生PORT事件,PORT事件可以作為喚醒源,也可以作為中斷源產生中斷。

3. 按鍵實驗程序

  本實驗使用的程序是:nrf51-app-button-example-master。

3.1 運行環境

  • 編譯環境:MDK5。
  • SDK版本:SDK 8.0.0

3.2 按鍵檢測原理

  程序中對按鍵的處理如下:通過GPIOTE的PORT事件來檢測有無按鍵按下,當檢查到按鍵按下時,啟動定時器開始計時(程序中設置的位50ms),在定時器超時中斷中若檢測到該按鍵仍然為按下的狀態,則認為這是一個有效的按鍵。在這里使用定時器(軟件定時器)是為了消除按鍵抖動。

 

 

                                                                圖1:按鍵檢測和消抖

  若在第一個按鍵檢測流程沒有處理完時(該按鍵的定時器還在運行),又有一個按鍵按下,這時,定時器會重新開始計時,如下圖所示。

                                                    圖2:多個按鍵處理

3.3 程序下載和驗證

3.3.1 程序下載

  本實驗無需下載協議棧,如果開發板中已經下載了協議棧,需要通過nRF STUDIO進行擦除。

  程序可以用nRFgo Studio下載,也可以在MDK中直接下載調試,在這里我們用nRFgo Studio下載。切換到“Program Application”選項卡。點擊“Browse…”按鈕打開應用程序的HEX文件(位於“…\ nrf51-app-button-example-master\pca10028 \arm5\_build”目錄下的 GPIOTE_BUTTON.hex)。點擊“Program”下載程序。

3.3.2 實驗現象

  分別按下S1~S4按鍵,每按一次,對應的指示燈(D1~D4)狀態會翻轉一次。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM