中文久久久字幕|亚洲精品成人 在线|视频精品5区|韩国国产一区

歡迎來到優(yōu)發(fā)表網(wǎng),期刊支持:400-888-9411 訂閱咨詢:400-888-1571股權(quán)代碼(211862)

購物車(0)

期刊大全 雜志訂閱 SCI期刊 期刊投稿 出版社 公文范文 精品范文

通信管理論文范文

時間:2023-01-09 06:10:17

序論:在您撰寫通信管理論文時,參考他人的優(yōu)秀作品可以開闊視野,小編為您整理的7篇范文,希望這些建議能夠激發(fā)您的創(chuàng)作熱情,引導(dǎo)您走向新的創(chuàng)作高度。

通信管理論文

第1篇

關(guān)鍵詞:通信;RS-232RS-485/RS-422收發(fā)器LMS202E/LMS485

1概述

LMS202E和LMS485分別是美國國家半導(dǎo)體公司生產(chǎn)的RS-232通信用雙收發(fā)器和多點傳輸線用高速雙向數(shù)據(jù)通信差分總線/線路收發(fā)器。這兩種器件均使用5V單電源供電,電源電流分別為1mA(LMS202E)和0.32mA(LMS485的典型值)。

LMS202E滿足E1A/T1A-232和CCITTV.28規(guī)范,數(shù)據(jù)傳輸率可達230kbps,而其±15kV的靜電放電(ESD)保護指標(biāo)符合IEC1000-4-2(EN61000-4-2)標(biāo)準(zhǔn)要求。LMS202E主要用于銷售點終端POS(條形碼閱讀機)、手持式設(shè)備(或裝置)和通用目的RS-232通信等方面。

LMS485滿足ANSI標(biāo)準(zhǔn)E1A/T1ARS485/RS-422,數(shù)據(jù)速率為2.5Mbps。LMS485的應(yīng)用領(lǐng)域主要是低功率RS-485系統(tǒng)網(wǎng)絡(luò)中心、橋路和路由器銷售點設(shè)備(自動柜員機ATM、條形碼掃描儀)、局域網(wǎng)(LAN)、綜合業(yè)務(wù)數(shù)據(jù)網(wǎng)(ISDN)、工業(yè)可編程邏輯控制器、高速串/并聯(lián)應(yīng)用以及噪聲環(huán)境下的多點應(yīng)用系統(tǒng)等。

2RS-232雙收發(fā)器LMS202E

LMS202E采用16引腳SOIC封裝,可與MAXIM公司的MAX202E相互代換。

LMS202E的內(nèi)部結(jié)構(gòu)及典型應(yīng)用電路如圖1所示。該器件內(nèi)含DC-DC變換器,利用電路中的C1~C4使內(nèi)部對偶充電泵為兩個發(fā)送器提供±10V的雙電源。通過C1,電荷泵可將+5V的電源電壓轉(zhuǎn)換為+10V,并存儲在C3中。而通過C2電荷泵則可將+10V轉(zhuǎn)換為-10V電壓,而后再把-10V存儲在C4中。

發(fā)送器輸入信號可從腳11和腳10輸入且兩個發(fā)送器在14腳和7腳上的輸出與T1A/E1A-232E電平一致。T1和T2兩個發(fā)送器的輸出擺幅為±8V,開路輸出電壓擺幅為(V+-0.6V)~V-。接收器的R1IN和R2IN信號從腳13和腳8輸入以接收T1A/E1A信號,并從腳12和腳9輸出與TTL/CMOS兼容的信號。RS-232接收器的輸入電壓VRi范圍為-30V~+30V,VS為5V時的輸入低門限電平是1.4V,高門限電平為2V。接收器輸出電壓的最大范圍為-0.3V~(VS+0.3V),從輸入到輸出的傳輸延遲時間為0.08μs(典型值)。

LMS202E的所有引腳都帶有ESD保護。除了發(fā)送器輸出腳(7腳和14腳)和接收器輸入腳(8腳和13腳)外,其它引腳帶有±2kV的人體模型(HBM)和±200V的機器模型(MM)ESD額定值。RS-232總線引腳(7腳、8腳、13腳和14腳)帶有±15kV的HBM和IEC1000-4-2的耐沖擊ESD保護。此外,總線引腳還能滿足±8kV的IEC1000-4-2接觸ESD保護要求。因此,這種ESD結(jié)構(gòu)在加電、斷電等場合可以承受較高ESD沖擊。

3LMS485低功率差分?jǐn)?shù)據(jù)收發(fā)器

LMS485采用8引腳DIP或SOIC封裝,可與MAX485互相代換。LMS485芯片在內(nèi)部集成了一個TRI-STATETM差分線路驅(qū)動器(D)和一個差分輸入接收器,圖2所示是LMS485芯片的內(nèi)部結(jié)構(gòu)及引腳排列圖。

LMS485的DI(4)腳是驅(qū)動器輸入,DE(3)腳為驅(qū)動器輸出使能輸入,A(6)腳和B(7)腳分別是驅(qū)動器(同相和反相)輸出和接收器輸入,RO(1)腳和RE(2)腳分別是接收器輸出和接收器輸出賦能輸入,GND(5)腳為接地腳,VCC(8)腳為5±0.25V電源電壓輸入端。

LMS485的輸入與輸出邏輯真值表如表1所列。其中“X”為不相干,“Z”為三態(tài),“OPEN”為非終止(僅開路輸入)。

表1真值表

驅(qū)動器

REDED1AB

XHHHL

XHLLH

XLXZZ

接收器

REDEA-BRO

LL≥+0.2VH

LL≤-0.2VL

HXXZ

LLOPENH

LMS485的主要特點如下:

滿足ANSI標(biāo)準(zhǔn)RS-485-A和RS-422-B;

采用5V單電源工作,低功率BiCMOS工藝可保證電源電流典型值不超過320μA,工作溫度范圍為-40~85℃;

總線上允許掛接的收發(fā)器數(shù)目多達32個,數(shù)據(jù)速率可達2.5Mbps;

帶熱關(guān)閉保護、短路保護和接收器開路故障安全保護功能;

第2篇

關(guān)鍵詞:VXD實時串口通信

引言

在微軟的視窗操作系統(tǒng)中,系統(tǒng)內(nèi)核掌管所有的應(yīng)用程序,通過獨特的任務(wù)調(diào)度算法實現(xiàn)CPU的分時多任務(wù)處理方式。多任務(wù)處理對大多數(shù)用戶可能是件好事,但是對那些想把實時通信建立在Windows操作系統(tǒng)上的特殊用戶來說,操作界面的圖形化并不比MS-DOS的單任務(wù)更具吸引力。在視窗操作系統(tǒng)里可以進行實時通信和控制碼?答案是:VXD技術(shù)可以幫我們在獲取友好的人機界面的同時還擁有很強的實時性。

1VXD技術(shù)解析

VXD技術(shù)可追溯到Windows3.1,它的引入就是要讓操作系統(tǒng)實現(xiàn)多工以及硬件資源的共享。為了支持多個MS-DOS任務(wù)同時執(zhí)行,Windows98讓每個MS-DOS應(yīng)用程序在各自的虛擬機(VM)上運行,各自互不相干;而所有的Widnows應(yīng)用程序卻都在一個虛擬機上運行。圖1所示的結(jié)構(gòu)框圖很好地說明了Windows98的整體架構(gòu)。

圖1中,由眾多的VXD組成系統(tǒng)級代碼處于最底層。其中,處于中心地位的是一名為VMM32的VXD,它負責(zé)協(xié)調(diào)和管理所有的VXDs。其它VXDs則通過消息機制(這個消息機制由VMM32.VXD來維護)彼此聯(lián)系。由所有VXDs開放出的服務(wù)接口(API)組成了一個服務(wù)網(wǎng),它們彼此通過合作的方式,提供Windows98的系統(tǒng)底層驅(qū)動服務(wù)。

從以上Windows98系統(tǒng)架構(gòu)可以看出,要想在視窗平臺下獲取很強的實時性,僅靠提升應(yīng)用程序線程優(yōu)先級的方法是不夠的。因為Win32應(yīng)用程序代碼屬于Ring3級,而VXD代碼則屬于Ring0級;采用VXD撰寫的實時通信程序可以完全不受代碼限制,可以直接對硬件進行操作。VXD的這個特點正是實時通信建立所必須的。

設(shè)計實時通信的VXD前,先解釋以下幾個問題:

①VMM32使用VPICD.VXD虛擬化每個硬件和軟件中斷。VMM32為每個虛擬機(VM)維護一個IDT結(jié)構(gòu),當(dāng)中斷發(fā)生時,CPU先保護中斷現(xiàn)場,然后經(jīng)由當(dāng)前VM的IDT把這個中斷引導(dǎo)至相應(yīng)的中斷處理程式。

中斷的虛擬化,使我們有機會給每個中斷提供新的中斷處理函數(shù),并可以讓多個硬件共享同一個中斷號。VPICD.VXD為我們提供這些服務(wù)。

②VMM有兩個調(diào)度器,用以在多個線程和VMs之間實現(xiàn)搶占式多工。主調(diào)度器負責(zé)選定下一個將被執(zhí)行的線程。這個選擇可以是一個,也可以是多個。然后,主調(diào)度器把選擇結(jié)果送給所謂的時間片調(diào)度器,并由后者完成各個應(yīng)用程序間的時間片分配。調(diào)度器也時應(yīng)用程序經(jīng)由呼叫Win32線程優(yōu)先調(diào)整API(如SetThreadPriority和SetPriorityClass等)做出回應(yīng)。當(dāng)中斷發(fā)生時,VMM32自動提升中斷處理函數(shù)所在VM之優(yōu)先級,保證中斷處理函數(shù)能及時被執(zhí)行。

③VXD和Win32應(yīng)用程序可直接通信。Win32應(yīng)用程序可通過一個系統(tǒng)API(DevicelOControl(…))來呼叫位于底層的VXD為其服務(wù)。在呼叫VXD前,首先必須調(diào)用CreatFile(…)這個API加載該VXD(如果該VXD是一個靜態(tài)VXD,則不用加載)。所有的呼叫動作其實都通過VMM32完成。VXD也可以通過消息方式和位于上層的Win32應(yīng)用程序通信。She11.VXD為所有希望以消息機制和Win32應(yīng)用程序通信的VXD提供了這一服務(wù)。

以上是編寫一個串口通信驅(qū)動需要的系統(tǒng)層面知識。對于Windows底層的了解。

2用VXD實現(xiàn)一個實時串口通信驅(qū)動

接下來用VXD技術(shù)實現(xiàn)一個實時串行通信的驅(qū)動。這個VXD是一個動態(tài)(Dynamic)VXD,當(dāng)它的服務(wù)被呼叫時,VMM32會動態(tài)加載這個VXD。作者采用的工具是C+98DDK。當(dāng)然也可以使用其它的工具,如MASM6.11(或更高版本)、VtoolsD。用C搭配DDK完成VXD構(gòu)建的好處是,可以使用C語言完成絕大部分的程序,程序比較容易閱讀和維護。

用C來實現(xiàn)一個VXD驅(qū)動,需要準(zhǔn)備如下條件:一個.ASM的匯編語言接口文件(在其中定義VXD要處理的系統(tǒng)消息和輸出API),一個.C的函數(shù)實現(xiàn)文件(在其中完成自己函數(shù)實體),一個.DEF的定義文件(在其中定義VXD中各個段的別名并匯成一個DDB)和一個.MAK檔(用來編譯并連接生成VXD,可有可無)。在這里,僅給出用C實現(xiàn)的函數(shù)檔。至于其它的文件,可以從本文所列的參考書目或其它文獻中找到相關(guān)文檔的說明。

這個串口通信驅(qū)動程序的功能是:實時送出一個Byte的數(shù)據(jù),實時接收一個Byte的數(shù)據(jù)。作為演示之用,并沒有加入其它代碼。該VXD驅(qū)動主要由如下3個系統(tǒng)消息(由VMM32來維護和管理)處理函數(shù)組成,其代碼如下:

(1)OnSysDynamicDeviceInit()函數(shù)

BOOLOnSysDynamicDeviceInit()

{//OnSysDynamicDeviceInit

irqhandle=VPICD_Virtualize_IRQ((DWORD)(&irq4));

if(irqhandle==0){

returnFALSE;

}

returnTRUE;//OnSysDynamicDeviceInit

}

該函數(shù)用來完成VXD初始化所做的工作。在本例中,由于實時監(jiān)視串口中斷的需要,要給COM1的中斷安裝一個自定義的斷服務(wù)函數(shù)。98DDK已經(jīng)提供了這個函數(shù)的C語言版,其原型是HIRQstaticVPICD_Virtualize_IRQ(PVIDpvid),在vpicd.h中。該函數(shù)需要一個指針作為參數(shù)(指向名為VPICD_IRQ_Descriptor的結(jié)構(gòu)體),函數(shù)傳回一個指向該虛擬IRQ的句柄(該句柄在后來的VPICD服務(wù)中需要提供)。VPICD_IRQ_Descriptor結(jié)構(gòu)體的組成為:

typedefstructVPICD_IRQ_Descriptor{

USHORTVID_IRQ_Number;//IRQ號(0~15)

USHORTVID_Options;//標(biāo)志位選項

ULONGVID_Hw_Int_Proc;//硬件中斷服務(wù)程序的地址

ULONGVID_Virt_Int_Proc;//虛擬中斷服務(wù)程序

ULONGVID_Mask_Change_Proc//MaskChange調(diào)用例程

ULONGVID_IRET_Proc;//IRET調(diào)用例程

ULONGVID_IRET_Time_Out;//在Vm的進程優(yōu)先級提升之前的最大等待時間

ULONGVID_Hw_Int_Ref;//硬件中斷服務(wù)程序的數(shù)據(jù)存放地址

}VID;

其中只用到三位。在本例中需要聲明一個名為irq4的全局變量為VID結(jié)構(gòu),并付給如下初值:VIDirq4={4,0,hwproc,0,0,0,0,500,0},表示將要虛擬化IRQ4,改變其中斷處理函數(shù)為voidhwproc(void),該函數(shù)的原型如下:

voidhwproc(void){

_asm{

movdx,0x3f8

inal,dx

movbyteptr[readin],al

clc

}

return;

}

在這個中斷處理中,僅僅從COM1的數(shù)據(jù)寄存器(地址為3F8h)中讀取接收到的數(shù)值,并把該數(shù)值存放在一個類型為BYTE、名為readin的內(nèi)存中。

(2)OnSysDynamicDeviceExit()函數(shù)

BOOLOnSysDynamicDeviceExit()

{

VPICD_Force_Default_Behavior(irqhandle);

//解除IRQ4虛擬化

returnTRUE;

}//OnSysDynamicDeviceExit

該數(shù)提供了用于善后處理VXD在卸載時需要完成的事件。在本例中,和VXD初始化對應(yīng),需要解除對COM1的中斷IRQ4的虛擬化。作者也是用98DDK在vpicd.h中提供的外包函數(shù)voidstatic_inlineVPICD_Force_Default_Behavior(HIRQhirp)。該函數(shù)唯一需要的參數(shù)便是使用VPICD_Virtualize_IRQ函數(shù)傳回的IRQ句柄。

(3)OnDeviceIoControl()函數(shù)

DWORDOnDeviceIoControl(PDIOCPARAMETERSp){

Switch(p->dwIoControlCode)

{

case1://端口寫功能

if(!p->lpvOutBuffer||p->cbOutBuffer<1)

{//輸出緩存的有效性檢查

returnERROR_INVALID_PARAMETER;

}

if(serial_out((DWORD)(p->lpvInBuffer)))

{//數(shù)據(jù)發(fā)送

*(BYTE*)(p->lpvOutBuffer)=*(BYTE*)(p->lpvInBuffer);

}

else{

*(BYTE*)(p->lpvOutBuffer)=0;

}

open_int();//打開com1中斷

return0;

case2://端口讀功能

if(*(BYTE*)reading==0x00)

{//數(shù)據(jù)讀入

*(BYTE*)(p->lpvOutBuffer)=0x00;

return0;

}

*(BTYE*)(p->lpvOutBuffer)=*(BYTE*)(readin);

return0;

}

return0;

}

return0;

}

OnDeviceIoControl函數(shù)用來處理Win32應(yīng)用程序?qū)XD的呼叫。Win32應(yīng)用程序的呼叫會讓VMM32送給該VXD一個系統(tǒng)信息,并傳遞進一個DIOCPARAMETERS結(jié)構(gòu)的指針。該結(jié)構(gòu)里包含Win32應(yīng)用程序呼叫時傳遞進來的各個參數(shù)。這個結(jié)構(gòu)的組成如下:

TypedefstunctDIOCParams{

DWORDInternall;//指向客戶寄存器的指針

DWORDVMHande;//該VM的句柄

DWORDInternal2;//指向DDB結(jié)構(gòu)的指針

DWORDdwIoConrolCode;//DeviceIoControl例程中呼叫的控制碼

DWODlpvInBuffer;//DeviceIoControl例程呼叫所傳遞進來的輸入緩沖區(qū)地址

DWORDcbInBuffer;//輸入緩沖區(qū)的大小

DWORDlpvOutBuffer;//DeviceIoControl例程呼叫所傳遞進來的輸出緩沖區(qū)地址

DWORDcbOutBuffer;//輸出緩沖區(qū)的大小

DWORDlpcbBytesReturned;//拷貝到輸出緩沖區(qū)中的字節(jié)數(shù)(可以為NULL)

DWORDlpOverlapped;//DeviceIoControl例程呼叫所傳遞進來的重疊I/O塊結(jié)構(gòu)

DWORDhDevice;//Ring3層呼叫應(yīng)用程序句柄

DWORDtagProcess;//例程標(biāo)簽

}

DIOPARAMETERS;

其中,dwIoControlCode指明了Win32應(yīng)用程序需要VXD提供的哪一項服務(wù)。在本例中采用一個switch-case語句作為服務(wù)入口,如下所示。其中服務(wù)1為讓串口送出一個字節(jié),服務(wù)2為讀取一個已經(jīng)由串口接收的字節(jié)。函數(shù)open_int()是用來初始化串口以便接收字節(jié)數(shù)據(jù);函數(shù)BOOLserial_out(DWORDpBuffer)是讓串口發(fā)出一個字節(jié)。它們的函數(shù)體分別如下:

BOOLserial_out(DWORDpBuffer){

if(pBuffer==NULL){

returnFALSE;

}

_asm{

pushfd

cli

pusheax

pushedx

movdx,0x3fb;設(shè)置COM1的波特率

moval,0x83

outdx,al

movdx,0x3f8

moval,12

outdx,al

movdx,0x3f9

moval,0

outdx,al

movdx,0x3fb;設(shè)置COM1的線控項

moval,3

outdx,al

movdx,0x3f9;CMM1關(guān)中斷

moval,0

outdx,al

movdx,0x3fa;關(guān)閉com1的FIFO功能

moval,0

outdx,al

movdx,0x3f8;字節(jié)發(fā)送

moval,byteptr[pBuffer]

outdx,al

popedx

popeax

popfd

sti

}

returnTRUE;

}

serial_out這個函數(shù)體的實現(xiàn)是用匯編語言實現(xiàn)的。因為涉及到很多的端口提供以及CPU的標(biāo)志(flag)和壓棧操作,因此考慮到用匯編語言編寫會簡化代碼。因為此串口傳輸中,用到了關(guān)閉中斷的指令(cli),所以,當(dāng)寫操作所要求完成的任務(wù)很多時,此關(guān)中斷指令會讓程序的實時性很好地體現(xiàn)出來,但cli指令有效時間過長會導(dǎo)致系統(tǒng)問題,所以還是要謹(jǐn)慎使用。

Voidopen_int(void){

_asm{

movdx,0x3f9;COM1開中斷

moval,0x05

outdx,al

}

return;

}

open_int函數(shù)用來把PC串口的中斷設(shè)備按照需要設(shè)立起來。函數(shù)體很簡單,僅改變了地址為3F9h的內(nèi)容,意為設(shè)置Rxdataready和Linestatus中斷位,以便讓CPU可以及時在COM1的中斷服務(wù)程序里讀取串口接收到的字節(jié)。

以上涉及到串口輸入和輸出的函數(shù)體實現(xiàn)代碼中,用到了PC16550UART的資料。

至此,一個可用于實時串口通信的VXD驅(qū)動程序已經(jīng)完成。由于篇幅所限,不能將其它必要的文檔一同提出來討論。

3Win32客戶測試程序

有了上述VXD驅(qū)動程序,還需要搭配一個Win32客戶程序來進行測試。在網(wǎng)絡(luò)補充版中,給出一個筆者在VC6下編制的一個控制臺應(yīng)用程序片斷,以供參考。

現(xiàn)在編制VXD驅(qū)動還沒有一個集成開發(fā)環(huán)境(IDE)。本文的驅(qū)動程序是用VC6.0自帶的編譯器編譯的。由于要編譯匯編文檔,所以還需要把一個MASM匯編器(要求6.0以上版本)及其相關(guān)文檔拷貝到VC6.0的vc98\u30446目錄下。

第3篇

關(guān)鍵詞:NRZHDB3單片機E1收發(fā)芯片DS2153Q

常用的NRZ碼不適合在高速長距離數(shù)據(jù)通信的信道中傳輸,因而選用了另外一種編碼—HDB3碼。HDB3碼是串行數(shù)據(jù)傳輸?shù)囊环N重要編碼方式。和最常用的NRZ碼相比,HDB3具有很多優(yōu)點,例如:消除了NRZ碼的直流成分,具有時鐘恢復(fù)更好的抗干擾性能,這使它更適合于長距離信道傳輸。

E1信號選用HDB3編碼方式,速率2.048Mbps,可以在特性阻抗120Ω的RJ45平衡雙絞線上傳輸1.5km,能夠滿足大多數(shù)情況下數(shù)據(jù)的高速長距離傳輸。在數(shù)據(jù)速率小于2.048Mbps的高速速率時,可以通過插入額外數(shù)據(jù)比特提高數(shù)據(jù)數(shù)率。E1收發(fā)芯片DS2153Q完全符合E1信號標(biāo)準(zhǔn),而且具備微控制器接口,大大提高了該芯片的可用性。

E1有成幀、成復(fù)幀與不成幀三種方式。在成幀的E1中,第0時隙用于傳輸幀同步數(shù)據(jù),其余31個時隙可以用于傳輸有效數(shù)據(jù);在成復(fù)幀的E1中,除了第0時時隙外,第16時隙是用于傳輸信令的,只有第1~15,第17~31共30個時隙可用于傳輸有效數(shù)據(jù);而在不成幀的E1中,所有32個時隙都可用于傳輸有效數(shù)據(jù)。本文提出的NRZHDB3碼制轉(zhuǎn)換器的E1工作在不成幀方式,也就是說E1的32個時隙均用于傳輸有效數(shù)據(jù)。

1E1收發(fā)芯片DS2153Q簡述

DS2153Q是Dallas公司的T1/E1收發(fā)芯片,符合最新的E1線路標(biāo)準(zhǔn),包括ITUG.703、G.704、G.706、G.823、I.431、ETSI300011、300233、TBR12和TBR13等,該芯片能完成NRZ和HDB3碼間的相互轉(zhuǎn)換,碼率可達2.048Mb/s,而且在片內(nèi)集成了接收NRZ碼的數(shù)據(jù)時將恢復(fù)電路,更有利于后級接收電路。片內(nèi)D/A能夠?qū)崿F(xiàn)G.703標(biāo)準(zhǔn)的輸出波形,適用于75Ω和120Ω特性阻抗的雙絞線,并且具有完善的數(shù)據(jù)流狀態(tài)監(jiān)測功能,可以實時指示數(shù)據(jù)流的傳輸狀況。

DS2153Q的微控制器接口使其可以很容易與單片機等MCU接口連接。其內(nèi)部的71個8位寄存器使用戶可以通過MCU對DS2135Q進行功能配置和狀態(tài)監(jiān)測這些寄存器主要有接收控制寄存器、發(fā)送控制寄存器通用控制寄存器、中斷屏蔽寄存器和工作狀態(tài)寄存器圖1為DS2135Q的內(nèi)部結(jié)構(gòu)圖。

2碼制轉(zhuǎn)換器電路設(shè)計

NRZ-DB3碼制轉(zhuǎn)換器為NRZ碼到HDB3碼和HDB3碼到NRZ碼的轉(zhuǎn)換,設(shè)計選用專用E1收到芯片DS2153Q和單片機AT89C51實現(xiàn)該碼制的轉(zhuǎn)換功能。該碼制轉(zhuǎn)換器把輸入的NRZ轉(zhuǎn)換為HDB3碼輸出,同時接收E1線路上的數(shù)據(jù)轉(zhuǎn)換成HRZ碼,并恢復(fù)出數(shù)據(jù)時鐘,供后級數(shù)據(jù)接收單元使用。

AT89C51為Atmel公司的8位單片機,負責(zé)控制通信芯片DS2153Q的工作模式和狀態(tài)監(jiān),使其完成NRZ碼到HDB3碼和HDB3碼到HRZ碼的轉(zhuǎn)換。同時,該單片機的電路還包括μP監(jiān)控電路IMP813L,用于提高碼制轉(zhuǎn)換器工作的抗干擾能力和可靠性。

圖2是該碼制轉(zhuǎn)換器的結(jié)構(gòu)框圖。

DS2153Q的并行數(shù)據(jù)/地址線與單片機的P0口相連;片選信號選用單片機的P2.0;單片機的讀寫信號與DS2153Q的讀寫信號相連;同時,DS2153的兩個中斷申請線與單片機的INT0和INT1相連。這樣DS2153Q可以通過中斷的方式及時通知單片機自身的工作狀態(tài)。AT89C51與DS2153Q的電路連接圖如圖3所示,通過以上的硬連接,實現(xiàn)單片機對DS2153Q的控制和狀態(tài)監(jiān)控。

圖3AT89C51與DS2153Q電路連接圖

該碼制轉(zhuǎn)換器選用IMP813L作為μP監(jiān)控電路,實現(xiàn)可靠上電復(fù)位和看門狗控制。DS2153Q的時鐘信號是通過對單片機時鐘信號的二分頻來實現(xiàn)的。單片機選用16.384MHz的時鐘信號,使用74HC74二分頻后,得到8.192MHz的頻率信號作為DS2153Q輸入時鐘。

在DS2153Q的電路設(shè)計中,為了使其工作在不成幀方式,發(fā)送的數(shù)據(jù)全部從TSER引腳輸入,需要將引腳TLINK和TSER短接。發(fā)光二極管用于轉(zhuǎn)換器的工作指示,可以直觀判斷當(dāng)前數(shù)據(jù)轉(zhuǎn)換是否正常。

該碼制轉(zhuǎn)換器使用特性阻抗120Ω的RJ45平衡雙絞線進行數(shù)據(jù)傳輸,DS2153Q收發(fā)電路如圖4所示,傳輸變壓器輸入輸出匝數(shù)比為1:1.36。

3單片機控制程序設(shè)計

轉(zhuǎn)換器單片機控制程序包括兩部分:DS2153Q的功能配置和DS2153Q工作狀態(tài)監(jiān)控。DS2153Q的功能配置實現(xiàn)HDB3碼的正常動作;DS2153Q工作狀態(tài)監(jiān)控用來實時獲得當(dāng)前轉(zhuǎn)換器是否工作正常,并及時上報和指示。

3.1DS2153Q功能配置

轉(zhuǎn)換器上電后,首先由μP監(jiān)控電路進行有效復(fù)位,保證單片機的正常初始化,一單片機即進入通信芯片DS2153Q的配置過程。

①初始化測試寄存器,向相應(yīng)測試寄存器寫0即寫。

②進行接收控制存器(RCR)的配置,包括接收幀模式、自動重同步使能、重同步準(zhǔn)則和接收動態(tài)存儲功能等,使DS2153Q接收單片工作在AutoResync、DisableElasticStore。

③進行發(fā)送控制存器(TCR)的配置,包括發(fā)送幀模式、自動設(shè)置故障位和16位引腳的功能選擇等,使DS2153Q發(fā)送單元工作在E-bitsnotautomaticallysetinthetransmitdirection,并根據(jù)當(dāng)前轉(zhuǎn)換模式的不同設(shè)置16引腳的功能,0=ReceiveLossofSync(RLOS)、1=LossofTransmitClock(LOTC)。

④進行通用控制存器(CCR)的配置,使能DS2153Q、HDB3碼的接收和發(fā)送、配置錯誤計數(shù)器更新時間、禁止動態(tài)存儲發(fā)送數(shù)據(jù)等。

⑤初始化中斷屏蔽寄存器,使能接收載波丟失、接收失步中斷、接收數(shù)據(jù)全0和全1中斷,使能發(fā)送時鐘丟失中斷,通過這些中斷使單片機可以及時得知DS2153Q的工作狀態(tài),實現(xiàn)單片機對其的實施監(jiān)測。

⑥初始化傳輸線接口單元,向LIRST數(shù)據(jù)位寫0,然后寫1,使傳輸線接口進入正常工作模式。

⑦初始化傳輸線接口控制寄存器,包括傳輸波形選擇、接收均衡器增益選擇、抗抖動抑器選擇等。

單片機控制流程如圖5所示。

下面是DS2153Q的功能配置程序(部分)。

;*****************************************************;

MOVA,02H

MOVDPTR,#RCR1

MOVX@DPTR,A;寫寄存器RCR1,使能自動重新同步

NOP

MOVA,#04H

MOVDPTR,#RCR2

MOVX@DPTR,A;寫寄存器RCR2,禁止彈性存儲功能

NOP

MOVA,#41H

MOVDPTR,#TCR1

MOVX@DPTR,A;寫寄存器TCR1,TSYNC為輸出方式

NOP

MOVA,#0F9H

MOVDPTR,#TCR2

MOVX@DPTR,A;寫寄存器TCR2,E數(shù)據(jù)位禁止自動置位

NOP

MOVA,#44H

MOVDPTR,#CCR1

MOVX@DPTR,A;寫寄存器CCR1,允許接收和發(fā)

NOP;HDB3碼

NOVA,#00H

MOVDPTR,#CCR2

MOVX@DPTR,A;寫寄存器CCR2,配置錯誤計數(shù)寄存器

NOP

;********************************************************

3.2DS2153Q狀態(tài)監(jiān)控設(shè)計

在完成DS2153Q的寄存器配置后,單片機即進入傳輸狀態(tài)監(jiān)測程序,實時監(jiān)控DS2153Q的工作正常與否,包括狀態(tài)寄存器的讀取和DS2153Q中斷的響應(yīng),并從中判斷故障、及時通報。

(1)發(fā)送狀態(tài)監(jiān)控

DS2153Q的發(fā)送狀態(tài)監(jiān)控是通過單片機的INT1來實現(xiàn)的。當(dāng)狀態(tài)寄存器的發(fā)送狀態(tài)位置1,則DS2153Q產(chǎn)生中斷,片機響應(yīng)該中斷來讀取當(dāng)前狀態(tài)寄存器的故障位。當(dāng)讀取完畢后,需要向該狀態(tài)寄存器特定狀態(tài)位寫1,保證以后的故障可以正確置位。

下面給出了NRZ發(fā)送時鐘丟失故障的狀態(tài)監(jiān)控程序(中斷1處理程序)。

MOVDPTR,#SR2;讀DS2153Q狀態(tài)寄存器2

NOP

MOVXA,@DPTR

ANLA,#04H

JNZERROR

SJMPFAVER

ERROR:SETBERR_SR

SJMPLOCKE

FAVER:CLRERR_SR

LOCKE:JNBERR_SR,WORK;判斷發(fā)送數(shù)據(jù)時鐘丟失與否

SETBP1.0;故障,工作指示二極管滅

SJMPEVER

WORK:CLRP1.0;正常,工作指示二極管亮

EVER:MOVDPTR,#SR2

MOVA,#04H

MOVX@DPTR,A

RETI

(2)接收狀態(tài)監(jiān)控

DS2153Q的接收狀態(tài)監(jiān)控是通過單片機的INT0來實現(xiàn)的。當(dāng)狀態(tài)寄存器的發(fā)送狀態(tài)位置1,則DS2153Q產(chǎn)生中斷,單片機響應(yīng)該中斷來讀取當(dāng)前狀態(tài)寄存器的故障位。當(dāng)讀取完畢后,需要向該狀態(tài)寄存器的特定狀態(tài)位寫1,保證以后的故障可以正確置位。

下面給出了HDB3碼接收載波丟失故障的狀態(tài)監(jiān)控程序(中斷0處理程序)。

MOVDPTR,#SR1;讀DS2153Q狀態(tài)寄存器21

NOP

MOVXA,@DPTR

ANLA,#02H

JNZERROR

SJMPFAVER

EPPOR:SETBERR_SR

SJMPLOCKE

FAVER:CLRERR_SR

LOCKE:JNBERR_SR,WORK;判斷接收載波丟失與否

SETBP1.0;故障,工作指示二極管滅

SJMPEVER

WORK:CLRP1.0;正常,工作指示二極管亮

EVER:MOVDPTR,#SR1

MOVA,#02H

MOVX@DPTR,A

RETI

第4篇

關(guān)鍵詞:多通道緩沖串行口McBSPTMS320C5402μPD780308SPIDSP

1引言

隨著信息技術(shù)革命的深入和計算機技術(shù)的飛速發(fā)展,DSP技術(shù)也正以極快的速度被應(yīng)用到科技和國民經(jīng)濟的各信領(lǐng)域。在很多工程開發(fā)設(shè)計中,由于要求實現(xiàn)單片DSP與單片DSP、多片DSP芯片以及及其它處理芯片之間的通信,因此,怎樣更高效、更便捷的實現(xiàn)這些通信,已成為廣大DSP應(yīng)用者首先要解決的一個問題。

本文根據(jù)筆者在工程應(yīng)用和調(diào)試方面用TI的DSPTMS320C5402與NEC的μPD780308單片機進行通信的經(jīng)驗,介紹并討論了將TMS320C5402DSP的多通道緩沖串行口McBSP(Multi-channelBufferedSerialPort)配置為SPI模式(即時鐘停止模式),從而實現(xiàn)DSP與其它單片處理器之間的通信設(shè)計方法同時給出了實現(xiàn)方法的部分程序代碼。

2多通道緩沖串行口McBSP

多通道緩沖串行口McBSP的功能是提供器件內(nèi)外數(shù)據(jù)的串行交換。同以前的串口相比,McBSP串口具有相當(dāng)大的靈活性。表1給出了有關(guān)TMS320C5402的McBSP管腳說明。其中串口接收、發(fā)送時鐘和同步幀信號既可由外部設(shè)備提供,又可由內(nèi)部時鐘發(fā)生器提供,從而大大的提高了通信的靈活性。

表1TMS320C5402的有關(guān)McBSP管腳說明

管腳說明說明

DR數(shù)據(jù)輸入端

DX數(shù)據(jù)輸出端

CLKR接收數(shù)據(jù)位時鐘

CLKX發(fā)送數(shù)據(jù)位時鐘

FSR接收數(shù)據(jù)幀時鐘

FSX發(fā)送數(shù)據(jù)幀時鐘

CLKS外部提供的采樣率發(fā)生器時鐘源

3SPI協(xié)議中的McBSP時鐘停止模式

SPI協(xié)議是以主從方式工作的,這種模式通常有一個主設(shè)備和一個或多個從設(shè)備,其接口包括以下四種信號:

(1)串行數(shù)據(jù)輸入(也稱為主進從出,或MISO);

(2)串行數(shù)據(jù)輸出(也稱為主出從進,或MOSI);

(3)串行移位時鐘(也稱為SCK);

(4)從使能信號(也稱為SS)。

圖1為設(shè)備的SPI接口示意圖。該接口在工作時,主設(shè)備通過提供移位時鐘和從使能信號來控制信息的流動。從使能信號是一個可選的高低電平,它可以激活從設(shè)備(在沒有時鐘提供的情況下)的串行輸入和輸出。在沒有專門的從使能信號的情況下,主從設(shè)備之間的通信則由移位時鐘的有無來決定,在這種連接方式下,從設(shè)備必須自始至終保持激活狀態(tài),而且從設(shè)備只能是一個,不能為多個。

TMS320C5402提供的時鐘停止模式可用于SPI協(xié)議通信,當(dāng)McBSP被配置為時鐘停止模式時,發(fā)送器和接收器在內(nèi)部是同步的,即可將發(fā)送數(shù)據(jù)幀時鐘(FSX)用作從使能(即SS),而將發(fā)送數(shù)據(jù)位時鐘(CLKX)用作SPI協(xié)議中SCK。由于收數(shù)據(jù)位時鐘(CLKR)和接收數(shù)據(jù)幀時鐘(FSR)在內(nèi)部與FSX和CLKX是相連的,因此,該管腳不能用于SPI模式。

當(dāng)McBSP被配置為一個主設(shè)備時,傳送輸出信號(BDX)被用作SPI協(xié)議的MOSI信號,而接收輸入信號(BDR)則被用作MISO信號。圖2所示為McBSP用作主設(shè)備時的SPI接口示意圖。

同樣地,當(dāng)McBSP被配置為一個從設(shè)備時,BDX被用作MISO信號,BDR則被用作MOSI信號。圖3為McBSP用作從設(shè)備的SPI接口示意圖。

當(dāng)TMS320C5402的McBSP被用于時鐘停止模式時,寄存器SPCR1的CLKSTP位域和引腳配置寄存器的CLKXP位的配置如表2所列。

表2時鐘停止模式配置

CLKSTPCLKXP說明

0XX不可用時鐘停止模式。時鐘被激活用于非SPI模式

100時鐘開始于上升沿(無延遲)

110時鐘開始于上升沿(有延遲)

101時鐘開始于下降沿(無延遲)

111時鐘開始于下降沿(有延遲)

4其它有關(guān)寄存器的配置

為了更好地掌握和了解McBSP作為SPI設(shè)備時的有關(guān)寄存器配置,現(xiàn)以McBSP作為SPI從設(shè)備來介紹有關(guān)McBSP的其它有關(guān)寄存器的配置,若McBSP做為SPI主設(shè)備,則相關(guān)配置正好相反。當(dāng)McBSP作為SPI從設(shè)備時,主設(shè)備外部產(chǎn)生主時鐘。CLKX引腳和FSX引腳必須被設(shè)置為輸入。由于CLKX引腳和CLKR信號在內(nèi)部相連接,因而傳送和接收回路均由外部主時鐘計時(CLKX)。同時,由于FSX引腳和FSR信號也已在內(nèi)部連接,因此,CLKR引腳和FSR引腳不再需要外部信號的連接。

盡管CLKX信號由主設(shè)備外部產(chǎn)生且與McBSP同步,但是,McBSP的采樣率發(fā)生器仍然必須正確啟動SPI從設(shè)備,同時,采樣率發(fā)生器還應(yīng)被設(shè)置為最大速率(CPU時鐘速率的一半)。另外,內(nèi)部采樣率時鐘常被用來同步McBSP邏輯和外部主時鐘以及從使能信號。每次傳送時,McBSP一般在從使能信號的上升沿進行FSX輸入。也就是說,在每次傳送的開始,主設(shè)備必須維護使能信號,而在每次傳送完成后,則必須消除從使能信號。在兩次傳送之間,從使能信號不能一直保持為高電平。對正確的SPI從設(shè)備而言,McBSP的數(shù)據(jù)延遲參數(shù)必須設(shè)置為0,在這種運行模式中,設(shè)置值為1或2沒有定義。配置McBSP為從設(shè)備所需的寄存器位值如表3所列。

表3SPI操作模式下的寄存器位值表

位域值功能描述寄存器

CLKXM0配置BCLKX引腳為輸入PCR

CLKSM1由CPU時鐘產(chǎn)生的采樣率時鐘SRGR2

CLKGDV1為采樣率時鐘選擇2的劃分因素SRGR1

FSXM0配置BFSX引腳為輸入PCR

FSGM0對每個包傳送,BFSX信號被激活SRGR2

FSXP1配置BFSX引腳為活動低電平PCR

XDATDLY0為SPI從設(shè)備運行,必須為0XCR2

RDATDLY0為SPI從設(shè)備運行,必須為0RCR2

5程序設(shè)計

下面是有關(guān)TMS320C5402器件的McBSP各個控制寄存器的配置,該配置程序筆者在實踐中已經(jīng)過測試,并已成功運用在了某工程設(shè)計中。

VoidMcBSP1_Config(void)

{

offlset=0x0000;

SPCR11=0x1800;;配置串口時鐘停止模式CLKSTP=10

offlset=0x0001;

SPCR21=0x0222;

offlset=0x0005;

SRGR11=0x00FA;

offlset=0x0007;

SRGR21=0xa00F;

offlset=0x0002;

RCR11=0x0040;;接收一幀含一字,一字含16位

offlset=0x0003;

RCR21=0x0044;接收數(shù)據(jù)無延遲RDATDLY=00

offlset=0x0004;

XCR11=0x0040;;發(fā)送一幀含一字,一字含16位

offlset=0x0005;

XCR21=0x0044;;發(fā)送數(shù)據(jù)無延遲XDATDLY=00

offlset=0x000E;

PCR1=0x000;;發(fā)送時鐘由外部時鐘驅(qū)動,CLKX為輸入腳CLKX=0,發(fā)送時鐘極性CLKXP=0,發(fā)送幀同步極性FSXP=1

offlset=0x0008;

MCR11=0x0001;

offlset=0x0009;

MCR21=0x0001;

offlset=0x000C;

XCERA1=0x0003;

offlset=0x0001;

SPCR21=0x0262;

offlset=0x0001;

SPCR21=0x0263;

offlset=0x0000;

SPCR11=0x1801;;接收器有效

offlset=0x0001;

SPCR21=0x02e3;;發(fā)送器有效

Return;

}

第5篇

鐵路計算機通信網(wǎng)絡(luò)管理中存在的問題

由于我國鐵路建設(shè)起步較晚,導(dǎo)致鐵路計算機網(wǎng)絡(luò)管理系統(tǒng)也只是在近些年初步成型。相比于發(fā)達國家,我國在鐵路計算機通信網(wǎng)絡(luò)管理運行中缺乏經(jīng)驗。完善的計算機網(wǎng)絡(luò)管理可以大大提高鐵路運行效率,保障列車安全。但是在實際運行中,由于計算機網(wǎng)絡(luò)建設(shè)不夠完善、尖端技術(shù)人員缺失、硬件軟件達不到規(guī)范要求等諸多問題,是影響鐵路管理正常運行的重要因素。

鐵路計算機通信網(wǎng)絡(luò)管理問題的解決對策

第6篇

關(guān)鍵詞:USB教學(xué)機器人通信

EDUROBOT-680-II型教學(xué)機器人是上海交通大學(xué)機器人研究所采用世界銀行貸款研制的一種五自由度多關(guān)節(jié)的機器人。它具備工業(yè)機器的基本功能、良好的開放性以及舒適的使用界面,主要大專院校和科研機構(gòu)提供教學(xué)和科研工具。學(xué)生可以通過親手操作了解和學(xué)習(xí)工業(yè)機器人,它具備工業(yè)機器人的基本功能、良好的開放性以及舒適的使用界面,主要為大專院校和科研機構(gòu)提供教學(xué)和科研工具。學(xué)生可以通過親手操作了解和學(xué)習(xí)工業(yè)機器人,科研人員還可對它進行二次開發(fā)。

教學(xué)機器人的上位機(主控計算機)和下位機(運動控制器)原先采用并行口(LPT1)的SPP方式進行通信。利用LPT1的狀態(tài)寄存器(StatusPort)具有的讀能力和每次傳送半字節(jié)(Nibble)來實現(xiàn)數(shù)據(jù)的雙向傳送功能。每次傳送的時序(次序)由軟件建立,在控制字的協(xié)調(diào)下按照教學(xué)機器人的通信協(xié)議接收和發(fā)送數(shù)據(jù)。

目前USB越來越普及,正逐漸取代串口和并口在計算機接口中的地位。為了研究USB在實時通信時的性能,筆者已將教學(xué)機器人上下位機通信改用USB端口實現(xiàn)。

圖1PL-2301結(jié)構(gòu)框圖

1USB特點及其應(yīng)用

通用串行總線USB(UniversalSerialBus)是1994年底由Compaq、IBM、Microsoft等多家公司聯(lián)合提出的一種計算機接噪覆亡,目前已發(fā)展到USB2.0。由于USB具有以下幾方面的特點,所以迅速普及,逐漸確定了在計算機接口中的主導(dǎo)地位。

(1)易用性。USB支持熱插拔和即插即用。

(2)可擴展性。用戶可以通過連接USB集線器到一個已有的端口來增加USB端口數(shù)量,集線器上還可以連更多的集線器。理論上可以連接127個外設(shè)到USB總線上。

(3)快速性。USB1.1版規(guī)定了兩種傳輸速率:低速傳輸和全速傳輸。低速傳輸?shù)乃俾适?.5Mbps,全速是12Mbps。這不但遠遠高于傳統(tǒng)的串口傳輸速率,也比并口傳輸快了好多倍。最近推出的USB2.0允許的最高傳輸速率高達480Mbps。

(4)可靠性。USB的可靠性來自硬件設(shè)計和USB數(shù)據(jù)傳輸協(xié)議兩方面的保證。USB驅(qū)動器、接收器和電纜的硬件規(guī)范消除了大多數(shù)可能引起數(shù)據(jù)錯誤的噪聲;USB協(xié)議使用了差錯校驗和數(shù)據(jù)重傳機制,可以最大程度保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。

(5)內(nèi)置電源。USB總線內(nèi)置電源線,可以給外設(shè)提供5V和最多500mA的電源供應(yīng),滿足大部分低功耗外設(shè)的電源要求。

由于USB具有這些突出的優(yōu)點,不但一些傳統(tǒng)外設(shè)開始提供USB接口,而且大量新型外設(shè)也把USB接口作為首先甚至唯一的接口,如MP3播放器、移動硬盤等。由于USB的高可靠性和足夠快的通信速率,USB開始應(yīng)用于工業(yè)級的實時通信和控制,例如機器人系統(tǒng)中示教盒與控制器的通信。本文論述的用USB端口實現(xiàn)機器人上位機與下位機的通信也屬于這些方面的應(yīng)用。

2用USB實現(xiàn)計算機雙機通信

由于USB模型是一種Host-Slave(主機-外設(shè))主從式結(jié)構(gòu),沒有辦法使兩臺主機不通過外設(shè)而直接通過USB總線通信。然而可通過增加外設(shè)控制器的方法使兩臺主機利用它們的USB端口通信。每個外設(shè)控制器連接到不同的主要,并利用共享的緩沖器交換數(shù)據(jù)。Cypress公司的EZ-Link和Prolific公司的PL-2301把兩個外設(shè)控制器和共享緩沖區(qū)集成到一塊芯片上,作為兩臺主機通過USB總線通俗訴橋梁。其它公司也提供類似的控制芯片。在教學(xué)機器人中,采用PL-2301。

PL-2301是臺灣Prolific公司生產(chǎn)的一種全速USB控制芯片。PL-2301的結(jié)構(gòu)框圖如圖1所示。

PL-2301包括兩套獨立的USB控制單元。在握手信號的協(xié)調(diào)下,它們通過兩個FIFO緩沖器無阻塞地交換數(shù)據(jù)。PL-2301包含四個終端:缺省的控制終端(地址00H)、中斷終端(地址81H)、塊輸出終端(地址02H)、塊輸入終端(地址83H)。控制傳輸用于在主機列舉階段完成對PL-2301的配置及在兩臺主機通信時控制PL-2301的握手信號;中斷傳輸用于PL-2301定期(每毫秒一次)向主機報告握手信號的狀態(tài);塊傳輸用于兩臺主機之間實時地交換數(shù)據(jù)。塊傳輸支持錯誤檢測,這對實時通信和控制很重要??刂苽鬏敱淮_保擁有10%的USB總線帶寬,中斷傳輸和等時傳輸最多可以使用90%的帶寬,塊傳輸使用剩余的最大可用帶寬(最多95%)。當(dāng)總線不太忙時,由于塊傳輸只有一個很小的協(xié)議頭(13字節(jié)),它是所有傳輸類型中最快的。為了確何教學(xué)機器人上下位機以最快的速度通信,滿足實時性要求,最好不要在USB總線上掛接過多的USB外設(shè)。

PL-2301除了能對USB標(biāo)準(zhǔn)請求做出反應(yīng)外,還能對幾種廠商自定義的請求做出反應(yīng)。自定義請求ClearQuickLinkFeature和SetQuickLinkFeature用于控制兩臺主機通信時PL-2301的握手信號。這些握手信號是:

(1)TX_RDY指示本地USB端口是否準(zhǔn)備好傳輸數(shù)據(jù)的指示信號。

(2)S_EN掛起使能信號。置位后,PL-2301支持標(biāo)準(zhǔn)的USB掛起特性。

(3)RESET_O塊輸出管道的復(fù)位信號,用于出現(xiàn)錯誤時復(fù)位塊輸出通道。

(4)RESET_IN塊輸入管道的復(fù)位信號,用于出現(xiàn)錯誤時復(fù)位塊輸入管道。

(5)TX_REQ塊傳輸?shù)恼埱笮盘枴?/p>

(6)TX_C塊傳輸完成的指示信號。

(7)PEER_E告訴對方本地端口是否連接好的指示信號。

在這幾個握手信號的協(xié)調(diào)下,上位機和下位機可以雙向通信。圖2是主機PCA向PCB傳輸數(shù)據(jù)的流程圖。這些底層的細節(jié)問題并不需要控制,由PL-2301的驅(qū)動程序完成。

圖3教學(xué)機器人控制系統(tǒng)軟件結(jié)構(gòu)

3軟件結(jié)構(gòu)

3.1教學(xué)機器人軟件結(jié)構(gòu)

EDUROBOT-680-II型教學(xué)機器人控制系統(tǒng)的控制軟件包括下位機的底層控制軟件和上位機的上層控制軟件,它們通過USB端口通信。其軟件結(jié)構(gòu)如圖3所示。

上層控制軟件運行在Windows98平臺上,它為用戶提供與機器人交互的人機接口界面,完成復(fù)雜運動控制的數(shù)據(jù)處理和插補計算。它由人機界面、運算插補、主控、通信四大模塊構(gòu)成。通信模塊能夠?qū)崟r地發(fā)送控制命令給下位機并從下位機獲得反饋信息,同時保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。

為了提供對USB的支持(為了使底層控制系統(tǒng)有更好的實時性和更緊湊,下一步準(zhǔn)備將底層控制系統(tǒng)改用支持USB的WindowsCE、VxWorks或嵌入式Linux),底層控制系統(tǒng)目前采用Windows98平臺。底層控制軟件接口收上層控制軟件的控制命令,同時解釋并執(zhí)行控制命令。這通過多線程實現(xiàn)。任務(wù)調(diào)度和管理模塊是底層控制軟件的主線程,它負責(zé)從指令隊列中取出指令并解釋執(zhí)行。主線程執(zhí)行過程會產(chǎn)生一個輔助線程——通信線程。通信線程調(diào)用通信模塊的輸出函數(shù),負責(zé)監(jiān)視USB端口。如果上位機傳來控制命令,則遵循教學(xué)機器人通信協(xié)議接收并存入指令隊列中。

3.2通信模塊的實現(xiàn)

上位機和下位機控制軟件共用相同的PL-2301客戶驅(qū)動程序、傳輸模塊(由Prolific公司提供)和通信模塊。

PL-2301客戶驅(qū)動程序是典型的WDM驅(qū)動程序。驅(qū)動程序屏蔽了底層的硬件細節(jié)和USB協(xié)議,使上層軟件僅通過驅(qū)動程序接口函數(shù)就可以訪問PL-2301。主要的幾個驅(qū)動程序接口函數(shù)是CreateFile()、WriteFile()、ReadFile()、DeviceIOControl()。

傳輸模塊(Transfer.dll)是驅(qū)動程序的上層模塊,它通過調(diào)用驅(qū)動程序接口函數(shù),實現(xiàn)了兩臺主機通過PL-2301通信的基本通信能力。Transfer.dll會產(chǎn)生一列三個線程:

(1)發(fā)送線程。這個線程對發(fā)送請求進行排隊并按先后順序處理請求。如果出現(xiàn)錯誤,則努力恢復(fù)。

(2)接收線程。這個線程等待來自狀態(tài)線程的消息,如果發(fā)現(xiàn)對方主機將要傳輸數(shù)據(jù),就按照傳輸協(xié)議接收數(shù)據(jù)。接收線程把接收到的數(shù)據(jù)放在接收FIFO緩沖器中,等待上層軟件(Comm.dll)取走。如果有錯誤發(fā)生時,也會努力恢復(fù)。

(3)狀態(tài)線程。這個線程監(jiān)視PL-2301的狀態(tài)信號。如果發(fā)現(xiàn)有任何狀態(tài)改變,它將給相關(guān)線程發(fā)消息或調(diào)用回調(diào)函數(shù)通知上層軟件。

Transfer.dll提供幾個供上層軟件(Comm.dll)調(diào)用的輸出函數(shù):

·USB_InitService()調(diào)用Transfer.dll里的其他輸出函數(shù)之間必須先調(diào)用這個函數(shù)。

·USB_OpenConnect()調(diào)用此函數(shù)獲得PL-2301的句柄。發(fā)送和接收數(shù)據(jù)時要用到這個句柄。

·USB_WriteConnect()調(diào)用此函數(shù)向?qū)Ψ街鳈C發(fā)送指定的數(shù)據(jù)。

·USB_ReadConnect()調(diào)用此函數(shù)從接收FIFO緩沖器中讀取數(shù)據(jù)。

第7篇

關(guān)鍵詞:單片機系統(tǒng)高速數(shù)據(jù)通信EPP

前言

單片機系統(tǒng)中常常需要具備與PC機通信的功能,便于將單片機中的數(shù)據(jù)傳送到PC機中用于統(tǒng)計分析處理;有時又需要將PC機中的數(shù)據(jù)裝入單片機系統(tǒng)中,對單片機程序進行驗證和調(diào)試。目前常用的通信方式是串行通信,但傳輸速率太低,以9600bps計算,傳輸1MB至少需要10min(分鐘)以上。并行通信克服了串行通信傳輸速率低的缺點。標(biāo)準(zhǔn)并行口SPP(StandardParallelPort)方式實現(xiàn)了由PC機向外設(shè)的單向傳輸,但實現(xiàn)PC機接收外設(shè)發(fā)送的數(shù)據(jù)則非常麻煩;而增強型并行口EPP(EnhancedParallelPort)協(xié)議卻很好地解決了這一問題,能夠?qū)崿F(xiàn)穩(wěn)定的高速數(shù)據(jù)通信。

一、EPP接口協(xié)議介紹

EPP協(xié)議最初是由Intel、Xircom、Zenith三家公司聯(lián)合提出的,于1994年在IEEE1284標(biāo)準(zhǔn)中。EPP協(xié)議有兩個標(biāo)準(zhǔn):EPP1.7和EPP1.9。與傳統(tǒng)并行口Centronics標(biāo)準(zhǔn)利用軟件實現(xiàn)握手不同,EPP接口協(xié)議通過硬件自動握手,能達到500KB/s~2MB/s的通信速率。

1.EPP引腳定義

EPP引腳定義如表1所列。

表1EPP接口引腳定義

引腳號SPP信號EPP信號方向說明

1StrobenWrite輸出指示主機是向外設(shè)寫(低電平)還是從外設(shè)讀(高電平)

2~9Data0~7Data07輸入/輸出雙向數(shù)據(jù)總線

10AckInterrupt輸入下降沿向主機申請中斷

11BusynWait輸入低電平表示外設(shè)準(zhǔn)備好傳輸數(shù)據(jù),高電平表示數(shù)傳輸完成

12PaperOut/EndSpare輸入空余線

13SelectSpare輸入空余線

14AutofdnDStrb輸出數(shù)據(jù)選通信號,低電平有效

15Error/FaultnDStrb輸入空余線

16InitializeSpare輸出初始化信號,低電平有效

17SelectedPrinternAStrb輸出地址數(shù)據(jù)選通信號,低電平有效

18~25GroundGroundGND地線

2.EPP接口時序

EPP利用硬件自動握手實現(xiàn)主機與外設(shè)之間的高速雙向數(shù)據(jù)傳輸,軟件只須對相應(yīng)端口寄存器進行讀/寫操作。

(1)EPP寫操作時序如圖1所示。

CPU實現(xiàn)向外設(shè)寫數(shù)據(jù)的操作步驟如下:

①程序?qū)PP數(shù)據(jù)寄存器執(zhí)行寫操作;

②nWrite置低;

③CPU將有效數(shù)據(jù)送到數(shù)據(jù)總線上;

④nDStrb(nAStrb)變低(只要nWait為低);

⑤主機等待nWait變高,確認數(shù)據(jù)發(fā)送成功;

⑥主機等待nWait變高,確認數(shù)據(jù)發(fā)送成功;

⑦EPP寫周期結(jié)束。

(2)EPP讀操作時序如圖2所示。

CPU實現(xiàn)從外設(shè)讀數(shù)據(jù)的操作步驟如下:

①程序?qū)ο鄳?yīng)EPP端口寄存器執(zhí)行讀操作;

②nDStrb(nAStrb)置低(如果nWait為低);

③主機等待nWait為高,確認數(shù)據(jù)發(fā)送成功;

④主機從并行口引腳讀取數(shù)據(jù);

⑤nDStrb(nAStrb)置高;

⑥EPP讀操作周期結(jié)束。

3.EPP端口寄存器

EPP接口除了保留SPP的3個端口寄存器以外,還新增了5個端口寄存器,如表2所列。

表2

地址端口名稱方向

基地址+0SPP數(shù)據(jù)端口寫

基地址+1EPP狀態(tài)端口讀

基地址+2EPP控制端口寫

基地址+3EPP地址端口讀/寫

基地址+4EPP地址端口讀/寫

基地址+5EPP數(shù)據(jù)端口讀/寫

基地口+6未定義(32位傳輸)讀/寫

基地址+7未定義(32位傳輸)讀/寫

EPP狀態(tài)端口寄存器

WAITINTRUSER1USER2USER3××TMOUT

WAIT:Wait狀態(tài)位(1有效);

INTR:中斷請求狀態(tài)位(1有效);

USER1~USER3:用戶自定義;

TMOUT:保留(EPP1.7)超時標(biāo)志位(EPP1.9)。

EPP控制端口寄存器。

××DIRIRQENASTRBINITDSTRBWRITE

DIR:方向位(1輸入,0輸出);

IRQEN:中斷使能位(1有效);

ASTRB:地址選通位(0有效);

INIT:初始化(1有效);

DSTRB:數(shù)據(jù)選通位(0有效);

WRITE:讀/寫狀態(tài)位(0:寫,1:讀)。

讀取接口狀態(tài)和控制接口都只須對相應(yīng)的端口寄存器進行操作。以初始化為例:

讀操作初始化:outportb(port+2,0x24);

//port為SPP數(shù)據(jù)端口地址

寫操作初始化:outportb(port+2,0x04);

//port+2為EPP控制端口地址

4.EPP1.7和EPP1.9

EPP接口最先有EPP1.7標(biāo)準(zhǔn)定義,由于硬件廠商的原因,EPP現(xiàn)有兩個標(biāo)準(zhǔn):EPP1.7和EPP1.9,可以在BIOS/設(shè)備/并行口(BIOS/PeripheralSetup/ParallelPortMode)方式中進行設(shè)置。兩者有如下不同點:

(1)EPP狀態(tài)端口寄存器的最低位bit0,在EPP1.9中定義為TMOUT。在EPP操作時序中,如果PC機數(shù)據(jù)(地址)選通信號變低后,且在10μs時間內(nèi),外設(shè)未能將nWait置為低,則TMOUT置為1,表示延時。

(2)EPP1.9標(biāo)準(zhǔn)中,只有當(dāng)nWait為低時,才能開始一個操作周期;但在EPP1.7中,無論nWait狀態(tài)如何,nAstrb(nDstrb)都會被置低,從而開始一個新的數(shù)據(jù)(地址)操作周期。

二、EPP接口傳輸數(shù)據(jù)的一個實例

在某單片機系統(tǒng)中,須要將單片機系統(tǒng)中數(shù)據(jù)存儲器的大量數(shù)據(jù)傳輸?shù)絇C機中進行分析處理。EPP接口(采用EPP1.7標(biāo)準(zhǔn))硬件電路及軟件流程圖如圖3~圖5所示。

GAL譯碼電路方程式為/O1=/I1*/I2*/I3*I4*/I5,EPP接口選通地址為2000H。當(dāng)單片機執(zhí)行如下指令:

MOVDPTR,#2000H

MOVX@DPTR,A

就將寄存器A中的數(shù)據(jù)鎖存到數(shù)據(jù)總線上,便于PC機利用EPP接口進行讀操作。

C語言例程:

#defineSPPDATA0x0378//定義各寄存器地址

#defineSPPSTAT0x0379

#defineSPPCNTL0x037A

#defineEPPADDR0x037B

#defineEPPDATA0x037C

#include<stdio.h>

FILE*fp;

Intdata;

Longi;

intk;

fp=fopen(filename,"wb");//打開要存儲數(shù)據(jù)的文件

outportb(SPPCNTL,0x24);

//向控制端口發(fā)00100100代碼,初始化為讀操作模式for(i=0;i<524288;i++)

{

while(!((inportb(SPPSTAT))&0x80))

//查詢是否發(fā)送完畢

{}

data=inportb(EPPDATA);//讀數(shù)據(jù)

fputc(data,fp);//將數(shù)據(jù)存入文件

}

fclose(fp);//關(guān)閉文件

單片機匯編語言程序為:

FLAG1BITP1.7;標(biāo)志位

FLAG2BITP3.4

STADDEQU0000H;要傳輸數(shù)據(jù)段的起始地址

NUMEQUFFFFH;要傳輸數(shù)據(jù)端的字節(jié)個數(shù)

COMMUN:MOVDPTR,#STADD

COMM1:MOVXA,@DPTR

PUSHDPH

PUSHDPL

MOVDPTR,#EPP_CE

MOVX@DPTR,A

POPDPL

POPDPH

SETBFLAG1;將P1.7置高

CLRFLAG2;將P3.4置低

JBFLAG1,$;查詢P1.7為低,即nDStrb為低,表示PC讀操作已完成

SETBFLAG2;將P3.4置高

SETBFLAG1;將P1.7置高

INCDPTR

CJNENUM,COMM1;循環(huán)NUM次

RET

實際應(yīng)用該接口電路,能實現(xiàn)1MB/s的傳輸速率,并且性能穩(wěn)定可靠。

如果應(yīng)用EPP1.9標(biāo)準(zhǔn),硬件電路不用變動,軟件中可以省略對nWait進行判斷的環(huán)節(jié),速率能接近2MB/s。