精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于POWERPC860T芯片和VxWorks操作系統實現以太網通信系統設計

電子設計 ? 來源:單片機與嵌入式系統應用 ? 作者:王保華,方惠如 ? 2020-06-08 08:00 ? 次閱讀

通過TCP/IP協議棧來實現數據通信,是目前大多數通信設備所必備的。在以太網上實現TCP/IP更是一種價廉物美的選擇。本文描述的正是這種通信設備一種實現方法。

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

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

基于POWERPC860T芯片和VxWorks操作系統實現以太網通信系統設計

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

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

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

Wind River公司的VxWorks實時多任務嵌入式操作系統是大多數實時嵌入式系統的首選,具有其它嵌入式操作系統無法比擬的內核代碼少、裁剪性強、實時性強、軟件模塊多等優點。本文的多網口通信實現是在VxWorks集成環境TORNADO 2.0下開發的。關于VxWorks實時嵌入式操作系統可參見Wind River公司的相關資料

VxWorks支持TCP/IP協議棧,用戶程序可通過BSD套接字方式訪問網絡,工作方式和Windows下的BSD套接字方式基本一樣。

VxWorks的TCP/IP協議棧與網絡設備驅動的接口有兩種。一種是標準的BSD4驅動程序。它將驅動程序和協議緊密關聯在一起,不利于多協議的支持(后期BSD進行了改進,可實現多協議的支持)。VxWorks不推薦使用BSD4驅動程序。另一種標準是VxWorks專有的END(Enhanced Network Driver)驅動程序。它通過一個稱為MUX的薄層,將驅動程序和協議棧隔離開,達到驅動程序獨立于具體協議的目的,從而實現多協議的支持。END驅動程序技術多播和輪詢通信方式。因此,我們采用END驅動程序方式來實現網絡設備驅動程序,擴展通信功能。

VxWorks的驅動程序既可以在啟動時加載,也可以在系統啟動后加載。不過網絡驅動程序,最好是在啟動時加載(本文采用此方式)。VxWorks啟動時,發起的tUsrRoot任務初始化網絡任務的JOB隊列,同時發起tNetTask任務來處理網絡任務中的JOB隊列,調用muxDevLoad()裝載用戶網絡設備驅動程序。之后,通過muxDevStart()啟動該網絡設備驅動程序。

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

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

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

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

操作系統根據啟動參數來對網絡接口進行配置,簡要流程如下:

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

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

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

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

*usrNetworkBoot()使用啟動參數來初始化一個網絡設備。

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

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

③在usrNetworkBoot()中調用:

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

*usrNetmaskGet()獲取接口的網絡掩碼。

*usrNetworkDevStart()加入并配置一個網絡設備(cpm或者motfec)。

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

從以上流程來看,當定義了FADS_860T時,默認根據命令參數行(在config.h中,有一個初始的默認值DEFAULT_BOOT_LINE)啟動并配置了一個motfec網絡接口。

支持雙網口時的修改:

①在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有關的網絡接口的個數。

③在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*/

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

struct cpmInInfo{

char *target_name; /*目標的名稱*/

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

char *network; /*網絡*/

int netmask; /*網絡的掩碼*/

char *gateway; /*網關*/

};

struct cpmInInfo IpInfo[]= {

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

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

{NULL,NULL,NULL,0,NULL}

};

void usrCPMEndDevStart ();

void usrCPMEndDevStart (

char* pDevName, /*設備的名稱*/

int unitNum, /*單元號*/

char* pTgtName, /*目標機名稱*/

char* pAddrString, /*網絡地址*/

int netmask /*網絡掩碼*/

{

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個網絡接口之前,第1個網絡接口motfec0已經可以正常工作了。由于所有的ENDDRIVER都是通過遍歷在configNet.h中的endDevTbl[]數組而啟動的,因此第2個網絡接口的unit number是1。依次數推,第3個網絡接口的unit number是2…。我們加入的第2個網絡接口的名字為cpml。

在支持雙網口時,不同的網口應處在不同的網段上,每一個網口可支持多個網絡地址。

責任編輯:gt


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    454

    文章

    50460

    瀏覽量

    421979
  • 以太網
    +關注

    關注

    40

    文章

    5385

    瀏覽量

    171162
  • 操作系統
    +關注

    關注

    37

    文章

    6747

    瀏覽量

    123204
收藏 人收藏

    評論

    相關推薦

    實現以太網通信硬件電路方法

    實現以太網通信硬件電路方法很多,一般情況是CPU+MAC+PHY+網絡變壓器+RJ45。整個硬件電路最多用5個電子器件完成。
    發表于 10-20 09:25 ?835次閱讀
    <b class='flag-5'>實現以太網通信</b>硬件電路方法

    怎樣實現以太網通訊?

    用LabVIEW實現以太網通訊需要設置哪些參數?怎樣實現通訊?
    發表于 12-14 19:31

    請問UDP SOCKET要用操作系統才可以實現以太網通信嗎?

    公司一個項目要用UDP SOCKET實現以太網通信,能不用操作系統嗎,如果不用的話這句又怎么破:#if ((LWIP_SOCKET||LWIP_NETCONN)&&(NO_SYS==1))#error"…" #endif
    發表于 03-26 04:36

    怎么實現以太網的光無線通信系統的設計?

    怎么實現以太網的光無線通信系統的設計?
    發表于 05-28 07:08

    實時操作系統VxWorks下的并口通信技術

    實時操作系統VxWorks下的并口通信技術
    發表于 03-29 12:26 ?11次下載

    嵌入式實時操作系統VxWorks中串口通信實現

    嵌入式實時操作系統VxWorks中串口通信實現
    發表于 03-29 12:27 ?19次下載

    POWERPC 860T 實現以太網通信

    摩托羅拉公司的POWER PC 系列芯片是眾多嵌入式高端通信設備的首選。該系列芯片配合主流的實時多任務操作系統VxWorks,可滿足大多數高
    發表于 05-14 14:45 ?10次下載

    用51單片機控制RTL8029實現以太網通信

    摘要:本文介紹了TCP/IP協議、RTL8029的結構特性以及PCI總線協議的特點,給出了一種用P89C51RD2單片機控制以太網接口芯片RTL80內實現以太網通信的設計方案,闡述了用EMP7128型CPLD
    發表于 09-19 21:11 ?58次下載

    基于MPC8260和VxWorks實現快速以太網通信

    摩托羅拉MPC8260 微處理器芯片因其強大的通信處理能力和多種協議的支持而被廣泛應用于通信和網絡領域。本文以MPC8260 為例,探討在嵌入式系統
    發表于 10-08 16:05 ?32次下載

    VxWorks以太網通信報文的粘連問題

    VxWorks以太網通信報文的粘連問題   VxWorks是美國Wind River公司推出的一款專門為實時系統設計開發的操作系統內核,
    發表于 03-29 15:14 ?933次閱讀
    <b class='flag-5'>VxWorks</b>中<b class='flag-5'>以太網通信</b>報文的粘連問題

    TM1300芯片以太網通信接口的設計和實現

    設計通過TM1300的PCI接口驅動以太網芯片實現了一種以太網通信接口。該方案將擅長多媒體信號處理的TM1300和十分普及的以太網結合起來
    發表于 05-05 19:44 ?1075次閱讀
    TM1300<b class='flag-5'>芯片</b>的<b class='flag-5'>以太網通信</b>接口的設計和<b class='flag-5'>實現</b>

    單片機實現以太網通訊硬件設計

    介紹以太網的幀協議和以太網控制芯片RTL8019AS的結構特性;介紹單片機控制RTL8019AS實現以太網通訊的硬件設計方案;采用c51語言實現
    發表于 08-29 16:32 ?126次下載
    單片機<b class='flag-5'>實現以太網通</b>訊硬件設計

    W5100在單片機實現以太網通信中的應用

    在此介紹了一種基于單片機和W5100組合實現以太網通信的設計方法。采用以TCPdP協議為基礎的網絡解決方案。W5100是嵌入式以太網硬件協議棧芯片,它同時集TCP/IP協議棧、以太網M
    發表于 04-24 15:13 ?153次下載
    W5100在單片機<b class='flag-5'>實現以太網通信</b>中的應用

    基于VxWorks操作系統下光纖通道通信軟件的實現

    基于VxWorks操作系統下光纖通道通信軟件的實現
    發表于 08-31 17:08 ?4次下載
    基于<b class='flag-5'>VxWorks</b><b class='flag-5'>操作系統</b>下光纖通道<b class='flag-5'>通信</b>軟件的<b class='flag-5'>實現</b>

    如何使用51單片機控制RTL8019AS實現以太網通

    介紹以太網的幀協議和以太網控制芯片RTL8019AS的結構特性;介紹51單片機控制RTL8019AS實現以太網通訊的硬件設計方案;采用C51語言實現
    發表于 07-19 17:37 ?12次下載
    如何使用51單片機控制RTL8019AS<b class='flag-5'>實現以太網通</b>訊