陳 海 陳宇珂 潘澤森 丁效軍 張興安
基于實時操作系統的ATmega128串行通信驅動程序設計*
陳 海①陳宇珂②*潘澤森②丁效軍②張興安③
目的:基于實時操作系統uCOS-II進行ATmega128串行通信驅動程序設計,作為智能化靜脈麻醉靶控模塊通信的一部分,與藥物注射機械控制系統協同運行,以提高整個藥代動力學目標控制注射系統的運行效率和實時性。方法:根據ATmega128微處理器USART特點,采用信號量、消息郵箱及環形緩沖隊列,設計串口通信驅動模塊。結果:串口驅動通信模塊采用信號量、消息郵箱及環形緩沖區解決CPU快速處理和外部慢速通信接口的速度配合問題,并利用信號量和消息郵箱,實現串口通信中斷服務與數據處理任務間數據傳輸的同步性和實時性。結論:通過實驗驗證了在多種不同通信速率下串行通信驅動模塊數據傳輸的可靠性,該傳輸模塊數據傳輸具有誤碼率低、傳輸穩定可靠的特點。
實時操作系統uCOS-II;信號量;消息郵箱;串行通信;驅動程序;靜脈麻醉輸注系統
[First-author’s address] Department of Radiation Oncology, General Hospital of Guangzhou Military Command of PLA, Guangzhou 510010, China.
醫療設備在嵌入式應用中,使用實時操作系統(real time operator system,RTOS)可以加快系統程序的開發速度,更加合理和有效地使用系統各類資源,縮短系統開發時間,使得整個系統的實時性、可靠性得到極大的保證。據EEtimes雜志統計,目前嵌入式市場常用的RTOS有FreeRTOS、Microsoft XP Embedded、VxWorks、Linux以及RTX等數十種,其中uCOS是一個輕量級的實時操作系統內核,具有任務管理、時間管理、信號量及內存管理等功能,可以根據系統開發需要移植裁剪,方便地移植到各種嵌入式系統上使用[1-3]。為此,本研究基于實時操作系統uCOS-II進行ATmega128串行通信驅動程序設計。
1.1實時操作系統uCOS-II
根據相關微處理器的特點對實時操作系統uCOSII的源代碼根據功能需要進行合適的裁減,設置與處理器及編譯器相關代碼,可以非常快捷地在不同框架微處理器、微控制器和數字信號處理器上應用。自1992年以來,uCOS以其高度的可靠性、魯棒性以及安全性,在家用電子設備、醫療儀器及航空航天電子產品各種應用中被廣泛使用[4-6]。
1.2串口通信驅動模塊設計
隨著嵌入式系統的發展,系統間的數據通信越來越頻繁和重要,尤其是串口通信所需接口數少,接線簡單,可實現遠距離通信。但是uCOS-II僅是一個實時多任務操作系統內核,需要根據嵌入式微處理器與各種外設擴展的實際情況,利用實時內核提供的功能,結合硬件特點,編寫應用程序接口函數,進行硬件接口驅動模塊程序設計。ATmega128通用異步同步串行通信接口USART是單片機與外部設備進行串行信息交換的重要組件,基于USART的RTOS串口通信驅動模塊,需結合uCOS-II嵌入式操作系統,基于信號量、消息郵箱,利用環形緩沖區數據結構特點進行設計。
本研究組以臨床國人靜脈麻醉藥代動力學參數研究為基礎,結合微機電、嵌入式新技術設計便攜式靜脈麻醉智能儀器。系統主要從嵌入式系統的硬件設計、系統軟件設計和應用層軟件設計三個方面開展研發工作,系統硬件結構如圖1所示。
2.1系統構建
2.1.1ATmega128微處理器及其USART硬件模塊
美國ATMEL公司ATmega128是一款基于AVR RISC(精簡指令集)結構的CMOS微處理器,具有低成本、低功耗及高性能的特點[7-8]。ATmega128單片機穩定性極高,應用非常廣泛,在工業控制電子設備領域、通信網絡設備以及智能化電子醫療儀器等嵌入式領域中得到廣泛應用[9-16]。
ATmega128具有2個可編程的通用同步、異步串行接收器和轉發器:USART0和USART1,USART0和USART1具有不同的I/O寄存器。ATmega128串行通訊硬件的主要特點有:①串行接收寄存器和發送寄存器互相獨立,可以非常方便地進行全雙工操作;②可靈活選擇異步傳輸和同步傳輸模式,支持多個數據位;③奇偶校驗操作、數據過速及幀錯誤檢測得到硬件支持,可提高數據傳輸的準確性;④硬件提供發送結束中斷、發送數據寄存器空中斷和接收結束中斷[17]。
2.1.2uCOS-II實時操作系統
uCOS-II是開放的占先式實時系統內核,通過已經準備就緒的高優先級任務,剝奪正在運行的低優先級任務的CPU使用權,保證了高優先級任務的實時運行。uCOS-II將信號量、消息隊列、消息郵箱、事件標志組和互斥信號量統一看作事件,系統根據以上事件發生與否決定各個任務的狀態,事件可以是系統中斷發出的,也可以由其他任務發出。uCOS-II事件來自中斷服務函數、系統延時時間到達設置時間值和其他任務發送三個方面,信號量和消息郵箱是系統設計中常用的事件,在中斷與任務和任務與任務同步以及數據傳遞過程中應用最為廣泛[18-19]。
2.1.3信號量
uCOS-II的信號量(semaphores)廣泛用于任務間對共享資源的互斥訪問,任務與中斷服務程序間、任務與任務間的同步,其提供了行為同步時刻的信息。uCOS-II的信號量包括互斥信號量和計數信號量兩種:①互斥信號量是一個二值信號,只能是0或1,用于資源同步,在程序中實現對共享資源的互斥訪問;②計數信號量取值是一個16位無符號整形數,計數范圍為0~65535,計數信號量不僅可用于資源同步,還可實現任務之間、中斷與任務之間的同步。計數信號量標志同步事件的發生次數或者已發生事件的數量,表達資源的可用數量。

圖1 ATmega128微處理器和uCOS-II實時操作系統硬件結構圖
uCOS-II信號量相關函數包括OSSemCreate()、OSSemPend()和OSSemPost()3個。OSSemCreate()函數初始化信號量,OSSemPend()函數由于任務中等待信號量,OSSemPost()函數在任務或中斷服務程序中發送信號量。信號量最好在系統初始化過程中創建,并根據需要給信號量賦初值。
2.1.4消息郵箱
消息用于任務之間傳遞信息,當同步過程中需要傳輸具體內容時就不能使用信號量,可以選擇消息郵箱通過內核服務發送消息。uCOS-II的消息郵箱(message mail boxes)基于事件控制塊結構OS_ EVENT,是事先定義好的數據結構,包含需要傳遞的參數,一個郵箱存放一條信息。uCOS系統中OSMboxCreate()進行郵箱初始化(initialize),或者稱為建立郵箱(create),初始值為NULL,也可以包含一條信息,使其最開始就初始化為包含一條消息;OSMboxPost()函數將消息放入郵箱,如果該郵箱已有數據,則返回郵箱已滿錯誤碼;如果郵箱為空,有任務在等待消息郵箱的消息,則馬上通過內核服務將消息傳遞給等待消息的任務列表中優先級最高的任務,然后進行任務調度,判斷當前運行的任務是否仍為處于最高優先級就緒態,否則將消息發送給最先等待的任務。OSMboxPend()函數允許用戶定義超時等待時間,避免無休止等待。
2.1.5環形隊列緩沖區
在計算機語言中隊列是常用的一種數據結構,在數據傳輸和處理中應用廣泛,將隊列采用環形緩沖技術構造為首尾相互連接的結構形式,形成環形緩沖區。環形緩沖區在嵌入式系統中具有重要作用,尤其是在多任務系統中,運用信號量實現緩沖區的互斥訪問,可以有效提高程序效率,避免任務間競爭,防止數據讀寫錯誤[20]。
2.2串口通信模塊軟件設計
在完成uCOS-II實時系統基于ATmega128移植的基礎上,根據靜脈麻醉靶控模塊與輸注控制模塊之間以串行通信進行數據交換的需求,進行USART設備驅動程序設計。由于uCOS-II作為實時內核,提供了實時操作系統內核基本功能,但在進行項目系統整體設計時,需要根據硬件結構和功能需求進行驅動及應用程序設計[21-22]。
在實時操作系統中,串行通信接口是一種異步通訊設備,在進行接收發送程序設計時,加入軟件緩沖區,在串口發送和接收數據時,系統有更重要任務需要處理時,來不及處理這些數據,可先將數據存入緩沖區,使數據不會發生丟失。為此,從內存中開辟2個定義為環形隊列的數據結構作為緩沖區,分別作為串口數據收發的發送緩沖區和接收緩沖區。發送和接收環形緩沖區由首尾相接的數據隊列、環形緩沖區字節計數器、指向環形緩沖器中將被放置下個字節的指針和指向環形緩沖區將被讀取的下一字節的指針4個要素。
本研究采用uCOS-II實時操作系統信號量實現串口通信發送、接收任務和中斷服務程序的同步,用戶任務使用串口通信時不必關心串口的實現,只需將需要發送的數據寫入發送緩沖區,串口自行從發送緩沖區取出數據,調用中斷發送程序送出數據。串口接收到的數據通過接收中斷服務程序接收存入接收緩沖區中,每接收到一個字節,向等待接收緩沖區數據的應用程序發信號。
2.2.1USART初始化
實時系統中USART通信模塊初始化包括了模塊中所有變量的初始值設置,在系統調用用戶任務創建函數前的調用,一般可以在串口任務創建時調用。初始化時環形緩沖區讀寫指針一般初始化為0,指向環形緩沖區隊列頭部。數據接收任務中的接收信號量在初始化時設置為0,數據發送信號量初始化值可以根據發送環形緩沖隊列的大小進行設置。
完成所有相關變量的初始化后,進行USART硬件初始化設置,設定傳輸模式、波特率、數據幀格式以及開啟發送接收中斷。USART0的控制和狀態寄存器有UCSR0A,UCSR0B,UCSR0C,波特率寄存器為UBRR0,即UBRR0H和UBRR0L,數據收發寄存器為UDR0。初始化時,或者在改變USART的設置時必須在無數據傳輸的情況下進行,TXC標志位檢驗一個數據幀發送是否完成,RXC標志位檢驗接收緩沖器是否還有數據未讀出,在每次發送數據即寫發送數據寄存器UDR前,TXC標志位必須清零。
2.2.2USART串行通信模塊讀取操作
串口通信數據接收過程包括:USART接收器接收到一個數據幀后觸發接收中斷,中斷服務程序ISR讀取接收到的內容并保存,經過一次或若干次ISR完成通信幀的接收(拼裝數據幀),發送信號觸發處理和解釋通信內容的任務,然后根據處理結果觸發其他相關任務。
ATmega128啟動USART接收器通過置位UCSRB寄存器的接收允許標志位RXEN完成,如果USART接收器接收檢測到有效起始位,便啟動數據接收,直到接收到一幀數據的第一個停止位為止,然后將接收到的數據傳入接收移位寄存器。如有第二個停止位,則會被接收器忽略。這時移位寄存器中的內容將轉移到USART硬件接收緩沖器中。USART接收器通過接收結束標志RXC表明硬件接收緩沖器中是否含有未讀出的數據。RXC為1時,緩沖器中有數據,為0時接收緩沖器為空。在USART硬件初始化中置位UCSRB的接收結束中斷使能位RXCIE后,只要RXC標志位置1,在全局中斷使能的情況下,將產生USART接收結束中斷,在中斷服務程序中讀取UDR寄存器就可以獲得接收緩沖器的內容并清除RXC標志。ATmega128微處理器USART接收器具有的幀錯誤FE、數據溢出DOR、奇偶檢驗錯UPE標志位于寄存器UCSRA中,在中斷服務程序中必須在接收緩沖區讀取之前先讀取,通過這3個錯誤標志位的判斷,可以更好地保證接收數據的準確性。
基于uCOS-II的串口讀寫模塊由接收數據讀取任務和接收中斷服務程序兩部分組成。在串口硬件接收數據完成后,串口數據接收中斷服務程序ISR首先讀取寄存器UCSRA后,再讀取數據寄存器UDR中接收到的數據。判斷有無數據幀、奇偶檢驗及溢出錯誤,同時通過比較環形隊列緩沖區中當前字節數的變量RxBuffer,判斷環形隊列接收緩沖區是否已存滿。如果未滿,則將接收數據寫入串口通信模塊數據接收環形緩沖區寫入指針指向的位置,數據寫入后環形緩沖區寫入指針和指示變量RxBuffer加1,如果寫入指針等于緩沖區大小,則置0。完成上述操作后,通過發送接收完成信號量啟動接收數據讀取任務。接收數據讀取任務啟動后處于等待狀態,等候數據接收完成信號量的到來,此時OSSemPend()函數中的超時等待量設為0,表示無限期等待。任務接收到接收完成信號量后,將環形緩沖區當前讀取指針指向的數據讀出,隨后指針加1,如果指針數等于緩沖區大小,則重新置0,重新指向環形緩沖區頭。串行通信數據讀取任務流程和中斷服務程序如圖2、圖3所示。

圖2 串行通信數據讀取任務流程圖

圖3 讀取中斷服務程序流程圖
在整個接收過程中,USART一旦接收到數據,硬件將觸發接收中斷,如果這個時候環形緩沖區數據已滿,需要丟棄接收到的字符,所以在緩沖區的大小設置時,需要根據實際合理設置,這樣可以降低數據丟失,又避免設置太大導致內部存儲空間的浪費,增加系統開銷。
2.2.3USART串行通信模塊發送操作
ATmega128微處理器通過置位UCSRB寄存器的發送允許位TXEN使能USART數據發送,任務根據需要寫入數據到發送緩沖器,啟動數據發送。USART在移位寄存器空閑或前一幀數據的最后一個停止位傳送結束,將發送緩沖器中的數據加載到移位寄存器,完成數據發送。
USART發送器有數據寄存器空標志UDRE和數據傳輸結束標志TXC,這2個標志位都可以產生中斷,在進行發送模塊設計時,本研究通過數據傳輸結束中斷發送數據。帶環形緩沖區和超時信號量的串口發送模塊包括串口數據發送任務TxTask和串口數據發送中斷服務程序TxISR兩部分。在初始化時將發送信號量值設為緩沖區大小,環形隊列緩沖區中無數據,并且關閉發送中斷。系統功能模塊啟動TxTask任務用于發送數據時,串口數據發送任務在信號量上等待。如果發送信號量不為零表示緩沖區未滿,用戶任務可以向發送緩沖區中寫入數據。如果寫入的是發送緩沖區中的第一個字節,則UCSRB中TXCIE標志置1,允許發送中斷,并將數據寫入UDR寄存器。ATmega128串口數據發送完成后自動置位TXC,觸發數據傳輸結束中斷。然后,數據傳輸結束中斷服務程序TxISR通過OSSemPost()發送信號量。當信號量事件塊中信號量計數小于環形緩沖區設置值減1時,將發送緩沖區當前讀取指針位置的數據寫入UDR,否則結束數據傳輸,關閉中斷。數據寫入UDR后環形緩沖區讀取指針加1,如果指針到達環形緩沖區尾端,則指針置為0重新指向緩沖區首端。TxISR從發送緩沖區中取出數據字節輸出至UDR,數據傳輸完成操作,緩沖區中有數據的話將觸發了下一次的發送中斷,這樣循環下去直到發送緩沖區中最后一個字節被發送任務取走。在TxISR服務程序向USART輸出數據的同時,向發送信號量發信號,發送任務通過信號量事件塊中的計數值,可以判斷環形隊列發送緩沖區中是否還有空間可寫入數據。串行通信發送任務和中斷服務程序如圖4、圖5所示。

圖4 串行通信發送任務流程圖

圖5 發送中斷服務程序流程圖
基于uCOS-II實時操作系統的ATmega128串口通信模塊,通過利用實時內核的任務調度功能以及信號量機制,實現串口收發接口模塊化封裝,使用方便,其設計思路和方法可以用于ATmega128其他外圍硬件接口程序設計。該串口通信模塊已作為智能化靜脈麻醉靶控模塊通信的一部分,與藥物注射機械控制系統協同運行,可提高整個藥代動力學目標控制注射系統的運行效率和實時性[22]。
[1]張文君,陳香蘭,李曦.嵌入式實時操作系統的分析評測方法[J].計算機系統應用,2014,24(1):28-34.
[2]呂阿璐.基于RTX的大容量實時數據管理系統設計[J].計算機與現代化,2013(7):235-238.
[3]潘應進,朱子元.基于ThreadX實時操作系統的USB設備驅動開發[J].工業控制計算機,2016,29(2):30-32.
[4]郝玉勝,逯玉蘭.基于嵌入式網絡通信模塊[J].計算機與現代化,2014(2):142-146.
[5]李化云.嵌入式實時操作系統在航天器軟件中的應用研究[J].微計算機信息,2012,28(8):73-74.
[6]謝檬,張一寧,王娟.基于AVR單片機的電動執行器控制模塊檢測儀的設計[J].計算機測量與控制,2015,23(10):3570-3573.
[7]李運堂,吳進田,梁宏民,等.基于AVR的靜壓氣體軸承性能檢測裝置控制系統設計[J].計算機測量與控制,2015,23(1):113-114.
[8]趙春雷,孫會琴.基于AVR單片機的肌電信號生物反饋測試儀的設計[J].醫學裝備,2012,25(12):6-9.
[9]劉曉軍,蔡玉文,蔡玉武,等.基于AVR左心室磁懸浮輔助裝置的轉子測量系統[J].北京生物醫學工程,2014,33(4):412-414.
[10]陳倩,嚴榮國,葛斌,等.基于玻意耳定律的模擬肺及其溫度補償系統[J].中國醫學物理學雜志,2016,33(1):83-87.
[11]陳曉艷,高娜娜,黃華芳.數字式生物電阻抗與電阻抗斷層成像測量系統[J].生物醫學工程學雜志,2015,32(3):575-580.
[12]陳宇珂,張興安,張延武,等.智能化靜脈麻醉靶控系統的研制[J].中國醫學裝備,2005,2(8):22-23.
[13]潘佚,邱蕾.國產便攜式血糖儀功能改進及低功耗設計[J].現代儀器與醫療,2013,19(1):38-40.
[14]孟倩,鄭利星,郭紅蕊,等.胎心聲音存儲回放系統設計[J].生物醫學工程與臨床,2013,17(2):184-186.
[15]吳北江,王洋,孫文橋,等.網絡化平戰兩用數字心電信息系統的設計與實現[J].醫療衛生裝備,2010,31(6):48-50.
[16]耿德根,宋建國,馬潮,等.AVR高速嵌入式單片機原理與應用[M].北京:北京航空航天大學出版社,2003.
[17]晨風.嵌入式實時多任務軟件開發基礎[M].北京:清華大學出版社,2004.
[18]羅蕾.嵌入式實時操作系統及應用開發[M].北京:北京航空航天大學出版社,2005.
[19]林銳,韓永泉.高質量C程序設計指南[M].2版.北京:電子工業出版社,2003.
[20]袁家棟,殷興輝.基于串口的高速信號傳輸[J].微電腦應用,2015,31(12):1-2.
[21]劉亞兵,馬瑞卿,張慶超,等.基于FIFO的串口通信模式研究[J].計算機測量與控制,2014,22(7):2301-2303.
[22]陳宇珂,李爽,袁凱,等.基于LPC2478的三通道靜脈麻醉輸注系統設計[J].中國醫學裝備,2014,11(9):6-8.
Design of serial communication driver of ATmega 128 based on RTOS
CHEN Hai, CHEN Yu-ke, PAN Ze-sen, et al// China Medical Equipment,2016,13(11):98-103.
Objective: Based on real-time OS uCOS II, to design the serial communication driver module of ATmega128. Methods: Based on the characteristics of microprocessor ATmega128 USART, we use semaphores, message mailbox and circular buffer queue to design serial communication module. Results: serial port driver communication module use semaphores, message mailbox and circular buffer solution to handle the problems of speed matching between CPU and external communication interface, and also use the semaphores, mailbox to realize synchrony and real time between serial communication interrupt service and data processing tasks. Conclusion: Experiments verify the reliability of data transmission of the driver module for serial communication in a variety of different communication rate. The experiment shows that the transmission module with the characteristics of low error rate, stable and reliable transmission of data transmission.
Real time operation system uCOS-II; Semaphores; Message mailbox; Serial communication; Driving program; Intravenous anesthesia infusion system
陳海,男,(1968- ),本科學歷,主管技師。解放軍廣州總醫院放射腫瘤科,從事醫療設備維修及研發工作。
1672-8270(2016)11-0098-06
R197.324
A
10.3969/J.ISSN.1672-8270.2016.11.029
廣東省科技計劃(2012A032200023)“HL7標準三通道靜脈麻醉輸注系統關鍵技術研究”;廣東省科技計劃(2013B090500113)“智能化靜脈麻醉靶控輸注工作站的研制及產業化”
①解放軍廣州總醫院放射腫瘤科 廣東 廣州 510010
②解放軍廣州總醫院醫學工程科 廣東 廣州 510010
③解放軍廣州總醫院麻醉科 廣東 廣州 510010
chenyuke@hotmail.com
2016-08-30