亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于nRF52840的時槽演示實驗

        2021-03-22 02:53:17錢光明康日鄧朝豐
        電腦知識與技術(shù) 2021年4期
        關(guān)鍵詞:事件任務(wù)

        錢光明 康日 鄧朝豐

        摘要:nRF52840是NORDIC公司近年推出的一個無線芯片,具有CORTEX-M4內(nèi)核,支持多種接口和無線協(xié)議。該文基于該芯片設(shè)計了一個2.4GHz教學(xué)演示實驗,幾個從節(jié)點首先與一個主節(jié)點同步,然后在各自的時槽內(nèi)向主節(jié)點發(fā)送數(shù)據(jù)包。文中給出了收發(fā)程序的詳細設(shè)計,意在幫助學(xué)生盡快地熟悉這一芯片,盡快入門。

        關(guān)鍵詞:時槽;任務(wù);事件;主節(jié)點;從節(jié)點

        中圖分類號:TP3? ? ? ? ? ?文獻標(biāo)識碼:A

        文章編號:1009-3044(2021)04-0234-03

        Abstract: nRF52840 is a wireless chip in recent years. With a CORTEX-M4 core, it supports many interfaces and several wireless protocols. In this paper, a 2.4GHz teaching demonstration experiment is designed with this chip. First, several slave nodes get synchronized with a master node, then send packets to the master in their own time slots. The detailed design of transmitting and receiving program is presented to help students get familiar with this chip and get started as quickly as possible.

        Key words: time slot; task; event; master node; slave node

        1引言

        從nRF24L01到nRF52840,NORDIC推出了一系列無線收發(fā)芯片。在nRF52840中,包括CORTEX-M4內(nèi)核和無線收發(fā)模塊,支持多種接口,支持藍牙和IEEE 802.15.4等多種無線結(jié)構(gòu)[1]。但是,開發(fā)者要使用和熟悉nRF52840,還是需要花費時間的,尤其是官方提供的固件程序。該芯片與以往nRF24L01相比,無線收發(fā)的具體實現(xiàn)和有關(guān)的命名,都有了很大的不同[1-2]。本文使用淘寶網(wǎng)購的nRF52840硬件模塊[3],每一個模塊充當(dāng)一個無線節(jié)點,一個主節(jié)點,幾個從節(jié)點。設(shè)計了一個傳統(tǒng)的2.4GHz收發(fā)包演示實驗[4],即從節(jié)點在獲得與主節(jié)點同步后,在各自的時槽內(nèi),向主節(jié)點發(fā)送各自的數(shù)據(jù)包。該實驗在芯片硬件和官方基本固件程序的基礎(chǔ)上進行設(shè)計,不使用其他軟件模塊和第三方程序,從而有利于熟悉芯片的工作原理,把握底層運行指標(biāo)。

        2 nRF52840的2.4GHz無線狀態(tài)轉(zhuǎn)換圖

        nRF52840遵循圖1來進行2.4GHz無線收發(fā)[1]。圖中的英文名詞可分為三類。

        第一類是每一個方框中的名詞,代表狀態(tài),例如TX代表發(fā)送狀態(tài)。一共有九個狀態(tài):TXDISABLE(發(fā)送取消狀態(tài)),RXDISABLE(接收取消狀態(tài)),DISABLED(已取消狀態(tài)),TXRU(發(fā)送準(zhǔn)備狀態(tài)),RXRU(接收準(zhǔn)備狀態(tài)),TXIDLE(發(fā)送空閑狀態(tài)),RXIDLE(接收空閑狀態(tài)),TX(發(fā)送狀態(tài)),RX(接收狀態(tài))。

        第二類是方框外帶斜杠的名詞,代表事件(EVENT)或稱事件標(biāo)志。一共有三類事件:/DISABLED(已取消事件),/READY(準(zhǔn)備好事件),/END(結(jié)束事件)。

        第三類是方框外不帶斜杠的名詞,代表任務(wù)(TASK)或稱命令。一共有五類任務(wù):DISABLE(取消任務(wù)),TXEN(發(fā)送準(zhǔn)備任務(wù)),RXEN(接收準(zhǔn)備任務(wù)),START(啟動任務(wù)),STOP(停止任務(wù))。注意這里的“任務(wù)”,實際上是一種命令,它與操作系統(tǒng)中的“任務(wù)”概念非常不同。

        在本文下面的程序中,會有這些狀態(tài)、任務(wù)和事件的使用舉例。

        3 同步數(shù)據(jù)包的發(fā)送和接收

        為使得每個從節(jié)點不沖突,只在各自的時槽中發(fā)包,必須先同步。所有從節(jié)點復(fù)位后,首先處于接收狀態(tài)。然后復(fù)位主節(jié)點,由主節(jié)點發(fā)出同步數(shù)據(jù)包beacon。

        這里,先明確一下實驗中的收發(fā)次序:主節(jié)點發(fā)beacon,所有從節(jié)點接收。beacon完畢后,進入時槽1,從節(jié)點1發(fā)數(shù)據(jù)包1,主節(jié)點收;時槽1完畢后,進入時槽2,從節(jié)點2發(fā)數(shù)據(jù)包2,主節(jié)點收;后面的時槽以此類推。實驗中,每個時槽寬度設(shè)為1600μs。

        圖2是主節(jié)點發(fā)beacon的程序段。圖中,為了使printf 語句能正常使用,并通過串口調(diào)試助手在PC機上輸出有關(guān)信息,那么,在初始化階段需要設(shè)置好串口,我們使用官方提供的函數(shù)APP_UART_FIFO_INIT來完成。

        接下來,本程序段中的packet_build_send函數(shù)用于準(zhǔn)備包、發(fā)包、并等待包發(fā)送完畢。準(zhǔn)備在存儲器中的數(shù)據(jù)包(數(shù)組packet存放)需要由S0、LENGTH、S1和PAYLOAD這四個部分組成,其中S0域、S1域和LENGTH域都是可選的,這三個域加上數(shù)據(jù)域PAYLOAD,總長不超過258個字節(jié)。LENGTH域一般用來表示數(shù)據(jù)域PAYLOAD的長度(字節(jié)數(shù))。本實驗中,不設(shè)S0域和S1域,LENGTH域為一個字節(jié),設(shè)為255,而PAYLOAD則為255個字節(jié)。

        我們將PAYLOAD的首字節(jié)設(shè)為nodenum,代表發(fā)包節(jié)點的編號,主節(jié)點編號為0。從節(jié)點1的編號為1,從節(jié)點2的編號為2,以此類推。包數(shù)組packet中,packet[0]=LENGTH,packet[1]=nodenum。

        packet_build_send函數(shù)中先準(zhǔn)備好一個包(充當(dāng)beacon),然后將包地址賦給NRF_RADIO->PACKETPTR這一指針,接下來按圖3的順序發(fā)包并等待發(fā)送結(jié)束。圖3中,先發(fā)出TXEN任務(wù),然后等待/READY事件。再發(fā)出START任務(wù),然后等待/END事件。一旦出現(xiàn)/END事件,就表明發(fā)送完畢。

        再回到圖2。radio_disable函數(shù)中,會通過DISABLE任務(wù),使模塊回到DISABLED狀態(tài)。然后,prepare_for_receive函數(shù)為接收數(shù)據(jù)包做準(zhǔn)備,該函數(shù)主要是發(fā)出RXEN任務(wù),并等待/READY事件。接下來,調(diào)用nrfx_timer_enable函數(shù),以啟動定時器TIMER_LED0,進入時槽1。該定時器的定時周期,就定為時槽的寬度。當(dāng)然,需要先初始化該定時器,主要利用nrfx_timer_us_to_ticks函數(shù)將時槽寬度1600μs轉(zhuǎn)換為ticks,另外,還需在TIMER_LED0所配備的事件處理函數(shù)timer_led_event_handler0中,將時槽控制變量slotend加1。

        對于從節(jié)點,其接收beacon的程序段則如圖4所示。prepare_for_receive函數(shù)為接收beacon做好了準(zhǔn)備,接著,發(fā)出START任務(wù),進入RX接收狀態(tài),并等待/END事件標(biāo)志。/END一旦變?yōu)?,則說明收到了一個包。如果CRCSTATUS為1(說明CRC校驗正確)且packet[1]=0(說明該包來自主節(jié)點master),就認為正確收到了beacon,便通過nrfx_timer_enable函數(shù),啟動定時器TIMER_LED1,進入時槽1。當(dāng)然,TIMER_LED1也需要初始化,定時周期也是1600μs。如果CRCSTATUS和packet[1]都出錯,說明收到的不是正確的beacon,程序則回到loop位置,繼續(xù)接收。

        4 從節(jié)點輪流發(fā)包

        進入時槽1后,從節(jié)點1發(fā)包,主節(jié)點接收。從節(jié)點發(fā)包的程序段如圖5所示。slotnum++的結(jié)果,在時槽1中為1,時槽2中為2,以此類推。顯然,slotnum的值代表時槽的編號。任何一個時槽中,從節(jié)點發(fā)包都用圖5。對于從節(jié)點1,其節(jié)點編號nodenum=1,從圖中的if語句可知:只有當(dāng)nodenum和slotnum相等,即節(jié)點編號和時槽編號相等時,發(fā)包函數(shù)packet_build_send才會被調(diào)用。該發(fā)包函數(shù)準(zhǔn)備數(shù)據(jù)包時,會將nodenum賦值給packet[1]。

        現(xiàn)在看看時槽控制變量slotend的使用。每個時槽開始時,slotend=0。定時周期1600μs后,通過中斷,TIMER_LED1所配備的事件處理函數(shù)timer_led_event_handler1被調(diào)用,該函數(shù)中slotend將被置為1,表明一個時槽的時間結(jié)束。

        從時槽1開始,主節(jié)點接收數(shù)據(jù)包的程序段如圖6所示。主節(jié)點的定時器命名為TIMER_LED0,如前所述,其定時周期也是1600μs,時槽控制變量slotend的用法與圖5相同。圖6中,一開始主節(jié)點發(fā)出START任務(wù),進入RX接收狀態(tài),等待從節(jié)點發(fā)包。當(dāng)/END事件到來時,表明收到了包,進一步判斷該包是否正確(CRC檢查),是不是想要的包(nodenum和slotnum是否相等),并用printf語句輸出相關(guān)信息。無論是否收到數(shù)據(jù)包,也無論收到的包正確與否,都要等待時槽結(jié)束,一旦slotend=1,就進入下一時槽。

        收發(fā)雙方的時間一定要注意配合。圖中每一個語句的執(zhí)行都需要時間,尤其是printf語句,輸出信息越長,耗時就越長。所以,如果要增加發(fā)送方或接收方printf的輸出信息,則需細心調(diào)試。要保證發(fā)送方發(fā)出數(shù)據(jù)時,接收方一定要已經(jīng)準(zhǔn)備好。

        5結(jié)束語

        有些程序段在上面并未列出,其中主要有串口的初始化和定時器的有關(guān)函數(shù),實驗者可依據(jù)官方和商家有關(guān)資料,先學(xué)會這兩方面的知識。上述實驗演示效果良好,在此基礎(chǔ)上,可以進一步改進和加深。例如,beacon的包可以短一些,從節(jié)點可以采用競爭方式發(fā)包,發(fā)包數(shù)據(jù)可以嘗試加密等。

        參考文獻:

        [1] nRF52840 Product Specification v1.1[Z], 2019. https://infocenter.nordicsemi.com/index.jsp

        [2] nRF24L01+Product Specification v1.0[Z], 2008. https://infocenter.nordicsemi.com/index.jsp

        [3] nRF52840 Eval Kit 用戶手冊 v1.0.2[Z], 2019. https://www.waveshare.net/w/upload/a/a8/NRF52840-Eval-Kit-user-manual-cn.pdf.

        [4] 錢光明,易超.短距離無線網(wǎng)的一個教學(xué)實驗設(shè)計[J].計算機時代,2020,27(6): 109-111.

        【通聯(lián)編輯:代影】

        猜你喜歡
        事件任務(wù)
        Contiki系統(tǒng)進程與事件剖析
        網(wǎng)絡(luò)輿情反轉(zhuǎn)現(xiàn)象中的“參照點效應(yīng)”
        新聞界(2016年7期)2016-12-23 14:56:11
        保羅·利科的“話語事件”思想
        丟棄“正確的廢話”
        授之以魚,不如授之以漁
        考試周刊(2016年92期)2016-12-08 00:10:56
        熱點事件中的“輿論搭車”現(xiàn)象探析
        新聞前哨(2016年11期)2016-12-07 11:25:41
        任務(wù)型教學(xué)模式應(yīng)用于會計英語詞匯教學(xué)的有效性研究
        淺談任務(wù)型教學(xué)在高中英語語法教學(xué)中的應(yīng)用
        明確“任務(wù)” 文中有“我”
        當(dāng)代教育工作者的任務(wù)——教會學(xué)生做人
        午夜国产精品久久久久| 久久久国产乱子伦精品作者| 国产精品久久久久影院嫩草| 狠狠躁夜夜躁人人爽天天| 久久伊人精品只有这里有| 色久悠悠婷婷综合在线| 人妻无码一区二区不卡无码av| 香蕉人妻av久久久久天天| 人妻无码AⅤ中文系列久久免费| 午夜免费观看一区二区三区| 无码h黄肉3d动漫在线观看| 国产一区二区三区影院| 天堂最新在线官网av| 丰满人妻被持续侵犯中出在线| 久久久久久久亚洲av无码| 日日碰狠狠添天天爽超碰97| 欧美日韩中文字幕日韩欧美| 一区二区精品天堂亚洲av| 亚洲熟妇av一区| 久久97精品久久久久久久不卡| 蜜桃av多人一区二区三区| 亚洲女同恋av中文一区二区| 无码国产精品一区二区免费式直播| 欧美日本亚洲国产一区二区| 日韩av免费在线不卡一区| 蜜桃尤物在线视频免费看| 精精国产xxxx视频在线播放| 国产AV无码专区亚洲AV桃花庵| 亚洲国产精品成人一区二区三区| 亚洲综合另类小说色区| 欧美日韩视频无码一区二区三| 最新亚洲无码网站| 成人免费播放视频影院| 国产精品亚洲а∨天堂2021| 天天天综合网| av免费观看在线网站| 夫妻免费无码v看片| 无码午夜人妻一区二区三区不卡视频| yw193.can尤物国产在线网页| 在线观看国产视频午夜| 午夜视频在线在免费|