ucos操作系統(tǒng)在ARM上的移植_第1頁(yè)
ucos操作系統(tǒng)在ARM上的移植_第2頁(yè)
ucos操作系統(tǒng)在ARM上的移植_第3頁(yè)
ucos操作系統(tǒng)在ARM上的移植_第4頁(yè)
ucos操作系統(tǒng)在ARM上的移植_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、UC/OS-II嵌入式系統(tǒng)在ARM上的移植UC/OS-II操作系統(tǒng)是一款完全公開(kāi)的源代碼,它非常精簡(jiǎn),整個(gè)操作系統(tǒng)的代碼只有幾千行,是專門針對(duì)于嵌入式開(kāi)發(fā)而產(chǎn)生的一款代碼。它有幾個(gè)特點(diǎn),分別是可移植性(Portable)、可固化(ROMable)、可裁剪(Scalable)、多任務(wù)、可確定性、任務(wù)棧、系統(tǒng)服務(wù)、中斷管理、穩(wěn)定性可靠性。UC/OS-II主要就是一個(gè)內(nèi)核,由ANSIC語(yǔ)言編寫而成。負(fù)責(zé)任務(wù)管理和任務(wù)調(diào)度,沒(méi)有文件系統(tǒng)和界面系統(tǒng)。它的代碼是公開(kāi)的,系統(tǒng)的實(shí)時(shí)性強(qiáng)、移植性好、可多任務(wù)。UC/OS-II作為基于優(yōu)先級(jí)的搶占式多任務(wù)的實(shí)時(shí)操作系統(tǒng),包含了實(shí)時(shí)內(nèi)核、任務(wù)管理、時(shí)間管理、任務(wù)間

2、通信同步和內(nèi)存管理的功能。它使得任務(wù)的獨(dú)立性,不相互干涉,非常的準(zhǔn)時(shí)和高效,且易于設(shè)計(jì)和擴(kuò)展。UO/OS-II共有16個(gè)內(nèi)核文件,11個(gè)與CPU類型無(wú)關(guān),就是說(shuō)可以直接使用不需要修改。還有3個(gè)內(nèi)核文件與CPU有關(guān)系,要根據(jù)需要作出相應(yīng)的改動(dòng)。剩下的兩個(gè)內(nèi)核文件和具體的應(yīng)用有關(guān)。如圖所示UC/OS-II的16個(gè)內(nèi)核文件的層次。應(yīng)用程序與處理器類型無(wú)關(guān)的內(nèi)核代碼OSCORE.COS_FLAG.C與應(yīng)用有關(guān)的內(nèi)核配置文件OS_CFG.HINCLUDE.HOS_MBOX.COS_MEN.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.C心/OS-II.COSTIME.CpC/OS-I

3、I.C與處理器類型有美的內(nèi)核代碼OS_CPU.HOS_CPU.ASMOS_CPU_C.C軟件硬件CPU定時(shí)器CC/OSII內(nèi)核文件多任務(wù)操作的核心是系統(tǒng)調(diào)度器,利用TCB來(lái)管理任務(wù)調(diào)度功能。它的主要功能是保存任務(wù)的當(dāng)前態(tài)、優(yōu)先級(jí)、等待事件、代碼起始地址、初始堆棧指針等。程序的設(shè)計(jì)關(guān)鍵就是確定劃分多任務(wù)的問(wèn)題,以及任務(wù)優(yōu)先級(jí)和任務(wù)通信。優(yōu)先級(jí)的意思是每個(gè)任務(wù)都是無(wú)限循環(huán)的,有運(yùn)行態(tài)度、就緒態(tài)、休眠態(tài)、掛起態(tài)和中斷五種狀態(tài)。當(dāng)有高一級(jí)優(yōu)先級(jí)的任務(wù)就緒后,低優(yōu)先級(jí)立即停止運(yùn)行,轉(zhuǎn)為掛起態(tài)或就緒態(tài)。這就是可剝奪型的內(nèi)核。當(dāng)中斷一個(gè)高優(yōu)先級(jí)任務(wù),中斷時(shí)掛起,中斷結(jié)束后任務(wù)繼續(xù)運(yùn)行,并立即剝奪低優(yōu)先級(jí)的任

4、務(wù)。對(duì)于這種可剝奪型內(nèi)核,CPU的使用時(shí)可以確定的,可優(yōu)化任務(wù)級(jí)響應(yīng)。在很多單片機(jī)或ARM板上很容易就可以移植UC/OS-II。當(dāng)然本次設(shè)計(jì)使用的TQ2440,也可以完美的移植它。移植程序在網(wǎng)上都可以找得到,所以設(shè)計(jì)中就不做解釋了。本次設(shè)計(jì)實(shí)現(xiàn)的是串口協(xié)議和網(wǎng)口協(xié)議組合成的一個(gè)數(shù)據(jù)網(wǎng)關(guān)。其主要的流程圖如下所示:如圖所示可以很清楚的看出內(nèi)核操作系統(tǒng)對(duì)于整個(gè)系統(tǒng)的控制過(guò)程,下面我們要介紹一下UC/OS-II里面的一些程序。用戶應(yīng)用程序任務(wù)定義代碼如下:voidMyTask(void*pdata)開(kāi)始定義用戶任務(wù)for(;).voidmain()TargetInit();/完成初始化目標(biāo)開(kāi)發(fā)板。OS

5、Init();完成初始化UCOS-II。OSTimeSet(O);/完成初始化系統(tǒng)時(shí)基。OSTaskCreate(MainTask,(void*)0,&MainTaskStkMainTaskStkLengh-1,MainTaskPrio);/開(kāi)始創(chuàng)建系統(tǒng)初始任務(wù)。OSStart();/整個(gè)任務(wù)開(kāi)始。return0;voidTask0(void*pdata)/主任務(wù)建立:taks0和task1#ifOS_CRITICAL_METHOD=3/*分配CPU狀態(tài)寄存器*/OS_CPU_SRcpu_sr;#endifOS_ENTER_CRITICAL();Timer0Init();/初始化報(bào)時(shí)信

6、號(hào)ISRInit();/初始化中斷優(yōu)先級(jí)OS_EXIT_CRITICAL();OSPrintfInit();用戶任務(wù)給用口DM9000_init();OSStatInit();while(1)OSPrintf("nEnterMainTask'n");/測(cè)試Dm9000/打印DM9000寄存器OSTimeDly(OS_TICKS_PER_SEC);需要注意的是,nC/OSII的應(yīng)用程序要使用空閑任務(wù)OSTaskldle(),而它是不可刪除的系統(tǒng)文件。下面開(kāi)始對(duì)應(yīng)用程序進(jìn)行移植了。本次設(shè)計(jì)是在ARM開(kāi)發(fā)板上實(shí)現(xiàn)用口、網(wǎng)口數(shù)據(jù)轉(zhuǎn)換的的功能。在TQ2440上有串口和網(wǎng)口。通

7、信過(guò)程簡(jiǎn)單的描述就是PC串口發(fā)送數(shù)據(jù)給ARM板,ARM接到串口數(shù)據(jù)后,從網(wǎng)口再傳給PC。相反也是同樣的道理,由網(wǎng)口發(fā)送數(shù)據(jù),有ARM控制由串口發(fā)回?cái)?shù)據(jù)。首先是TCP/IP協(xié)議的移植。在編寫移植程序前,有必要解釋一下基本的協(xié)議棧作用和意義。、就常見(jiàn)的網(wǎng)絡(luò)通信方式一般來(lái)說(shuō)有兩種:1、UART-RS232,此時(shí)只需要pc上有串口調(diào)試助手即可。2、TCP/IP,這時(shí)候和普通pc與pc通信一樣可以用socket套接字編程也可用別人寫好的軟件偵聽(tīng)。而現(xiàn)在我們要實(shí)現(xiàn)的是用口控制單片機(jī)與PC機(jī)的通信,在這里用PC來(lái)代替以太網(wǎng)。接下來(lái)還要介紹一下以太網(wǎng)接口。以太網(wǎng)技術(shù)如今已經(jīng)相當(dāng)?shù)某墒炝耍湎鄳?yīng)的網(wǎng)絡(luò)產(chǎn)品價(jià)格低

8、廉、技術(shù)完善。而數(shù)據(jù)總線如今越來(lái)越難以滿足人們?nèi)找嫣嵘男枰@時(shí)以太網(wǎng)控制網(wǎng)絡(luò)技術(shù)得到了快速的發(fā)展,并形成了現(xiàn)場(chǎng)總線的新標(biāo)準(zhǔn)。加上國(guó)內(nèi)大部分局域網(wǎng)是以太網(wǎng),給予以太網(wǎng)實(shí)現(xiàn)現(xiàn)場(chǎng)總線有了雄厚的物質(zhì)基礎(chǔ)。以太網(wǎng)的接口就是以太網(wǎng)同信的基礎(chǔ),是通信介質(zhì)通信的中間處理部件,實(shí)現(xiàn)報(bào)文的發(fā)送與接收功能,位于TCP/IP協(xié)議棧的數(shù)據(jù)鏈路層。每一個(gè)以太網(wǎng)接口(有時(shí)候也叫網(wǎng)卡),在連通后就可以隨時(shí)的發(fā)送和接收網(wǎng)絡(luò)上的數(shù)據(jù),執(zhí)行EEE802.3標(biāo)準(zhǔn)。TCP/IP協(xié)議棧而單片機(jī)與計(jì)算機(jī)的TCP/IP協(xié)議的實(shí)現(xiàn)也有很大的不同,原本在計(jì)算機(jī)里編寫的程序可以不考慮代碼的大小和效率,但在嵌入式開(kāi)發(fā)板上都要考慮到這些問(wèn)題。在操

9、作系統(tǒng)、內(nèi)存分配、指針、參數(shù)傳遞、協(xié)議支持以及硬件接口的設(shè)計(jì)方面有些不同。首先就是操系統(tǒng),嵌入式的特點(diǎn)之一就是簡(jiǎn)潔高效,有很強(qiáng)的專業(yè)功能。相對(duì)而言計(jì)算機(jī)上的操作系統(tǒng)的側(cè)重點(diǎn)就是兼容性,所以資源要求全面支持,所以很復(fù)雜。其次就是內(nèi)存上的分配,計(jì)算機(jī)像windows系統(tǒng)它的內(nèi)存分配是動(dòng)態(tài)的,而在單片機(jī)上卻不能同樣如此,應(yīng)為RAM的容量所限,所以其中存放以太網(wǎng)的數(shù)據(jù)包是固態(tài)的。由于ARM相對(duì)于單片機(jī)的能力而言有了很大的提升,所以可以突破單片機(jī)的一些約束。如下圖所示,TCP/IP協(xié)議棧中的內(nèi)容,從上往下分別對(duì)應(yīng)應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和網(wǎng)絡(luò)接口層TCP/IP協(xié)議棧在本次設(shè)計(jì)中采用Lwip協(xié)議棧來(lái)實(shí)現(xiàn)AR

10、M與以太網(wǎng)的連接。完成移植后,需要介紹一下以太網(wǎng)的初始化過(guò)程和數(shù)據(jù)收發(fā)過(guò)程。LWIP的初始化要在UC/OS-II之后,在其它任務(wù)創(chuàng)建之前。因?yàn)長(zhǎng)WIP要對(duì)以太網(wǎng)協(xié)議棧初始化以及新線程的建立,LWIP初始化如圖所示。(1)LwIPInit()(2)()tut()“3(14關(guān)LowleveleEMACInit()(3)lwipinit()(4)+Sysmboxnew()(5)*Systhreadnew()(8)rz;指向;fnetif->input'曰atcpipinput()_Init()以太網(wǎng)初始化流程LWIP程序可以實(shí)現(xiàn)很多功能,在本設(shè)計(jì)中沒(méi)有實(shí)現(xiàn)他的全部功能。而簡(jiǎn)單的PING

11、通需要DM9000來(lái)實(shí)現(xiàn)。以太網(wǎng)的接收是通過(guò)中斷方式,如果有數(shù)據(jù)進(jìn)入以太網(wǎng)中斷函數(shù)。其主要任務(wù)就是讀取和分析數(shù)據(jù)包。如果數(shù)據(jù)有效則在Tcpip_input()函數(shù)把數(shù)據(jù)發(fā)送出去,并在LWIP初始化創(chuàng)建的線程中就可以得到此消息。然后通過(guò)ip_input()函數(shù)進(jìn)入傳輸層后,再把把數(shù)據(jù)傳到應(yīng)用層。具體流程如下圖所示:t()以太網(wǎng)數(shù)據(jù)接收流程GetInputPacketLen'()EMACReadPacket丁*Lowlevelinput()通過(guò)網(wǎng)絡(luò)接口函數(shù)()以太網(wǎng)數(shù)據(jù)發(fā)送流程為什么要選擇DM9000網(wǎng)絡(luò)驅(qū)動(dòng)器呢?如今嵌入式中大量使用10/100M的以太網(wǎng)卡,實(shí)際上并不實(shí)用。因?yàn)樗荒芗葷M

12、足快速傳輸速率又滿足成本控制。這時(shí),DM9000作為一種綜合低成本的單一快速以太網(wǎng)控制芯片就有了很高的實(shí)用價(jià)值。它具有通用的接口,設(shè)計(jì)簡(jiǎn)單,可滿足不同系統(tǒng)的軟件驅(qū)動(dòng)。DM9000程序的體系結(jié)構(gòu)可以分為網(wǎng)絡(luò)協(xié)議接口、設(shè)備接口層、功能層及媒介層。下面是DM9000的部分驅(qū)動(dòng)程序的編寫。定義DM9000:#include"config.h"#defineDM_ADDC(volatileunsignedshort*)0x20000300)#defineDM_CMDC(volatileunsignedshort*)0x20000304)#definePrintfOSPrintfuin

13、t8Buffer1000;/定義了一個(gè)1000字節(jié)的接收發(fā)送緩沖區(qū)uint8host_mac_addr6=0xff,0xff,0xff,0xff,0xff,0xff;主機(jī)的MAC地址uint8mac_addr6=0x0a,0x1b,0x2c,0x3d,0x4e,0x5f;/開(kāi)發(fā)板0a,1b,2c,3d,4e,5f,這實(shí)際上是一個(gè)軟地址,在本設(shè)計(jì)中不需要特指。uint8ip_addr4=192,168,1,6;uint8host_ip_addr4=192,168,1,100;uint16packet_len;/接收、發(fā)送數(shù)據(jù)包的長(zhǎng)度,單位為字節(jié)uint8arpsendbuf60=0xff,0xf

14、f,0xff,0xff,0xff,0xff,/以太網(wǎng)目標(biāo)地址0x0a,0x1b,0x2c,0x3d,0x4e,0x5f,/以太網(wǎng)源地址0x08,0x06,幀類型:ARP幀0x00,0x01,/硬件類型:以太網(wǎng)0x08,0x00,/協(xié)議類型:IP協(xié)議0x06,/硬件地址長(zhǎng)度:6字節(jié)0x04,/協(xié)議地址長(zhǎng)度:4字節(jié)0x00,0x00,/操作:ARP請(qǐng)求0x0a,0x1b,0x2c,0x3d,0x4e,0x5f,/發(fā)送端硬件地址192,168,1,6,/發(fā)送端協(xié)議地址0x00,0x00,0x00,0x00,0x00,0x00,/接收端硬件地址192,168,1,100/接收端協(xié)議地址;#define

15、DM9KS_ID0x90000A46#defineDM9KS_VID_L0x28#defineDM9KS_VID_H0x29#defineDM9KS_PID_L0x2A#defineDM9KS_PID_H0x2B#defineDM9KS_BASE_ADDR_ETH00x20000000/nGCS4#defineDM9KS_Index(volatileunsignedshort*)(DM9KS_BASE_ADDR_ETH0+0x300)#defineDM9KS_DataC(volatileunsignedshort*)(DM9KS_BASE_ADDR_ETH0+0x304)接下是來(lái)對(duì)DM9000

16、進(jìn)行初始化的程序部分:voidDM9000_init(void)uint32i;/Test_DM9000AE();IOSetInit();/設(shè)置中斷EINIT7/初始化設(shè)置步驟:1dm9000_reg_write(DM9000_GPCR,0x01);/設(shè)置GPCR(1EH)bit0=1,使DM9000的GPIO3%輸出。dm9000_reg_write(DM9000_GPR,0x00);/GPRbit0=0使DM9000的GPIO3出為低以?脫活內(nèi)部PHY。udelay(5000);/延時(shí)2ms以上等待PHY上電。/初始化設(shè)置步驟:2dm9000_reg_write(DM9000_NCR,0x

17、03);軟件復(fù)位udelay(3000);/延時(shí)20us以上等待軟件復(fù)位完成dm9000_reg_write(DM9000_NCR,0x00);復(fù)位完成,設(shè)置正常工作模式。0x03);/第二次軟件復(fù)位,為0x00);以上完成了dm9000_reg_whte(DM9000_NCR,了確保軟件復(fù)位完全版功。此步驟是宓要的.udelay(3000);dm9000_reg_write(DM9000_NCR,DM9000的復(fù)位IM乍/初始化設(shè)置步驟:3dm9000_reg_write(DM9000_NSR,0x2c);清除各種狀態(tài)標(biāo)志位dm9000_reg_write(DM9000_ISR,0xbf);

18、/清除所有中斷標(biāo)志位/以上清除標(biāo)志位/初始化設(shè)置步驟:4dm9000_reg_write(DM9000_RCR,0x39);接收控制dm9000_reg_write(DM9000_TCR,0x00);發(fā)送控制dm9000_reg_write(DM9000_BPTR,0x3f);dm9000_reg_write(DM9000_FCTR,0x38);接收FIFO門限3k8kdm9000_reg_write(DM9000_FCR,0xff);dm9000_reg_write(DM9000_SMCR,0x00);以上是37能達(dá)制/初始化設(shè)置步驟:5for(i=0;i<6;i+)dm9000_re

19、g_write(DM9000_PAR+i,mac_addri);/mac_addr自己定義一下吧,6個(gè)字節(jié)的MAC血址/以上存儲(chǔ)MAC地址(網(wǎng)卡物理地址)到芯片中去,這里沒(méi)有用EEPROM,所以需要自己寫進(jìn)去/初始化設(shè)置步驟:6dm9000_reg_write(DM9000_NSR,0x2c);清除各種狀態(tài)標(biāo)志位dm9000_reg_write(DM9000_ISR,0x3f);/消除所有中斷標(biāo)志位/初始化設(shè)置步驟:7dm9000_reg_write(DM9000_IMR,0x81);中斷使能中斷使能(裝者說(shuō)中斷屏蔽),即開(kāi)啟我們想要的中斷,關(guān)閉不想要的,這里只開(kāi)啟的一個(gè)接收中斷udelay(

20、10000);/延時(shí)2ms以上等待PHY上電。/PrintfDM9000Reg();Printf("DM9000初始化完畢rn");接下來(lái)是數(shù)據(jù)包的接收和發(fā)送流程圖和程序:DM9000收到封包,置于接收內(nèi)存的0C00h-3FFFh。若超過(guò)最大值時(shí),會(huì)自動(dòng)把位置移到0C0h0位置。每個(gè)封包有4字節(jié)是存放一些與封包相關(guān)的信息。若內(nèi)存的第1字節(jié)值為“01h”,表明封包已經(jīng)在內(nèi)存中了。在讀取其它字節(jié)前,先要確定第2個(gè)字節(jié),則是這個(gè)封包的相關(guān)信息。如下圖是DM9000接收封包流程:DM9000接收封包流程如圖可以看出,DM9000從網(wǎng)絡(luò)中接到一個(gè)數(shù)據(jù)包后,在數(shù)據(jù)包前面力口了4個(gè)字節(jié),

21、分另I為“01H”、“status"、“LENL”(包長(zhǎng)的低8位)、“LENH(包長(zhǎng)的高8位)。這4個(gè)字節(jié)來(lái)確定數(shù)據(jù)包的狀態(tài),“01H”表示接下來(lái)的是有效數(shù)據(jù)包,“00H”則表示沒(méi)有數(shù)據(jù)包,其它值則表示沒(méi)有正確初始化,并重新初始化。若數(shù)據(jù)包長(zhǎng)度小于60字節(jié),則DM9000芯片會(huì)自動(dòng)為不足的字節(jié)補(bǔ)上00同時(shí),在接收到的包后程序還會(huì)自動(dòng)添加4個(gè)CRC校驗(yàn)字節(jié)。于是,接收到的數(shù)據(jù)包至少為64字節(jié)。也根據(jù)TCP/IP協(xié)議從首部字節(jié)中找出有效字節(jié)數(shù),這就是TCP/IP協(xié)議棧的功能了具體程序如下:/接受數(shù)據(jù)包/參數(shù):datas為接收到是數(shù)據(jù)存儲(chǔ)位置(以字節(jié)為單位)/返回值:接收成功返回?cái)?shù)據(jù)包類型

22、,不成功返回0uint32receivepacket(uint8*datas)uint16i,tmp,status,len;uint8ready;uint32st;ready=0;/希望讀取到"01H"status=0;/數(shù)據(jù)包狀態(tài)len=0;/數(shù)據(jù)包長(zhǎng)度if(dm9000_reg_read(DM9000_ISR)&0x01)dm9000_reg_write(DM9000_ISR,0x01);清除接收中斷標(biāo)志位ready=dm9000_reg_read16(DM9000_MRCMDX);/第一次讀取,一般讀取到的是00HPrintf("ready1=%xr

23、n",ready);if(ready&0x0ff)!=0x01)ready=dm9000_reg_read16(DM9000_MRCMDX);/第二次讀取,總能獲取到數(shù)據(jù)Printf("ready2=%xrn",ready);if(ready&0x01)!=0x01)if(ready&0x01)!=0x00)若第二次讀取到的不是01H或00H,則表示沒(méi)有初始化成功dm9000_reg_write(DM9000_IMR,0x80);/屏蔽網(wǎng)卡中斷化DM9000_init();/重新初始卡中斷dm9000_reg_write(DM9000_IM

24、R,0x81);/打開(kāi)網(wǎng)return0;/status=dm9000_reg_read16(DM9000_MRCMD);DM_ADD=DM9000_MRCMD;st=DM_CMD;status=st;len=64;/DM_CMD;Printf("st=%xstatus=%xlen=%xrn",st,status,len);if(len<1522)!(status&0xbf)&&for(i=0;i<len;i+=2)/16bitmodeudelay(20);tmp=DM_CMD;datasi=tmp&0x0ff;datasi+1=(

25、tmp>>8)&0x0ff;elsereturn0;if(len>1000)return0;/if(HON(ETHBUF->type)!=ETHTYPE_ARP)&&(HON(ETHBUF->type)!=ETHTYPE_IP)/return0;packet_len=len;returnlen;在發(fā)送封包之前,需要將其中的數(shù)據(jù)存放在DM9000傳送內(nèi)存0000h0BFFh。當(dāng)超過(guò)0BFFh時(shí),位置自動(dòng)回到0000h的位置。封包的數(shù)據(jù)存放在MWCND中,芯片會(huì)吧數(shù)據(jù)自動(dòng)的存入傳送內(nèi)存的。具封包的大小存放在低字節(jié)的TXPLL和高字節(jié)的TXPLH

26、中。然后把TCRbit()設(shè)置成1,開(kāi)始傳送封包。完成后,將是否完成的信息存入TSRI、TSRII中。其順序?yàn)門SRI->TERII->TSRI循環(huán)。故需按照NSRbit-3來(lái)判斷完成進(jìn)度。以下是發(fā)送數(shù)據(jù)包的流程圖和程序:DM9000發(fā)送封包流程以上是發(fā)送數(shù)據(jù)包,過(guò)程很簡(jiǎn)單/發(fā)送數(shù)據(jù)包/參數(shù):datas為要發(fā)送的數(shù)據(jù)緩沖區(qū)(以字節(jié)為單位),length為要發(fā)送的數(shù)據(jù)長(zhǎng)度(兩個(gè)字節(jié))。voidDM9000_sendPcket(uint8*datas,uint32length).uint32len,i;uint8tmp;Printf("發(fā)送數(shù)據(jù)rn");dm9000

27、_reg_whte(DM9000_IMR,0x80);先禁止網(wǎng)卡中斷,防止在發(fā)送數(shù)據(jù)時(shí)痛中所干擾len=length;/把發(fā)送長(zhǎng)度寫入/*這兩句是將要發(fā)送數(shù)據(jù)的長(zhǎng)度告訴DM9000的寄存器*/dm9000_reg_write(DM9000_TXPLH,(len>>8)&0x0ff);dm9000_reg_write(DM9000_TXPLL,len&0x0ff);DM_ADD=DM9000_MWCMD;將要發(fā)送的數(shù)據(jù)寫到DM9000的內(nèi)部SRAM中的寫FIFO中for(i=0;i<len;i+=2)/16bitmodeudelay(2);DM_CMD=data

28、si|(datasi+1<<8);dm9000_reg_write(DM9000_TCR,0x01);發(fā)送數(shù)據(jù)到以太網(wǎng)while(1)/等待數(shù)據(jù)發(fā)送完成uint8data;data=dm9000_reg_read(DM9000_TCR);/DM9000_NSRif(data&0x01)=0x00)break;tmp=dm9000_reg_read(DM9000_NSR);if(tmp&0x01)=0x04)if(dm9000_reg_read(DM9000_TSR1)&0xfc)=0x00)Printf("TSR1成功rn");elseP

29、rintf("TSR1失敗rn");elseif(dm9000_reg_read(DM9000_TSR2)&0xfc)=0x00)Printf("TSR2成功rn");elsePrintf("TSR2失敗rn");dm9000_reg_write(DM9000_NSR,0x2c);/清除狀態(tài)寄存器,由于發(fā)送數(shù)據(jù)沒(méi)有設(shè)置審斷,因此不必疝理中斷標(biāo)志位dm9000_reg_write(DM9000_IMR,0x81);/DM9000網(wǎng)卡的接收中斷使能Printf("發(fā)送數(shù)據(jù)完成rn");TQ2440串口初始化程序:staticintwhichUart=0;voidUart_Init(intpclk,intbaud)inti;if(pclk=0)pclk=PCLK;rUFCON0=0x0;disablerUFCON1=0x0;disable/UARTchannel0FIFOcontrolreg

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論