日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一起学nRF51xx 3 -  gpiote

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一起学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
  • 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包括:

    ?

  • SET(輸出高電平)
  • CLEAR(輸出低電平)
  • TOGGLE(取反)
  • ?

    ?? GPIOTE可以產生的EVENTS包括:

    ?

  • RISING EDGE(上升沿)
  • FAILLING EDGE(下降沿)
  • ANY CHANGE(電平的變化)
  • ?

    本節我們將用GPIOTE實現按鍵點燈操作,通過操作按鍵來實現LED燈的亮滅控制,只需要配置好功能代碼即可。

    示例詳解

    基于硬件平臺: nrf51822ek_tm開發板。

    ?

    ?

    本示例所用的最小系統板原理圖:

    ?

    ?

  • 工程創建:
  • 打開KEIL,新建一個空工程:Project->New uVision Project
  • 工程名為nrfxx-gpiote確認后按下圖選擇芯片為nrf51822_xxAA->ok

    在彈出的對話框中勾選CMSIS中的CORE;Device中的Startup(后面有nrf51 Series字樣的);在nrf_device中勾選nrf_gpio, nrf_gpiote,nrf_delay.

    ?

    OK之后工程自動生成如下代碼:

    新建一個空白文檔,保存為main.c,并加入工程中:

    ?

    ?

  • 工程代碼
  • OK之后在man.c中加入如下代碼:
  • 配置工程,選擇使用MicroLIB庫,可以減小程序體積:

    加入NRF51定義,并選擇化等級3,可以減小程序體積,但仿真運行時可能會出現與代碼順序不一致現象:

    ?

    調試工具選擇J-LINK,并將接口設置為SW口勾選下載程序后自動復位及運行:

    ?

  • 編譯工程,仿真調試-》全速運行并在GPIOTE_IRQHandler中放入一個斷點:
  • ?

    按下按鍵,程序成功進入到中斷函數中:

    清除所有斷點,繼續按按鍵發現可以實現用按鍵觸發LED亮滅操作了,是不是很簡單呢!!當然這里只是個示例,實際實驗過的朋友會發現上面這種處理方式感覺LED并不受控,有時按一下會翻轉,有時測不會,這是因為機械按鍵抖動引起的,大家可以加入一些防抖操作即可解決。

    OK,本期實驗完成!下期見!同時如果大家有什么疑問或是有想了解的其它內容,也歡迎大家留言!!最后喜歡這個公眾號的同學們記得加關注了,會有不定期技術干貨推出!!

    文中源碼資料下載,在公眾號里給十三發消息:

    下載|一起學nRF51xx 3

    ?

    關注十三公眾號

    ?

    總結

    以上是生活随笔為你收集整理的一起学nRF51xx 3 -  gpiote的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。