環境管理_基于嵌入式的室內環境信息采集控制演示系統設計_第1頁
環境管理_基于嵌入式的室內環境信息采集控制演示系統設計_第2頁
環境管理_基于嵌入式的室內環境信息采集控制演示系統設計_第3頁
環境管理_基于嵌入式的室內環境信息采集控制演示系統設計_第4頁
環境管理_基于嵌入式的室內環境信息采集控制演示系統設計_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

目錄題目:基于嵌入式的室內環境信息采集控制演示系統設計1目錄2摘要3關鍵詞3前言3系統分析及其設計4一、基本原理:4二、系統方案設計5三、總體設計7四、系統測試31總結31參考文獻32致謝32基于嵌入式的室內環境信息采集控制演示系統設計摘要 智能家居已然成為一個熱門話題,而室內環境監測是其中不可或缺的一個重要組成部分.加之嵌入式和無線傳感技術已經較為成熟,因此,基于嵌入式系統的室內環境監測系統是可以實現的. 基于嵌入式的無線傳感網絡是多學科的高度交叉,知識的高度集成的前沿熱點研究領域。它通過各類集成化的微型傳感器協作地實時監測,感知和采集各種環境或監測對象的信息,這些信息通過無線方式被發送,并以自組多跳的網絡方式傳送到用戶終端無線傳感器網絡的特性決定了其不需要較高的傳輸帶寬,而要求較低的傳輸延時和極低的功率消耗。IEEES02154ZigBee技術是近年來通信領域中的研究熱點,具有低成本、低功耗、低速率、低復雜度的特點和高可靠性、組網簡單、靈活等優勢,逐漸成為無線傳感器網絡事實上的國際標準。此次課程設計并實現了用無線傳感器網絡構成的分布式溫度濕度監控系統。關鍵詞:嵌入式、智能家居、ZIGBEE、串口通信前言 家居環境是指家庭團聚、休息、學習和家務勞動的環境。家居環境條件的好壞,直接影響著居民的發病率和死亡率。城市居民每天在室內工作、學習和生活的時間占全天時間的90%左右,因此,居室環境與人類健康和兒童生長發育的關系極為密切。隨著人們對健康的不斷重視,加強對家居環境的環境狀況的實時監測與治理,為人們提供一個安全、健康、舒適的生活環境,已經成為十分迫切的市場需求.嵌入式技術的發展,為環境環境檢測提供了更進一步的保障。基于嵌入式的環境信息采集系統包含感知層、傳輸層、應用層三個層面;傳輸層常見的有溫濕度、煙感、一氧化碳、壓力等嵌入式傳感器模塊,傳輸層包括有線通信和無線通信兩部分,應用層包括各種終端。在室內環境監測領域,以嵌入式技術為基礎,結合ZigBee技術可以實現、準確、完整、可靠的反應環境信息,做到實時監控。系統分析及其設計一、基本原理:溫度傳感器將被測點的溫度采集后輸出的模擬信號逐步送往放大電路、低通濾波器以及 A/D 轉換器(即信號調理電路),然后再單片機的控制下將 A/D 轉換器輸出的數字信號傳送到無線收發芯片中,并通過芯片的調制處理后由芯片內部的天線發送到上位機機監測軟件上,在上位機模塊上,發來的數據由單片機控制的無線收發芯片接收并解調,最后通過接口芯片發送到 PC 機中進行顯示和處理。溫度傳感器被用在終端節點上,當上電后,溫度傳感器就是能夠獲取環境中某個地方溫度的敏感元器件,它可以將環境中的溫度或者是與溫度相關的參量信息轉換成電信號,我們可以根據這些電信號的強弱來識別被測點在環境中的溫度數據。 系統方案設計 系統設計需求濕度傳感器和溫度傳感器采集到數據后,通過給RS232串口增加無線傳輸功能,替代設備電纜線進行無線傳輸, 無線溫度采集系統改變了傳統有線的數據采集系統搭建布線困難,監測區域受限等諸多不足。要求設計的短距離無線通信系統具有功耗少,性價比高,系統維護快捷方便,而且通過在傳感器模塊上添加 FLASH 存儲設備,使得數據采集工作能夠擺脫對監測過程網絡輻射范圍的限制,可應用到許多的場合更好的改善采集工作的便捷行。通過與其他通信技術(如 GSMGPRS)的無縫接合,能夠實現采集數據的遠程傳輸,滿足對數據采集區域的遠程監控串口傳輸設計為雙向全雙工,無硬件流控制,強制允許OTA(多條)時間和丟包重傳。2、系統方案設計方案一: 使用目前已經非常成熟且廣泛應用的藍牙技術,能在包括移動電話、PDA、無線耳機、筆記本電腦、相關外設等眾多設備之間進行無線信息交換。利用“藍牙”技術,能夠有效地簡化移動通信終端設備之間的通信,也能夠成功地簡化設備與因特網Internet之間的通信,從而數據傳輸變得更加迅速高效,為無線通信拓寬道路。藍牙采用分散式網絡結構以及快跳頻和短包技術,支持點對點及點對多點通信,工作在全球通用的2.4GHz ISM(即工業、科學、醫學)頻段。其數據速率為1Mbps。采用時分雙工傳輸方案實現全雙工傳輸。方便快捷且不會遇到未知的技術難題.方案二:選擇TI公司的2.4GHz片上系統解決方案CC2530,CC2530是用于IEEES02.15.4、Zigbee和RF4CE應用的一個片上系統解決方案,它能以較低的總成本建立強大的網絡節點。CC2530結合了先進的RF收發器性能,業界標準的增強型8051內核,使操作更容易,具備不同的運行模式,尤其適用于低功耗的系統需求。3、系統方案選擇通過對比以上兩種方案開發的難易程度、開發周期和現有的實驗環境我們選擇方案二。無線溫度采集系統改變了傳統有線的數據采集系統搭建布線困難,監測區域受限等諸多不足。ZigBee這種新興的短距離無線通信系統具有功耗少,性價比高,系統維護快捷方便,而且通過在傳感器模塊上添加 FLASH 存儲設備,使得數據采集工作能夠擺脫對監測過程網絡輻射范圍的限制,可應用到許多的場合更好的改善采集工作的便捷行。通過與其他通信技術(如 GSMGPRS)的無縫接合,能夠實現采集數據的遠程傳輸,滿足對數據采集區域的遠程監控。一般以 ZigBee 技術為核心的無線溫度采集系統的工作過程為:協調器節點首先應搭建網絡,等待各自終端采集節點的入網請求;終端節點經過驗證加入網絡后,把溫度傳感器采集到的數據通過無線網絡上傳傳輸給協調器節點;協調器節點接收到數據包后,進行數據包解析,并通過串口將溫度信息以及子節點地址等有效信息存儲并顯示在監控界面上。三、總體設計無線傳感器溫度測量系統主要由單個 ZigBee 協調器、單部 PC 機和放置在各處的溫度采集節點ZigBee 終端設備組成。ZigBee 協調器與各個終端節點形成了一個 ZigBee 星型網絡。整個無線溫度采集系統的拓撲結構圖如圖 1所示。各處的溫度采集節點ZigBee 終端設備組成。CC2530芯片的有效通信半徑為 100m 時,終端節點可以安置在以協調器為中心100m 半徑范圍內。終端數據采集節點的結構較為簡化,僅由一個 CC2530 模塊,Flash 存儲,2 節 1.5V 電池和溫度傳感器組成,各個終端節點被初始化為無信標網絡中的終端設備。終端設備上電復位后,便啟動搜索指定信道上的ZigBee協調器,并發送連接請求,終端設備在成功入網后,將被賦予一個 16 位短地址,在以后網絡中的通信都以這個 16 位的短地址作為節點的標識;啟動休眠定時器,間隔10 秒鐘喚醒一次,醒來后使用一種簡單的非時隙 CSMA- CA,通過競爭機制取得信道使用權,自己向協調器節點發送請求數據。利用模塊上的溫度傳感器模塊檢測環境溫度,并上傳給協調器節點,然后立即再次進入休眠狀態,最大限度地減少能耗,延長終端節點電源續航時間,同時也可以延伸采集范圍,即利用 ZigBe網絡的自組織性我們可以攜帶輕巧的終端數據采集節點到實際測量區域完成數據采集工作,如果超出了無線網絡可以支持的傳輸范圍,那可以將數據暫時存儲在 Flash 存儲器中。網絡中的協調器節點負責搜集各溫度采集節點的信息,并將信息快速的通過 RS232 串口按事先定義好的格式上傳 PC 機,隨即解析并顯示出來。1、總體設計框圖如下:圖1 無線溫濕度采集系統框圖2、硬件設計實物圖如下:2.1CC2530郵票孔節點模塊2.2無線節點模塊2.3溫濕度采集模塊3、溫濕度監測芯片說明 3.1 SHT10說明SHT10是一款高度集成的溫度濕度傳感器芯片,提供全標定的數字輸出。它采用專利的COMSens技術,確保了傳感器具有極高的可靠性與卓越的長期穩定性。傳感器包括包括一個電容性聚合體測濕敏感元件、一個能隙材料制成的測溫元件,并在同一芯片上,與14位的A/D轉換器以及串行接口電路進行連接。SH10引腳特性如下:3.1.1、 電源引腳SHT10的供電電壓為2.45.5V。傳感器上電后,要等待11ms以越過“休眠”狀態。在此期間無需發送任何指令。電源引腳(VDD,GND)之間可增加一個100nF的電容,用以去耦濾波。3.1.2、串行接口(兩線雙向) SHT10的串行接口,在傳感器信號的讀取及電源損耗方面,都做了優化處理;但與I2C接口不兼容.3.1.3、串行時鐘輸入(SCK) SCK用于微處理器與SHTxx之間的通訊同步。由于接口包含了完全靜態邏輯,因而不存在最小SCK頻率。3.1.4、串行數據(DATA) DATA三態門用于數據的讀取。DATA在SCK時鐘下降沿之后改變狀態,并僅在SCK時鐘上升沿有效。數據傳輸期間,在SCK時鐘高電平時,DATA必須保持穩定。為避免信號沖突,微處理器應驅動DATA在低電平。需要一個外部的上拉電阻(例如:10k)將信號提拉至高電平(參見圖2)。上拉電阻通常已包含在微處理器的I/O 電路中。31.5、串行時鐘輸入(SCK) SCK用于微處理器與SHTxx之間的通訊同步。由于接口包含了完全靜態邏輯,因而不存在最小SCK頻率。3.1.6、串行數據(DATA) DATA三態門用于數據的讀取。DATA在SCK時鐘下降沿之后改變狀態,并僅在SCK時鐘上升沿有效。數據傳輸期間,在SCK時鐘高電平時,DATA必須保持穩定。為避免信號沖突,微處理器應驅動DATA在低電平。需要一個外部的上拉電阻(例如:10k)將信號提拉至高電平(參見圖2)。上拉電阻通常已包含在微處理器的I/O 電路中。3.1.7、測量時序(RH 和T) 發布一組測量命令(表示相對濕度RH,表示溫度T)后,控制器要等待測量結束。這個過程需要大約11/55/210ms,分別對應8/12/14bit測量。確切的時間隨內部晶振速度,最多有15%變化。SHTxx通過下拉DATA至低電平并進入空閑模式,表示測量的結束。控制器在再次觸發SCK時鐘前,必須等待這個“數據備妥”信號來讀出數據。檢測數據可以先被存儲,這樣控制器可以繼續執行其它任務在需要時再讀出數據。接著傳輸2個字節的測量數據和1個字節的CRC奇偶校驗。uC需要通過下拉DATA為低電平,以確認每個字節。所有的數據從MSB開始,右值有效(例如:對于12bit數據,從第5個SCK時鐘起算作MSB;而對于8bit 數據,首字節則無意義)。用CRC數據的確認位,表明通訊結束。如果不使用CRC-8校驗,控制器可以在測量值LSB后,通過保持確認位ack 高電平,來中止通訊。在測量和通訊結束后,SHTxx自動轉入休眠模式。3.1.8、通訊復位時序如果與SHTxx通訊中斷,下列信號時序可以復位串口:當DATA保持高電平時,觸發SCK時鐘9次或更多。在下一次指令前,發送一個“傳輸啟動”時序。這些時序只復位串口,狀態寄存器內容仍然保留。通訊復位時序圖4、CC2530說明4.1、簡介CC2530 是用于2.4-GHzIEEE 802.15.4、ZigBee 和RF4CE 應用的一個真正的片上系統(SoC)解決方案。它能夠以非常低的總的材料成本建立強大的網絡節點。CC2530 結合了領先的RF 收發器的優良性能,業界標準的增強型8051 CPU,系統內可編程閃存,8-KB RAM 和許多其它強大的功能。CC2530 有四種不同的閃存版本:CC2530F32/64/128/256,分別具有32/64/128/256KB 的閃存。CC2530 具有不同的運行模式,使得它尤其適應超低功耗要求的系統。運行模式之間的轉換時間短進一步確保了低能源消耗。CC2530F256 結合了德州儀器的業界領先的黃金單元ZigBee協議棧(Z-Stack),提供了一個強大和完整的ZigBee 解決方案。CC2530F64 結合了德州儀器的黃金單元RemoTI,更好地提供了一個強大和完整的ZigBee RF4CE遠程控制解決方案。4.2、引腳描述引腳名稱 引腳 引腳類型 描述AVDD1 28 電源(模擬) 2-V3.6-V 模擬電源連接AVDD2 27 電源(模擬) 2-V3.6-V 模擬電源連接AVDD3 24 電源(模擬) 2-V3.6-V 模擬電源連接AVDD4 29 電源(模擬) 2-V3.6-V 模擬電源連接AVDD5 21 電源(模擬) 2-V3.6-V 模擬電源連接AVDD6 31 電源(模擬) 2-V3.6-V 模擬電源連接DCOUPL 40 電源(數字) 1.8V 數字電源去耦。不使用外部電路供應。DVDD1 39 電源(數字) 2-V3.6-V 數字電源連接DVDD2 10 電源(數字) 2-V3.6-V 數字電源連接GND - 接地 接地襯墊必須連接到一個堅固的接地面。GND 1,2,3,4 未使用的引腳連接到GNDP0_0 19 數字I/O 端口0.0P0_1 18 數字I/O 端口0.1P0_2 17 數字I/O 端口0.2P0_3 16 數字I/O 端口0.3P0_4 15 數字I/O 端口0.4P0_5 14 數字I/O 端口0.5P0_6 13 數字I/O 端口0.6P0_7 12 數字I/O 端口0.7P1_0 11 數字I/O 端口1.0-20-mA 驅動能力P1_1 9 數字I/O 端口1.1-20-mA 驅動能力P1_2 8 數字I/O 端口1.2P1_3 7 數字I/O 端口1.3P1_4 6 數字I/O 端口1.4P1_5 5 數字I/O 端口1.5P1_6 38 數字I/O 端口1.6P1_7 37 數字I/O 端口1.7P2_0 36 數字I/O 端口2.0P2_1 35 數字I/O 端口2.1P2_2 34 數字I/O 端口2.2P2_3 33 數字I/O 模擬端口2.3/32.768 kHz XOSCP2_4 32 數字I/O 模擬端口2.4/32.768 kHz XOSCRBIAS 30 模擬I/O 參考電流的外部精密偏置電阻RESET_N 20 數字輸入 復位,活動到低電平RF_N 26 RF I/O RX 期間負RF 輸入信號到LNARF_P 25 RF I/O RX 期間正RF 輸入信號到LNAXOSC_Q1 22 模擬I/O 32-MHz 晶振引腳1或外部時鐘輸入XOSC_Q2 23 模擬I/O 32-MHz 晶振引腳24.3、模塊說明CC2530芯片系列中使用的8051 CPU內核是一個單周期的8051兼容內核。它有三種不同的內存訪問總線(SFR,DATA 和CODE/XDATA),單周期訪問SFR,DATA 和主SRAM。它還包括一個調試接口和一個18 輸入擴展中斷單元。中斷控制器總共提供了18 個中斷源,分為六個中斷組,每個與四個中斷優先級之一相關。當設備從活動模式回到空閑模式,任一中斷服務請求就被激發。一些中斷還可以從睡眠模式(供電模式1-3)喚醒設備。內存仲裁器位于系統中心,因為它通過SFR總線把CPU 和DMA 控制器和物理存儲器以及所有外設連接起來。內存仲裁器有四個內存訪問點,每次訪問可以映射到三個物理存儲器之一:一個8-KB SRAM、閃存存儲器和XREG/SFR寄存器。它負責執行仲裁,并確定同時訪問同一個物理存儲器之間的順序。8-KB SRAM映射到DATA存儲空間和部分XDATA存儲空間。8-KB SRAM是一個超低功耗的SRAM,即使數字部分掉電(供電模式2 和3)也能保留其內容。這是對于低功耗應用來說很重要的一個功能。32/64/128/256 KB閃存塊為設備提供了內電路可編程的非易失性程序存儲器,映射到XDATA存儲空間。除了保存程序代碼和常量以外,非易失性存儲器允許應用程序保存必須保留的數據,這樣設備重啟之后可以使用這些數據。使用這個功能,例如可以利用已經保存的網絡具體數據,就不需要經過完全啟動、網絡尋找和加入過程。4.4、時鐘和電源管理數字內核和外設由一個1.8-V 低差穩壓器供電。它提供了電源管理功能,可以實現使用不同供電模式的長電池壽命的低功耗運行。有五種不同的復位源來復位設備。4.5、外設CC2530 包括許多不同的外設,允許應用程序設計者開發先進的應用。調試接口執行一個專有的兩線串行接口,用于內電路調試。通過這個調試接口,可以執行整個閃存存儲器的擦除、控制使能哪個振蕩器、停止和開始執行用戶程序、執行8051內核提供的指令、設置代碼斷點,以及內核中全部指令的單步調試。使用這些技術,可以很好地執行內電路的調試和外部閃存的編程。設備含有閃存存儲器以存儲程序代碼。閃存存儲器可通過用戶軟件和調試接口編程。閃存控制器處理寫入和擦除嵌入式閃存存儲器。閃存控制器允許頁面擦除和4字節編程。I/O控制器負責所有通用I/O引腳。CPU可以配置外設模塊是否控制某個引腳或它們是否受軟件控制,如果是的話,每個引腳配置為一個輸入還是輸出,是否連接襯墊里的一個上拉或下拉電阻。CPU 中斷可以分別在每個引腳上使能。每個連接到I/O引腳的外設可以在兩個不同的I/O 引腳位置之間選擇,以確保在不同應用程序中的靈活性。系統可以使用一個多功能的五通道DMA控制器,使用XDATA存儲空間訪問存儲器,因此能夠訪問所有物理存儲器。每個通道(觸發器、優先級、傳輸模式、尋址模式、源和目標指針和傳輸計數)用DMA 描述符在存儲器任何地方配置。許多硬件外設(AES內核、閃存控制器、USART、定時器、ADC 接口)通過使用DMA 控制器在SFR 或XREG 地址和閃存/SRAM 之間進行數據傳輸,獲得高效率操作。定時器1 是一個16 位定時器,具有定時器/PWM 功能。它有一個可編程的分頻器,一個16 位周期值,和五個各自可編程的計數器/捕獲通道,每個都有一個16 位比較值。每個計數器/捕獲通道可以用作一個PWM輸出或捕獲輸入信號邊沿的時序。它還可以配置在IR產生模式,計算定時器3 周期,輸出是ANDed,定時器3 的輸出是用最小的CPU 互動產生調制的消費型IR 信號。MAC定時器(定時器2)是專門為支持IEEE 802.15.4 MAC或軟件中其他時槽的協議設計。定時器有一個可配置的定時器周期和一個8 位溢出計數器,可以用于保持跟蹤已經經過的周期數。一個16 位捕獲寄存器也用于記錄收到/發送一個幀開始界定符的精確時間,或傳輸結束的精確時間,還有一個16 位輸出比較寄存器可以在具體時間產生不同的選通命令(開始RX,開始TX,等等)到無線模塊。定時器3 和定時器4 是8 位定時器,具有定時器/計數器/PWM 功能。它們有一個可編程的分頻器,一個8 位的周期值,一個可編程的計數器通道,具有一個8 位的比較值。每個計數器通道可以用作一個PWM 輸出。睡眠定時器是一個超低功耗的定時器,計算32-kHz 晶振或32-kHz RC 振蕩器的周期。睡眠定時器在除了供電模式3 的所有工作模式下不斷運行。這一定時器的典型應用是作為實時計數器,或作為一個喚醒定時器跳出供電模式1 或2。ADC支持7到12位的分辨率,分別在30 kHz或4 kHz的帶寬。DC和音頻轉換可以使用高達八個輸入通道(端口0)。輸入可以選擇作為單端或差分。參考電壓可以是內部電壓、AVDD 或是一個單端或差分外部信號。ADC 還有一個溫度傳感輸入通道。ADC 可以自動執行定期抽樣或轉換通道序列的程序。隨機數發生器使用一個16 位LFSR 來產生偽隨機數,這可以被CPU 讀取或由選通命令處理器直接使用。例如隨機數可以用作產生隨機密鑰,用于安全。AES加密/解密內核允許用戶使用帶有128位密鑰的AES算法加密和解密數據。這一內核能夠支持IEEE 802.15.4 MAC 安全、ZigBee 網絡層和應用層要求的AES 操作。一個內置的看門狗允許CC2530 在固件掛起的情況下復位自身。當看門狗定時器由軟件使能,它必須定期清除;否則,當它超時就復位它就復位設備。或者它可以配置用作一個通用32-kHz定時器。USART 0和USART 1每個被配置為一個SPI主/從或一個UART。它們為RX和TX提供了雙緩沖,以及硬件流控制,因此非常適合于高吞吐量的全雙工應用。每個都有自己的高精度波特率發生器,因此可以使普通定時器空閑出來用作其他用途。4.6、無線設備CC2530 具有一個IEEE 802.15.4 兼容無線收發器。RF 內核控制模擬無線模塊。另外,它提供了MCU 和無線設備之間的一個接口,這使得可以發出命令,讀取狀態,自動操作和確定無線設備事件的順序。無線設備還包括一個數據包過濾和地址識別模塊。5、軟件設計 在一個 ZigBee 應用系統中,光有硬件是沒有用的,還需要與之相匹配的軟件程序才能真正的能夠使用。無線溫度采集系統的軟件設計主要包括 ZigBee 節點間的通信程序,協調器節點組網程序。5 軟件開發環境的選擇ZigBee 協議棧:ZigBee2007ZigBee2007的開發及下載工具:TI公司的IAR軟件5.1、基于 ZigBee 無線傳感器網絡的測控系統中協調器設備的軟件設計流程如下:macEventLoop處理本任務當前優先級最高的事件macTaskInit 注冊相應事件 YES Nwk_event_loop處理本任務當前優先級最高的事件 nwk_init 注冊相應事件 YESHal_InitHalProcessevet處理本任務當前優先級最高的事件開始 注冊相應事件 YES MT_ProcessEventMT_TaskInit處理本任務當前優先級最高的事件硬件初始化osalInitTASKS系統初始化 注冊相應事件 YES APS_event_loopAPS_Init處理本任務當前優先級最高的事件 注冊相應事件 YES執行操作系統 ZDApp_InitZDAappeventlooppp處理本任務當前優先級最高的事件 注冊相應事件 NO YES SAPI_ProcessEvent處理本任務當前優先級最高的事件 NOSAPI_Init 注冊相應事件 YES5.2、無線接收串口轉發流程圖如下:SerialApp_ProcessEventOsal_msg_receive(SerialApp_Taskid)AF_INCOMING_MSG_CMDSerialApp_ProcessMSGCmdHalUARTWriteOsal_set_event(SerialApp_TaskID,SERIALAPP_RESP_EVT)SerialApp_Resp5.3、串口接收無線轉發流程圖如下:SerialApp_CallBackSerialApp_Send()HalUARTResdAF_DataResquest發送是否成功? 結束 YES Osal_Set_event(SerialApp_TaskID,SERIALAPP SEND EVT) NO 6.源代碼如下: #include ZComDef.h#include OSAL.h#include OSAL_Nv.h#include OnBoard.h#include ZMAC.h#ifndef NONWK#include AF.h#endif/* Hal */#include hal_lcd.h#include hal_led.h#include hal_adc.h#include hal_drivers.h#include hal_assert.h#include hal_flash.h#include stdio.h/ Maximun number of Vdd samples checked before go on#define MAX_VDD_SAMPLES 3 /電壓檢測#define ZMAIN_VDD_LIMIT HAL_ADC_VDD_LIMIT_4 /正常電壓極限值extern bool HalAdcCheckVdd (uint8 limit); /設備啟動前的芯片電壓檢測函數static void zmain_dev_info( void );static void zmain_ext_addr( void );static void zmain_vdd_check( void );#ifdef LCD_SUPPORTEDstatic void zmain_lcd_init( void );#endif/* * fn main * brief First function called after startup. * return dont care */int main( void ) / Turn off interrupts osal_int_disable( INTS_ALL ); /關閉所有中斷 EA=0/ Initialization for board related stuff such as LEDs HAL_BOARD_INIT(); /初始化系統時鐘 、LED所使用的IO等/ Make sure supply voltage is high enough to runzmain_vdd_check(); /檢測芯片電壓是否正常/ Initialize board I/OInitBoard( OB_COLD ); /初始化LED的IO/ Initialze HAL driversHalDriverInit(); /初始化芯片各個硬件模塊(包括LCD)/ Initialize NV Systemosal_nv_init( NULL ); /初始化FLASH存儲 / Initialize the MAC ZMacInit(); /初始化MAC層 / Determine the extended address zmain_ext_addr(); /形成節點MAC地址/ Initialize basic NV items zgInit(); /初始化一些非易失變量#ifndef NONWK/ Since the AF isnt a task, call its initialization routineafInit(); /初始化應用框架層#endif/ Initialize the operating systemosal_init_system(); /初始化操作系統 / Allow interruptsosal_int_enable( INTS_ALL ); /使能全部中斷/ Final board initializationInitBoard( OB_READY ); /初始化按鍵 / Display information about this devicezmain_dev_info(); /在液晶上顯示設備IEEE信息/* Display the device info on the LCD */#ifdef LCD_SUPPORTED zmain_lcd_init(); /在LCD上顯示該設備的信息#endif#ifdef WDT_IN_PM1/* If WDT is used, this is a good place to enable it. */WatchDogEnable( WDTIMX );#endifosal_start_system(); / No Return from herereturn 0; / Shouldnt get here. /* * fn zmain_vdd_check * brief Check if the Vdd is OK to run the processor. * return Return if Vdd is ok; otherwise, flash LED, then reset */static void zmain_vdd_check( void ) /檢測設備電壓 uint8 vdd_passed_count = 0; bool toggle = 0; / Repeat getting the sample until number of failures or successes hits MAX / then based on the count value, determine if the device is ready or not while ( vdd_passed_count MAX_VDD_SAMPLES ) /電壓正常情況下,檢查3次 if ( HalAdcCheckVdd (ZMAIN_VDD_LIMIT) ) /設置電壓正常的極限值 并使用AD檢測電壓 vdd_passed_count+; / Keep track # times Vdd passes in a row MicroWait (10000); / Wait 10ms to try again else vdd_passed_count = 0; / Reset passed counter MicroWait (50000); / Wait 50ms MicroWait (50000); / Wait another 50ms to try again /* toggle LED1 and LED2 */ if (vdd_passed_count = 0) if (toggle = !(toggle) HAL_TOGGLE_LED1(); else HAL_TOGGLE_LED2(); /* turn off LED1 */ HAL_TURN_OFF_LED1(); HAL_TURN_OFF_LED2();/* * fn zmain_ext_addr * * brief Execute a prioritized search for a valid extended address and write the results * into the OSAL NV system for use by the *system. Temporary address not saved to NV. * input parameters * None. * output parameters * None. * return None.* */static void zmain_ext_addr(void) uint8 nullAddrZ_EXTADDR_LEN = 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF; uint8 writeNV = TRUE;/ First check whether a non-erased extended address exists in the OSAL NV. if (SUCCESS != osal_nv_item_init(ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL) | (SUCCESS != osal_nv_read(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress) | (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN) / Attempt to read the extended address from the location on the lock bits page/ where the programming tools know to reserve it. HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN); if (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN) / Attempt to read the extended address from the designated location in the Info Page. if(!osal_memcmp(uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), nullAddr, Z_EXTADDR_LEN) osal_memcpy(aExtendedAddress, (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN); else / No valid extended address was found. uint8 idx; #if !defined ( NV_RESTORE ) writeNV = FALSE; / Make this a temporary IEEE address#endif/* Attempt to create a sufficiently random extended *address for expediency.* Note: this is only valid/legal in a test environment *and must never be used for a commercial product. */ for (idx = 0; idx (Z_EXTADDR_LEN - 2);) uint16 randy = osal_rand(); aExtendedAddressidx+ = LO_UINT16(randy); aExtendedAddressidx+ = HI_UINT16(randy); / Next-to-MSB identifies ZigBee devicetype.#if ZG_BUILD_COORDINATOR_TYPE & !ZG_BUILD_JOINING_TYPE aExtendedAddressidx+ = 0x10;#elif ZG_BUILD_RTRONLY_TYPE aExtendedAddressidx+ = 0x20;#else aExtendedAddressidx+ = 0x30;#endif / MSB has historical signficance. aExtendedAddressidx = 0xF8; if (writeNV) (void)osal_nv_write(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress); / Set the MAC PIB extended address according to results /from above. (void)ZMacSetReq(MAC_EXTENDED_ADDRESS, aExtendedAddress);/* * fn zmain_dev_info * brief This displays the IEEE (MSB to LSB) on the LCD. * input parameters * None. * output parameters * None. * return None.* */static void zmain_dev_info(void)#ifdef LCD_SUPPORTED uint8 i; uint8 *xad; uin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論