a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 設計應用 > 基于AVR單片機的多任務嵌入式Internet系統設計

基于AVR單片機的多任務嵌入式Internet系統設計

——
作者:魏強 李欣 時間:2007-01-26 來源:《EDN電子設計技術》 收藏

1 引言

本文引用地址:http://www.j9360.com/article/21432.htm

目前,嵌入式系統已經廣泛滲透到人們的工作、生活中。從家用電器、信息終端、手持通信設備到儀器儀表、制造工業、過程控制等領域,嵌入式設備已隨處可見。另一方面,近幾年來internet技術的飛速發展給嵌入式應用帶來了新的契機,在未來嵌入式系統中應用internet技術具有很大的優勢。

目前嵌入式internet技術的實現主要有下面三種方式 :

第一種方式是emit技術,采用支持tcp/ip協議的高性能服務器作為網關(emgateway), 嵌入式設備通過rs-232、rs-485或者can總線等與網關服務器連接,間接通過服務器網關連接internet。經過多年的發展emit技術已經在工業設備的網絡化中得到了廣泛的應用。但該技術也存在著以下的缺點:由于需要使用高性能的網關服務器,再加上emgateway網關的使用需要繳納相應的版稅,從而使得成本很高;而且網關和設備之間需要專門布線,在嵌入式設備比較分散的情況下極為不便,通信的距離、速度都受到一定的限制。

第二種方式是采用硬件協議棧芯片進行網絡連接,比如seiko公司的s7600,嵌入式mcu通過接口對其進行控制以達到internet通信的目的,這時軟件只需要增加一段和協議棧芯片通信的接口程序即可,因此開發難度小、周期短。其缺點是系統的硬件成本非常高,而且由于使用的是硬件協議棧,擴展不靈活。

第三種方式是在嵌入式mcu上用軟件實現tcp/ip協議棧,然后通過網絡接口芯片連接internet。在這種方式中由于使用了軟件協議棧使得嵌入式mcu本身具有了internet通信能力,從而省去了高性能網關和硬件協議棧芯片,因此成本非常低,而且擴展起來非常方便靈活,再配上小型嵌入式實時操作系統的支持,就可以實現性價比很高的嵌入式多任務internet平臺。但是要在資源有限的16位甚至8位單片機上實現復雜的操作系統和網絡協議棧有一定難度,但近年來隨著單片機處理速度的不斷提高和內部資源的不斷擴展,再加上小型的實時操作系統和網絡協議棧的相繼推出,使得利用單片機來實現低成本嵌入式多任務網絡平臺成為可能。

基于以上背景,本文就來介紹應用在研究課題“低碼率視頻信號的網絡傳輸”系統中的一種基于avr單片機的多任務嵌入式網絡系統軟硬件平臺的設計。

2 硬件平臺設計

考慮到以太網接入方式技術成熟、可靠性高、通信速度快和成本低的優點,本系統的硬件平臺采用單片機加以太網接口控制芯片組成。由于操作系統和協議棧需要用到大量的數據存儲器,因此需要外擴ram存儲器。為了提高通信性能,單片機與以太網接口芯片之間采用并行總線擴展方式進行連接,接口芯片和外部的ram存儲器統一編址。本系統采用了可編程gal器件atf16v8進行地址譯碼,這樣不僅可以充分利用地址資源,而且只需要修改atf16v8的源程序即可實現地址的改變,提高了系統的擴展能力。系統的硬件平臺的原理框圖如圖1所示。


圖1:硬件平臺系統框圖 單片機選用高性能的avr單片機atmega128。avr是atmel公司結合了成熟的51系列和pic系列單片機的優點而推出的高性能8位單片機,具有以下特點 :

l 性價比高: avr單片機內部集成了8路10位的adc、pwm、e2prom、wdt、rtc等,具有了片上系統(soc)的雛形,大幅度降低了系統的整體體積和成本。

速度快:avr單片機采用了先進的risc體系架構,大多數指令可以在一個時鐘周期內完成,理論上速度可以達到1mips/mhz。而且具有只需要兩個時鐘周期的硬件乘法器。

l 接口豐富:avr單片機除可以進行并行擴展外,還具有usart、spi和i2c串行總線。

l isp&iap:其內部的可擦寫flash存儲器不僅可以進行在線下載,而且具有片上的boot程序實現在應用可編程,真正實現同時讀寫操作。

l 開發方便:avr是第一款真正為c語言開發設計的單片機,具有多種編譯器。而且具有jtag接口,可以進行在線調試。

l 低功耗:avr單片機具有六種睡眠模式,可以最大程度的降低系統的功耗。 以太網接口控制芯片采用realtek公司生產的以太網接口控制器rtl8019as ,其10m處理能力對于本課題需要的碼率為4mbps視頻流的網絡傳輸來說完全滿足要求。另外8019as片內集成了16kbyte的ram用作發送和接收的緩沖區,對其訪問可以使用遠程dma方式,從而大幅提高接口的通信能力。需要注意的是,由于atmega128數據總線是8位,rtl8019as的iocs16b引腳應當下拉接地以選擇8位總線方式,而且jp引腳要接高電平以選擇跳線模式。

地址譯碼采用的是atf16v8,具體是把mcu地址線的高8位作為16v8的譯碼輸入,16v8的3位輸出作為譯碼片選輸出:低端ram(32kb)、高端ram(32kb)和8019as的片選。由于8019as的地址空間僅需要32byte,而且與高端ram的地址重疊,為了給ram分配盡可能多的地址空間,為8019as分配頂部的256byte,而把剩余的地址空間全部分配給ram。上述譯碼的cupl描述如下:

cs_ram_l = ! a15;

cs_ram_h = a15 & ! (a14 & a13 & a12 & a11 & a10 & a9 & a8);

cs_8019 = a15 & a14 & a13 & a12 & a11 & a10 & a9 & a8;

3 操作系統移植

uc/os-ii是一個專門為中小型嵌入式應用設計的搶占式的實時操作系統內核,具有源代碼公開、移植性好、可裁減、可固化、實時性和安全穩定性高的特點 ,非常適合本系統的應用。uc/os-ii的系統框圖如圖2所示。

uc/os-ii與硬件平臺無關的代碼文件:ucos_core.c、ucos_ii.c等

uc/os-ii配置代碼文件:includes.h 、os_cfg.h


圖2:uc/os-ii的系統框圖 在設計之初就充分考慮了移植性,移植起來非常方便。從圖2可以看出,與移植有關的只有3個文件:os_cpu.h,os_cpu_c.c和os_cpu_a.s。

第1個文件是os_cpu.h,其中主要定義了一些與編譯器有關的數據類型、堆棧的生長方向、臨界代碼區的保護方式。需要說明的是uc/os-ii中臨界代碼區的保護方式有3種,本設計采用第3種,即在進入臨界區之前把cpu狀態寄存器sreg的內容保存到一個局部變量cpu_sr中,在退出臨界區之后再還原sreg,這樣做的好處是臨界區保護不會對sreg產生影響。其中sreg的保存和返回函數必須由匯編語言來寫,放在os_cpu_a.s文件中。

第2個文件os_cpu_c.c中主要是任務堆棧初始化函數ostaskstkinit(),任務創建時調用此函數來初始化任務的堆棧結構。該函數一開始把傳入的任務函數的指針存放到硬件堆棧的棧頂,看上去就像該函數在執行過程中發生了中斷一樣(低字節在先),這樣返回后就可以從新的任務開始執行了。需要特別注意的是,在這個函數中必須把cpu狀態寄存器sreg的值設為0x80,也就是全局中斷使能,否則系統將崩潰。

最后一個文件os_cpu_a.s是一個匯編源文件,主要定義了6個匯編函數。首先是臨界區保護用到的sreg保存和恢復函數。然后定義的是osstarthighrdy()函數,它只在系統啟動時由osstart()函數調用一次,所做的工作主要是讓系統從最高優先級的任務開始執行,實現的方法和后面要介紹的osctxsw()函數相似。osctxsw()函數實現的是任務級的切換,首先把當前的任務的狀態保存到其任務控制塊tcb中,然后把當前優先級最高的任務的tcb中的內容加載到工作寄存器中,這樣函數返回后就可以從此任務開始執行了。接下來的osintctxsw()函數實現的是中斷級的任務切換,它和osctxsw()函數的唯一不同是它是在中斷中調用的,因此不需要保存工作寄存器的內容,剩下的和任務級的切換過程完全一樣。最后一個定義的是節拍時鐘的中斷服務子程序,在這個函數中的開始要令中斷欠套全局變量加1,并且調用時鐘管理函數ostimetick(),中斷退出時調用系統提供的中斷退出函數osintexit()。

4 網絡平臺設計

lwip是一套專門為嵌入式系統設計的源碼開放的輕型協議棧,最新版本是lwip1.1.0。lwip在保持tcp/ip協議基本要求的前提下,通過層與層之間共享內存,避免了許多繁瑣的復制處理,這樣做雖然破壞了嚴格的分層思想,但卻大幅度地節省了代碼和數據存儲空間,因此非常適合嵌入式應用。與其他輕型協議棧不同的是,lwip不僅支持一般的網絡協議,比如udp協議、dhcp協議、ppp協議等,而且還支持多網絡接口、ipv6和標準api 。


圖3:lwip運行機制 4.1 lwip在uc/os-ii上的移植

針對uc/os-ii和avr的icc編譯器,lwip的移植只需要編寫arch文件夾下的3個文件——cc.h、sys_arch.h和sys_arch.c。其中cc.h中有與cpu和編譯器有關的定義,包括數據結構和大小端存儲方式等。其中關鍵代碼區的保護用uc/os-ii中的相應函數替換一下即可。剩下的兩個與操作系統有關的文件是移植工作的重點。

為了增強移植性,lwip專門把和操作系統有關的數據結構和函數放在一起組成操作系統封裝層,為諸如定時、進程同步和消息傳遞等操作系統服務提供統一的接口,移植時僅需針對不同的操作系統來實現特定的操作系統封裝層,這些是由sys_arch.h和sys_arch.c實現的。其中sys_arch.h主要定義與操作系統相關的數據結構——信號量、郵箱和進程號,這些在uc/os-ii中都有對應的實體,要注意的是lwip中的郵箱對應于uc/os-ii中的消息隊列。

sys_arch.c中要實現和操作系統有關函數的定義,包括系統的初始化以及信號和郵箱的操作——創建、刪除、投遞和等待,這些功能只需要用uc/os-ii中相應的函數進行重新封裝即可。另外,tcp/ip協議棧中需要許多定時器的功能,這在lwip中是用sys_timeout結構體隊列和相應的函數實現的 。每個sys_timeout結構體包括本線程的timeout時間長度,以及超時后的回調處理函數。sys_arch.c中sys_arch_timeouts()函數的功能就是返回當前進程所對應的sys_timeout結構體隊列的頭指針。本系統用的方法是在系統初始化的時候根據最大的lwip進程數創建一個sys_timeout結構體指針的數組,以后每創建一個lwip進程其優先級都從一個連續的已知區間進行分配,sys_arch_timeouts()函數通過調用ostaskquery()函數獲得進程的優先級進而獲得對應的sys_timeout結構體隊列的頭指針。

4.2 rtl8019as驅動程序的編寫

rtl8019as驅動程序做的工作主要是8019as的初始化、發送和接收以太網數據包。

初始化函數rtl8019_init()是在添加以太網絡接口時由netif_add()函數調用,調用過程中首先初始化此接口對應的全局網絡接口結構體,然后設置8019as的各功能寄存器 。初始化完8019as之后調用arp_init()函數啟動arp功能,然后用sys_timeout()函數啟動arp緩沖列表生命周期的定時器。

數據包的發送首先從arp緩沖隊列中查找目的mac地址,然后構造以太網數據幀的頭部,最后調用底層的發送函數low_level_output()將數據幀發送出去。如果找不到對應的ip/mac項,發送arp請求數據幀。數據包的接收由中斷處理函數rtl8019_isr()調用,它的執行過程是先調用最底層的接收函數low_level_input()從8019as中接收數據幀,如果接收的是ip數據包,則更新arp緩沖隊列并把數據包傳給網絡接口結構指定的函數進行處理。如果接收的是arp數據包,則調用etharp_arp_input()函數處理。為了提高性能,最底層的接收發送函數采用的都是8019as的遠程dma工作方式 。

5 總結

嵌入式設備與internet的結合代表著嵌入式系統的未來發展方向,目前已有不少科研機構和公司紛紛加入了嵌入式internet技術的研究行列。在這種背景之下,本文設計了一種基于8位avr單片機的多任務嵌入式internet系統平臺,并且已經應用在研究課題“低碼率視頻信號的網絡傳輸”系統中,對于嵌入式internet技術的推廣應用具有參考意義。本文作者創新點:將實時嵌入式操作系統和輕型tcp/ip協議棧結合起來,應用在8位avr單片機上,實現了低成本的多任務嵌入式網絡系統平臺。




關鍵詞:

評論


相關推薦

技術專區

關閉