一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Linux操作系統(tǒng)和處理器實(shí)現(xiàn)串口通信系統(tǒng)的設(shè)計(jì)

電子設(shè)計(jì) ? 來源:微計(jì)算機(jī)信息 ? 作者:劉智國,張海春 ? 2021-05-19 10:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 S3C2410硬件平臺(tái)簡(jiǎn)介

S3C2410是韓國三星公司生產(chǎn)的新一代高性能微處理器,它是基于ARM920T內(nèi)核的16/32位RISC處理器.主要應(yīng)用于嵌入式系統(tǒng)中。

S3C2410擁有強(qiáng)大的數(shù)據(jù)處理能力.又有著低成本.低功耗等優(yōu)點(diǎn).在各種手持及移動(dòng)設(shè)備上的應(yīng)用越來越廣泛,基于其平臺(tái)的程序功能也越來越復(fù)雜。于是,在其平臺(tái)上架構(gòu)多線程的操作系統(tǒng)已成為越來越多系統(tǒng)設(shè)計(jì)者的訴求,本文介紹多線程在S3C2410上的具體實(shí)現(xiàn)過程。

2 系統(tǒng)結(jié)構(gòu)分析

串行端口的本質(zhì)功能足作為CPU和串行設(shè)備問的編碼轉(zhuǎn)換器,一般微機(jī)內(nèi)都配有通信適配器,使計(jì)算機(jī)能夠與其他具有RS232C串口的計(jì)算機(jī)或設(shè)備進(jìn)行通信。本系統(tǒng)主要目的是實(shí)現(xiàn)宿主機(jī)與目標(biāo)機(jī)之間的近距離串行通信,采用的宿主機(jī)是Intel X86架構(gòu)的Red Hat Linux 9.03環(huán)境PC機(jī),而目標(biāo)機(jī)是ARM架構(gòu)的開發(fā)板。

本系統(tǒng)中目標(biāo)機(jī)開發(fā)板的內(nèi)核采用的是三星的S3C2410,該開發(fā)板采用核心板加底板的模式.核心板接口采用DIMM200標(biāo)準(zhǔn)連接器.工作非??煽?,可穩(wěn)定運(yùn)行在203 MHz的時(shí)鐘頻率下。其外設(shè)非常豐富.功能強(qiáng)大.完全可以滿足設(shè)計(jì)需要。串口線采用常用的RS 232C型接口模式。能實(shí)現(xiàn)計(jì)算機(jī)與開發(fā)板間的數(shù)據(jù)傳輸與控制。

3 系統(tǒng)硬件結(jié)構(gòu)原理

串行通信可以在DOS或Windows環(huán)境下進(jìn)行。可以用匯編或高級(jí)語言編寫通信程序,本文介紹如何在Linux操作系統(tǒng)下來實(shí)現(xiàn)串口間的通信。

在串口通信的實(shí)現(xiàn)過程中。要保證數(shù)據(jù)傳輸?shù)目煽啃院头€(wěn)定性.其硬件設(shè)計(jì)是必不可少的,本文中選用S3C2410芯片作為核心器件。S3C2410芯片是SAMSUNG公司16/32位的RISC處理器。采用ARM920T內(nèi)核,內(nèi)部具有2個(gè)獨(dú)立的UART控制器以及分開的16 kB的指令Cache和16 kB數(shù)據(jù)Cache,每個(gè)控制器支持的最高波特率可達(dá)到230.4 kb/s。S3C2410芯片的這些特點(diǎn),為實(shí)現(xiàn)在“nux操作系統(tǒng)下計(jì)算機(jī)與開發(fā)板問的串口通信提供了可靠的保證。基于S3C2410的嵌入式串口通信的硬件結(jié)構(gòu)原理如圖1所示。

圖1 系統(tǒng)硬件結(jié)構(gòu)原理圖

宿主機(jī)計(jì)算機(jī)系統(tǒng)中,在Linux操作系統(tǒng)下編寫好串口通信的程序.通過JTAG接口模塊下載至目標(biāo)機(jī)即開發(fā)板中,在相應(yīng)的軟件控制命令下.通過串行接口線即町實(shí)現(xiàn)宿主機(jī)與目標(biāo)機(jī)問數(shù)據(jù)的發(fā)送和接收。目標(biāo)機(jī)中電源模塊提供了開發(fā)板系統(tǒng)工作所需的正常電壓。各種數(shù)據(jù)信息町以通過液晶顯示模塊及時(shí)顯示出來.還可以通過鍵盤控制模塊來實(shí)現(xiàn)對(duì)日標(biāo)機(jī)操作的控制,外擴(kuò)存儲(chǔ)器模塊町以由FLASH或SDRAM構(gòu)成,當(dāng)然作為一個(gè)完整的系統(tǒng).還必須配有其他外圍電路,以保證系統(tǒng)的正常工作。

4 軟件實(shí)現(xiàn)

串口通信軟件的設(shè)計(jì)是系統(tǒng)成功運(yùn)行的關(guān)鍵,如何保證通信的效率、可靠性、實(shí)時(shí)性以及節(jié)約系統(tǒng)的資源足設(shè)計(jì)者關(guān)心的問題,因此通信協(xié)議的定義、軟件外發(fā)的結(jié)構(gòu)設(shè)計(jì)、程序開發(fā)工具的選擇在系統(tǒng)設(shè)計(jì)中極其重要。PC端串口通信程序的開發(fā)是基于Windows環(huán)境面向?qū)ο蟮脑O(shè)計(jì)方法,開發(fā)環(huán)境選用vc++,實(shí)現(xiàn)的方法有多種,對(duì)此作介紹的文獻(xiàn)也較多。在此不詳述。對(duì)于單片機(jī)端的串口通信程序,有文獻(xiàn)介紹基于匯編語言的程序框架,但基于分層結(jié)構(gòu)的C語苦實(shí)現(xiàn)卻少有介紹。下面將具體介紹在Keil C51中,分層結(jié)構(gòu)框架下串口全雙工通信程序的設(shè)計(jì)與實(shí)現(xiàn)。

4.1 通信協(xié)議口波特率

基于串I=1的通信模式有間步通信和異步通信兩種,這取采用的是異步串行通信。在通信過程中,單片機(jī)應(yīng)處理以下問題: (1)識(shí)別命令。PC機(jī)將命令傳送給單片機(jī),單片機(jī)能夠識(shí)別不同的命令而且根據(jù)不同的命令內(nèi)容完成不同的操作。(2)識(shí)別數(shù)據(jù)。單片機(jī)能識(shí)別附加在命令后的數(shù)據(jù)。傳送數(shù)據(jù)的最大位數(shù)由設(shè)置的緩沖區(qū)大小決定。(3)出錯(cuò)處理。包括識(shí)別無效命令和處理通信錯(cuò)誤。當(dāng)啦片機(jī)接收到系統(tǒng)沒有定義過的命令.或者收到的命令不符合預(yù)先定義的格式時(shí)。它應(yīng)該做出響應(yīng).向系統(tǒng)報(bào)錯(cuò)并能進(jìn)行錯(cuò)誤處理,錯(cuò)誤類型編號(hào)應(yīng)事先定義。(4)正確應(yīng)答。當(dāng)單片機(jī)系統(tǒng)接收到一條沒有通信錯(cuò)誤且符合通信協(xié)議的信息時(shí),應(yīng)根據(jù)所接收的命令進(jìn)行相應(yīng)操作,并把操作結(jié)果返回PC機(jī).如發(fā)一個(gè)“OK”信息以示確認(rèn)。

PC機(jī)應(yīng)處理的問題:(1)采集單片機(jī)發(fā)送的數(shù)據(jù),如某設(shè)備模塊的狀態(tài)信息;(2)接收單片機(jī)的正常響應(yīng)和錯(cuò)誤響應(yīng)信息,若足錯(cuò)誤響應(yīng)信息,應(yīng)根據(jù)錯(cuò)誤類型,以處理。由于控制的設(shè)備模塊可能有多個(gè),通過對(duì)設(shè)備模塊統(tǒng)一編址,給不同的設(shè)備設(shè)置唯一的16位地址加以區(qū)分。這樣在PC機(jī)和單片機(jī)進(jìn)行數(shù)據(jù)傳送時(shí),雙方能夠識(shí)別數(shù)據(jù)的來源及需控制的對(duì)象。如表1所樂為通信協(xié)議格式示例.由PC機(jī)傳輸命令協(xié)議和單片機(jī)響應(yīng)協(xié)議組成。

表1 通信協(xié)議示例

4.2 單片機(jī)通信軟件的分層設(shè)計(jì)

單片機(jī)系統(tǒng)的軟件開發(fā)環(huán)境為Keil C51。與匯編語言相比.C語言在結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì).更利于程序移植和擴(kuò)展。串口通信程序采用分層結(jié)構(gòu)。即將程序按層次分為物理層、驅(qū)動(dòng)層,應(yīng)用層,分層設(shè)計(jì)有以下優(yōu)點(diǎn):(1)與主機(jī)通信的串口程序支持接收和發(fā)送并發(fā)處理(主動(dòng)發(fā)送和被動(dòng)查詢?cè)O(shè)備并存),利于提高通信效率及數(shù)據(jù)處琿的實(shí)時(shí)性。(2)當(dāng)單片

機(jī)只有一個(gè)串口而以串口通信方式控制的設(shè)備模塊有多個(gè)時(shí)。必需對(duì)串口擴(kuò)展,為了簡(jiǎn)化硬件則需用軟件實(shí)現(xiàn)模擬的串口。因此系統(tǒng)內(nèi)部應(yīng)有支持I/O口模擬串口操作的軟件實(shí)現(xiàn)。標(biāo)準(zhǔn)串I/O和模擬串口在物理實(shí)現(xiàn)上有區(qū)別,但采用統(tǒng)一的對(duì)外封裝,以提高程序的封裝性和模塊化祥度。(3)防止由于串口操作向在流程中獨(dú)占CPU資源.避免漏檢狀態(tài)信息等現(xiàn)象發(fā)生。

三層程序的主要功能及C語言實(shí)現(xiàn)如下所述:

(1)驅(qū)動(dòng)層:也稱抽象層,在該層定義串口基本操作結(jié)構(gòu)?;诖私Y(jié)構(gòu)實(shí)現(xiàn)不同方式下的串口設(shè)計(jì),包括中斷方式下的串口實(shí)現(xiàn)和I/O口模擬方式下的串口實(shí)現(xiàn)。雖然兩種方式的底層實(shí)現(xiàn)有所區(qū)別。但足驅(qū)動(dòng)層屏蔽不同串口操作的物理細(xì)節(jié),簡(jiǎn)化應(yīng)用層對(duì)串口的操作。串口的結(jié)構(gòu)定義如下:

typedef struct Serial

{ void (* pfSetBaudRate)(unsigned long baud_rate); //設(shè)置串口波特率

void (*pfOpen)(void); //串口打開

void (*pfClose)(void); //串口關(guān)閉

unsigned (*pfGetChar)(unsigned char *c); //從接收緩存中取一個(gè)數(shù)

void (*pfPutChar)(unsigned char c); //發(fā)送一個(gè)字節(jié)

void (*pfPutStr)(unsigned char *tmp_str, unsigned char tmp_len); //發(fā)送一串?dāng)?shù)

}Cserial;

(2)物理層:在該層針對(duì)不同的串口實(shí)體.完成不同的物理操作.如單片機(jī)串口初始化、I/O模擬串口方式下的定時(shí)器初始化、I/O中斷初始化等。其作用是給不同的串口操作模式提供支撐。針對(duì)標(biāo)準(zhǔn)全雙工串口和模擬串口兩類不同的物理實(shí)現(xiàn)方式.設(shè)計(jì)不同的串口實(shí)體(包含內(nèi)部執(zhí)行每類串口的底層操作及相關(guān)基本的外部初始化等操作),不同的實(shí)現(xiàn)方式,綁定不同的操作函數(shù)指針.指針指向不同的操作。兩種串口實(shí)體封裝成統(tǒng)一的串口基礎(chǔ)類,使程序具有更強(qiáng)的通用性和擴(kuò)展性。在物理層采用循環(huán)FIFO雙緩沖隊(duì)列對(duì)接收和發(fā)送的數(shù)據(jù)進(jìn)行緩存、讀取,緩沖區(qū)循環(huán)FIFO操作方式與中斷方式下接收和發(fā)送數(shù)據(jù)的結(jié)合使用,保證了數(shù)據(jù)處理的可靠性、實(shí)時(shí)性。,由于篇幅所限.下面只給出了緩沖區(qū)結(jié)構(gòu)和相關(guān)指針的聲明程序示例代碼:

typedef struct Fifo

{ unsigned char *m_buf;//定義緩沖區(qū)首地址

unsigned int m_bufsize;//定義緩沖區(qū)大小

unsigned int m_wp; //寫入數(shù)據(jù)

unsigned int m_rp; //讀出數(shù)據(jù)

)CFifo;

unsigned char(fFifoPush)(CFifo *me, unsigned char c);//數(shù)據(jù)入隊(duì)

unsigned char(fFifoPop)(CFifo *me);//數(shù)據(jù)出隊(duì)

void fFifolnit(CFifo *me, unsigned char * tmp_buf,unsigned int tmp_size);//初始化

(3)應(yīng)用層:完成對(duì)單片機(jī)系統(tǒng)初始化。包括串口驅(qū)動(dòng)結(jié)構(gòu)實(shí)體的初始化。然后按統(tǒng)一的串口驅(qū)動(dòng)層接口對(duì)串口操作而不關(guān)心其物理實(shí)現(xiàn)方式,如波特率設(shè)置、串口開關(guān)、收發(fā)數(shù)據(jù)等,循環(huán)接收、處理串口的命令和數(shù)據(jù).處理單片機(jī)的I/O 口操作等。以下為主應(yīng)用程序基本架構(gòu).本爾例為系統(tǒng)接收串口數(shù)據(jù)后。直接返回主機(jī)。

extern CSerial xdata mSerial; //在物理層,已聲明該串口實(shí)體

void main(void)

{ EA=0;//禁止中斷

Uart_Init(); //串口初始化

mSerial.pfSetBaudRate(9600);//設(shè)置波特率為9600bps

mSerial.pfOpen(); //打開串口

//?其它初始化程序,

EA=l: //開放中斷

while(1){

if(mSefial.pfGetchar(&i))mSerial.pfPutchar(i)

}

//?其它循環(huán)檢測(cè)、處理程序

}

5 小結(jié)

本文作者創(chuàng)新點(diǎn)足詳細(xì)地說明了基于S3C2410的嵌入式系統(tǒng)串口全雙工通信軟件分層設(shè)計(jì)的實(shí)現(xiàn),描述了單片機(jī)與PC機(jī)仝雙工串口通信的通信協(xié)議,以及存keil C51下的程序?qū)崿F(xiàn)。應(yīng)用征明.該方法可以極大地提高程序的封裝性和模塊化程度.增強(qiáng)了串口傳送數(shù)據(jù)時(shí)系統(tǒng)收發(fā)、處理數(shù)據(jù)的并發(fā)性和實(shí)時(shí)性.同時(shí)也提高了編程效率。該方法已成功應(yīng)用于安防監(jiān)控系統(tǒng)、I/O檢測(cè)模塊、安全模塊等系統(tǒng).運(yùn)行結(jié)果良好。對(duì)于其它基于串口通信的智能設(shè)備控制.具有參考意義。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19884

    瀏覽量

    235021
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11509

    瀏覽量

    213686
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7142

    瀏覽量

    125546
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于Linux等不同操作系統(tǒng)實(shí)現(xiàn)異構(gòu)系統(tǒng)的設(shè)計(jì)

    通過該設(shè)計(jì)能夠確保裝有不同操作系統(tǒng)的各種服務(wù)能夠在本系統(tǒng)中正常工作,同時(shí)使用消息隊(duì)列實(shí)現(xiàn)系統(tǒng)模塊之間的
    發(fā)表于 01-16 09:17 ?2759次閱讀

    Linux與其他操作系統(tǒng)的區(qū)別

    上運(yùn)行Linux和MS-DOS已很普遍,就發(fā)揮處理器功能來說,MS-DOS沒有完全實(shí)現(xiàn)x86處理器的功能,而Linux完全在
    發(fā)表于 09-13 10:12

    基于ARM920T平臺(tái)怎么移植Linux操作系統(tǒng)?

    嵌入式Linux的一個(gè)熱點(diǎn)應(yīng)用就是將Linux內(nèi)核移植到一些典型的微控制和微處理器上,提供操作系統(tǒng)層面支持,以
    發(fā)表于 09-26 06:36

    匯聚式處理器Blackfin支持什么操作系統(tǒng)?

    當(dāng)今的嵌入式應(yīng)用已經(jīng)無處不在,全球每年生產(chǎn)數(shù)十億顆微處理器,其中大部分被廣泛應(yīng)用于各類嵌入式系統(tǒng),從消費(fèi)電子、通信終端及系統(tǒng)設(shè)備、工業(yè)控制、汽車電子
    發(fā)表于 10-11 07:12

    MicroBlaze處理器的PetaLinux操作系統(tǒng)怎么移植?

    核,而如何針對(duì)特定的微處理器選擇合適的嵌入式操作系統(tǒng)是SOPC開發(fā)的難點(diǎn)之一。本文針對(duì)Xilinx公司的MicroBlaze軟核,介紹了PetaLinux嵌入式操作系統(tǒng)及其移植方法,研究了PetaLinux的相關(guān)配置和啟動(dòng)方案。
    發(fā)表于 03-16 06:37

    VxWorks操作系統(tǒng)基于ARM處理器的中斷怎么處理?

    本文通過基于S3C44B0X處理器VxWorks嵌入式操作系統(tǒng)的BSP移植,詳細(xì)分析了VxWorks操作系統(tǒng)基于ARM處理器的中斷處理方法。
    發(fā)表于 04-27 06:28

    嵌入式Linux操作系統(tǒng)

    ARM+LINUX路線,主攻嵌入式Linux操作系統(tǒng)及其上應(yīng)用軟件開發(fā)目標(biāo):(1)掌握主流嵌入式微處理器的結(jié)構(gòu)與原理(初步定為arm9)(2)必須掌握一個(gè)嵌入式
    發(fā)表于 10-27 10:22

    linux操作系統(tǒng)只能在以arm為處理器的pc上運(yùn)行嗎

    linux操作系統(tǒng)只能在以arm為處理器的pc上運(yùn)行嗎?可以在英特爾的各種處理器上運(yùn)行嗎?
    發(fā)表于 07-27 15:04

    嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks中串口通信實(shí)現(xiàn)

    嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks中串口通信實(shí)現(xiàn)
    發(fā)表于 03-29 12:27 ?19次下載

    Linux操作系統(tǒng)原理及應(yīng)用

    Linux操作系統(tǒng)原理及應(yīng)用 1.1  操作系統(tǒng)的地位 1.2  操作系統(tǒng)的功能 1.3  操作系統(tǒng)的發(fā)
    發(fā)表于 04-28 14:53 ?0次下載

    嵌入式VxWorks實(shí)時(shí)操作系統(tǒng)串口通信實(shí)現(xiàn)

    嵌入式VxWorks實(shí)時(shí)操作系統(tǒng)串口通信實(shí)現(xiàn)
    發(fā)表于 08-31 16:03 ?7次下載
    嵌入式VxWorks實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>中<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    基于QNX操作系統(tǒng)下的Modbus串口通信設(shè)計(jì)

    基于QNX操作系統(tǒng)下的Modbus串口通信設(shè)計(jì)
    發(fā)表于 10-30 14:51 ?16次下載
    基于QNX<b class='flag-5'>操作系統(tǒng)</b>下的Modbus<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設(shè)計(jì)

    基于Linux操作系統(tǒng)和S3C2410微處理器實(shí)現(xiàn)GPS實(shí)時(shí)導(dǎo)航系統(tǒng)的設(shè)計(jì)

    這里提出一種實(shí)用的設(shè)計(jì)方案,通過對(duì)系統(tǒng)的各方面配置,實(shí)現(xiàn)GPS實(shí)時(shí)導(dǎo)航功能。系統(tǒng)主控器件采用韓國Samsung公司生產(chǎn)的ARM核32位RISC微處理器S3C2410,并在由其組成的開發(fā)
    發(fā)表于 03-09 10:47 ?1244次閱讀
    基于<b class='flag-5'>Linux</b><b class='flag-5'>操作系統(tǒng)</b>和S3C2410微<b class='flag-5'>處理器</b><b class='flag-5'>實(shí)現(xiàn)</b>GPS實(shí)時(shí)導(dǎo)航<b class='flag-5'>系統(tǒng)</b>的設(shè)計(jì)

    基于S3C4510B微處理器操作系統(tǒng)實(shí)現(xiàn)網(wǎng)絡(luò)通信工程的編寫設(shè)計(jì)

    Micro,是“小”的意思;C表示Control,是“控制”的意思,所以u(píng)CLinux就是Micro-Control-Linux,字面上的理解就是“針對(duì)微控制領(lǐng)域而設(shè)計(jì)的Linux系統(tǒng)”。它也是針對(duì)無MMU(內(nèi)存管理單元模塊)的
    的頭像 發(fā)表于 10-04 17:37 ?2262次閱讀
    基于S3C4510B微<b class='flag-5'>處理器</b>和<b class='flag-5'>操作系統(tǒng)</b><b class='flag-5'>實(shí)現(xiàn)</b>網(wǎng)絡(luò)<b class='flag-5'>通信</b>工程的編寫設(shè)計(jì)

    Linux操作系統(tǒng)需要什么處理器

    單片機(jī)、Cortex-M、Linux它們和嵌入式有什么區(qū)別? 跑 Linux 操作系統(tǒng)需要什么處理器?ARM9、ARM11? Cortex-M比ARM9更新,為什么不能跑
    的頭像 發(fā)表于 09-23 11:10 ?6561次閱讀