<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > POWERPC860T實(shí)現多以太網(wǎng)口通信

POWERPC860T實(shí)現多以太網(wǎng)口通信

作者: 時(shí)間:2006-05-07 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:摩托羅拉公司的POWER PC系列芯片是眾多嵌入式高端通信設備的首選。該系列芯片配合主流的實(shí)時(shí)多任務(wù)操作系統VxWorks,可滿(mǎn)足大多數高端通信設備的要求的低功耗、高性能、高可靠性的要求。本文闡述在摩托羅拉公司MPC860系列芯片上實(shí)現雙以太網(wǎng)口通信的方法,并給出實(shí)現的具體源代碼。

本文引用地址:http://dyxdggzs.com/article/244638.htm

關(guān)鍵詞:POWERPC860 VxWorks TCP/IP 多以太網(wǎng)接口 DRIVER加載 RTOS

通過(guò)TCP/IP協(xié)議棧來(lái)實(shí)現數據通信,是目前大多數通信設備所必備的。在以太網(wǎng)上實(shí)現TCP/IP更是一種價(jià)廉物美的選擇。本文描述的正是這種通信設備一種實(shí)現方法。

通信控制設備大多是嵌入式系統,求CPU功耗低、接口種類(lèi)豐富。POWERPC 860T芯片是摩托羅拉公司MPC860系列通信專(zhuān)用嵌入式CPU的產(chǎn)品,主要特點(diǎn)是增加了1個(gè)10/100M自適應以太網(wǎng)口,工作頻率可達80MHz,廣泛地用于中、高檔通信設備。其內部結構框圖如圖1所示。

從圖1中可以看出,860T芯片主要由微處理器內核(embedded POWEPRPC core)、系統接口單元SIU(System Interface Unit)、通信處理器單元CPM(Communication Processor Module)和快速以太網(wǎng)模塊FEM(Fast Ethernet Module)等組成。由于860T中集成了許多外圍接口的控制器,同FLASH、SRAM、SDRAM等各種存儲器可實(shí)現無(wú)縫隙連接。外部通信接口一般只需添加線(xiàn)路接口單元。本文實(shí)現的系統硬件框圖如圖2所示。FLASH采用的是AM29LV017,SRAM為SODIMM SDRAM條。

CPU部分的4個(gè)SCC均可配置為10M以太網(wǎng)控制器,FEM為一個(gè)10/100M以太網(wǎng)自適應控制器。通過(guò)這些以太網(wǎng)控制器,只需簡(jiǎn)單的線(xiàn)路接口單元就可構成10M以太網(wǎng)口和10/100M自適應網(wǎng)口。該以太網(wǎng)口符合IEEE802.3規范。實(shí)際使用中,860T設備多少個(gè)網(wǎng)口,應根據芯片的運行主頻和接口要求來(lái)統籌考慮。在設計時(shí),相關(guān)的性能計算可使用摩托羅拉公司推供的軟件進(jìn)行估算。我們在50 MHz MPC860T芯片上,實(shí)現了1個(gè)10M網(wǎng)口(采用SCC1實(shí)現,如圖3所示)和1個(gè)10/100M自適應網(wǎng)口(如圖4所示)。

MPC860T中I/O口引腳幾乎都有多種功能,通過(guò)對有關(guān)的寄存器進(jìn)行設置或將某些引腳設置成指定電位,使得有關(guān)I/O口的功能為設計指定的功能。在設計時(shí),可能會(huì )發(fā)現某些多功能引腳要么只能處于A(yíng)功能,要么處于B功能,無(wú)法使得A、B功能同時(shí)滿(mǎn)足。由于MPC860T的引腳多、各引腳的功能也多,為了能夠盡快地確定各引腳的功能,可利用摩托羅拉公司提供的引腳功能安排工具,檢查引腳功能上的沖突。

MPC860T是遵照POWERPC結構體系的嵌入式芯片系列,因此可實(shí)現多任務(wù)操作,并支持多種內存映射方式,完全能夠運行實(shí)時(shí)多任務(wù)操作系統,以便滿(mǎn)足通信控制設備所要求的實(shí)時(shí)性。

Wind River公司的VxWorks實(shí)時(shí)多任務(wù)嵌入式操作系統是大多數實(shí)時(shí)嵌入式系統的首選,具有其它嵌入式操作系統無(wú)法比擬的內核代碼少、裁剪性強、實(shí)時(shí)性強、軟件模塊多等優(yōu)點(diǎn)。本文的多網(wǎng)口通信實(shí)現是在VxWorks集成環(huán)境TORNADO 2.0下開(kāi)發(fā)的。關(guān)于VxWorks實(shí)時(shí)嵌入式操作系統可參見(jiàn)Wind River公司的相關(guān)資料。

VxWorks支持TCP/IP協(xié)議棧,用戶(hù)程序可通過(guò)BSD套接字方式訪(fǎng)問(wèn)網(wǎng)絡(luò ),工作方式和Windows下的BSD套接字方式基本一樣。

VxWorks的TCP/IP協(xié)議棧與網(wǎng)絡(luò )設備驅動(dòng)的接口有兩種。一種是標準的BSD4驅動(dòng)程序。它將驅動(dòng)程序和協(xié)議緊密關(guān)聯(lián)在一起,不利于多協(xié)議的支持(后期BSD進(jìn)行了改進(jìn),可實(shí)現多協(xié)議的支持)。VxWorks不推薦使用BSD4驅動(dòng)程序。另一種標準是VxWorks專(zhuān)有的END(Enhanced Network Driver)驅動(dòng)程序。它通過(guò)一個(gè)稱(chēng)為MUX的薄層,將驅動(dòng)程序和協(xié)議棧隔離開(kāi),達到驅動(dòng)程序獨立于具體協(xié)議的目的,從而實(shí)現多協(xié)議的支持。END驅動(dòng)程序技術(shù)多播和輪詢(xún)通信方式。因此,我們采用END驅動(dòng)程序方式來(lái)實(shí)現網(wǎng)絡(luò )設備驅動(dòng)程序,擴展通信功能。

VxWorks的驅動(dòng)程序既可以在啟動(dòng)時(shí)加載,也可以在系統啟動(dòng)后加載。不過(guò)網(wǎng)絡(luò )驅動(dòng)程序,最好是在啟動(dòng)時(shí)加載(本文采用此方式)。VxWorks啟動(dòng)時(shí),發(fā)起的tUsrRoot任務(wù)初始化網(wǎng)絡(luò )任務(wù)的JOB隊列,同時(shí)發(fā)起tNetTask任務(wù)來(lái)處理網(wǎng)絡(luò )任務(wù)中的JOB隊列,調用muxDevLoad()裝載用戶(hù)網(wǎng)絡(luò )設備驅動(dòng)程序。之后,通過(guò)muxDevStart()啟動(dòng)該網(wǎng)絡(luò )設備驅動(dòng)程序。

用戶(hù)驅動(dòng)程序的中斷例程,通過(guò)sysIntConnect()掛接在系統的中斷結構上。一般在muxDevStart()中完成該工作。

驅動(dòng)程序的中斷例程,一般盡可能少地做一些將接收的數據包搬移工作,以減少中斷關(guān)閉的時(shí)間。用戶(hù)的實(shí)際中斷處理服務(wù)例程放在netJob任務(wù)中完成(中斷例程通過(guò)netJobAdd()函數將實(shí)際中斷處理服務(wù)例程加到netJob任務(wù)的隊列中)。

用戶(hù)在編寫(xiě)好驅動(dòng)程序后,應根據要求修改板級支持軟件包(BSP)中confignet.h的內容,以例系統正確加載。主要修改endTb1表。

修改config.h中的相關(guān)內容:在默認情況下,系統僅僅支持1個(gè)網(wǎng)絡(luò )接口。如果在config.h包含了#define FADS_860T,那么默認啟動(dòng)能夠工作的是100M的網(wǎng)絡(luò )接口(motfec0);如果在config.h中沒(méi)有包含#define FADS_860T,那么默認啟動(dòng)能夠工作的是10M的網(wǎng)絡(luò )接口(cpm0)。

操作系統根據啟動(dòng)參數來(lái)對網(wǎng)絡(luò )接口進(jìn)行配置,簡(jiǎn)要流程如下:

①在usrRoot()中調用usrNetworkInit()(在prjConfig.c中)。在usrNetworkInit()中調用:

*usrNetProtoInit()初始化網(wǎng)絡(luò )協(xié)議堆棧(包括BSD Socket Support、Host Table、BSD4.4Ipv4、BSD4.4UDPv4、BSD4.4TCPv4、BSD4.4ICMPv4、BSD4.4IGMPv4以及調試和show facility部分等等)。

*muxLibInit()初始化連接協(xié)議與END driver的mux層。

*usrEndLibInit()(在comps/src/net/usrEndLib.c中)支持使用mux/END接口的網(wǎng)絡(luò )設備。

*usrNetworkBoot()使用啟動(dòng)參數來(lái)初始化一個(gè)網(wǎng)絡(luò )設備。

*usrNetAppInit()初始化網(wǎng)絡(luò )應用協(xié)議和一些server,比如RPC、rlogin、telnet server以及ftp server等等。

②在usrEndibInit()中,遍歷configNet.h內的endDevTb1[]數組,調用muxDevLoad(…)裝載END驅動(dòng)程序,并調用muxDevStart(…)將它啟動(dòng)。

③在usrNetworkBoot()中調用:

*usrNetBoot()從命令參數行(bootline)提取網(wǎng)絡(luò )接口的IP地址、目標名字(target name)以及單元號(unit number).

*usrNetmaskGet()獲取接口的網(wǎng)絡(luò )掩碼。

*usrNetworkDevStart()加入并配置一個(gè)網(wǎng)絡(luò )設備(cpm或者motfec)。

④在usrNetworkDevStart()中,調用usrNetEndDevStart(…)、usrNetBsdDevStart(…)以及usrNetLoopbackStart()。以上3個(gè)函數中,使用命令參數行啟動(dòng)了1個(gè)物理網(wǎng)絡(luò )接口以及1個(gè)本地回路接口。

從以上流程來(lái)看,當定義了FADS_860T時(shí),默認根據命令參數行(在config.h中,有一個(gè)初始的默認值DEFAULT_BOOT_LINE)啟動(dòng)并配置了一個(gè)motfec網(wǎng)絡(luò )接口。

支持雙網(wǎng)口時(shí)的修改:

①在config.h中加入#define INCLUDE_CPM這一行。

②在configNet.h中,于#ifndef IP_MAX_UNITS行之前加入1行:#undef IP_MAX_UNITS。在默認情況下,由于僅僅支持motfec接口,IP_MAX_UNITS的值為1。因此,需要重新定義IP_MAX_UNITS,使其等于我們加入的mux有關(guān)的網(wǎng)絡(luò )接口的個(gè)數。

③在usrNetEndDevStart(…)中的#endif /*

CPU = =SIMNT*/行之后加入以下幾行代碼;

#ifdef FADS_860T

#ifdef INCLUDE_CPM

usrCPMEndDevStart(“cpm”,1,InInfo[0].target_name,InPnfo[0].ip_address,InInfo[0].netmask);

routeAdd(IpInfo[0].network,IpInfo[0].gateway);

#endif

#endif/*FADS_860T*/

以下是有關(guān)定義以及usrCPMEndDevStart(…)的源代碼:

struct cpmInInfo{

char *target_name; /*目標的名稱(chēng)*/

char *ip_address; /*目標的IP地址*/

char *network; /*網(wǎng)絡(luò )*/

int netmask; /*網(wǎng)絡(luò )的掩碼*/

char *gateway; /*網(wǎng)關(guān)*/

};

struct cpmInInfo IpInfo[]= {

{NULL,NULL,NULL,0,NULL},

{NULL,NULL,NULL,0,NULL},

{NULL,NULL,NULL,0,NULL}

};

void usrCPMEndDevStart ();

void usrCPMEndDevStart (

char* pDevName, /*設備的名稱(chēng)*/

int unitNum, /*單元號*/

char* pTgtName, /*目標機名稱(chēng)*/

char* pAddrString, /*網(wǎng)絡(luò )地址*/

int netmask /*網(wǎng)絡(luò )掩碼*/

{

END_OBJ* pEnd;

M2_INTERFACETBL endM2Tb1;

if(pDevName= =NULL)

return;

#ifdef INCLUDE_END

pEnd=endFindByName(pDevName,unitNum);

if(pEnd= =NULL){

printf(Could not find %s%d,pDevName,unitNum);

returm;

}

if(muxIoctl(pEnd,EIOCGMIB2,(caddr_t)endM2Tbl)= =ERROR)}

printf(Cannot perform EIOCMIB2 ioctl.);

return;

}

if(ipAttach(unitNum,pDevName)!=OK){

printf(Failed to attach to device %s,pDevName);

return;

}

if(usrNetIfConfig(pDevName,unitNum,pAddrString,pTgtName,netmask)!=OK){

printf(Failed to configure %s%d for IP.,pDevName,unitNum);

return;

}

printf(Attached TCP/IP interface to %s unit %d,

pDevName,unitNum);

#endif /*INCLUDE_END*/

return;

}

以上我們加入的設備名字由設備名和unit number組成。在加入第2個(gè)網(wǎng)絡(luò )接口之前,第1個(gè)網(wǎng)絡(luò )接口motfec0已經(jīng)可以正常工作了。由于所有的ENDDRIVER都是通過(guò)遍歷在configNet.h中的endDevTbl[]數組而啟動(dòng)的,因此第2個(gè)網(wǎng)絡(luò )接口的unit number是1。依次數推,第3個(gè)網(wǎng)絡(luò )接口的unit number是2…。我們加入的第2個(gè)網(wǎng)絡(luò )接口的名字為cpml。

在支持雙網(wǎng)口時(shí),不同的網(wǎng)口應處在不同的網(wǎng)段上,每一個(gè)網(wǎng)口可支持多個(gè)網(wǎng)絡(luò )地址。

tcp/ip相關(guān)文章:tcp/ip是什么




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>