freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于dm9000a的tcp通信設(shè)計畢業(yè)論文-文庫吧

2025-06-03 15:28 本頁面


【正文】 雙工流量控制模式 (5) (6)支持喚醒幀,鏈路狀態(tài)改變和遠程的喚醒 (7)支持自動加載EEPROM里面生產(chǎn)商ID和產(chǎn)品ID (8)支持4個通用輸入輸出口 (9)超低功耗模式,功率降低模式,電源故障模式 (10)支持100腳CMOS LQFP封裝工藝 (11) (12)支持4K雙字SRAM (13)可選擇1:1YL182050s YT371107S或5:4變壓比例的變壓器降低格外功率 3. DM9000A的硬件電路 網(wǎng)絡(luò)驅(qū)動中用到的網(wǎng)卡DM9000A,其硬件電路如下 DM9000A的硬件電路DM9000A的EECS引腳保持默認(rèn)的懸空狀態(tài),數(shù)據(jù)線SD0SD15直接與S3C44B0X、SST39VF160HY57V641620HG的數(shù)據(jù)線相連。DM9000A的IO讀信號線IOR、寫信號線IOW分別與處理器的讀信號NOE和寫信號NOW相連,片選信號CS與處理器的NGCS3端口相連,它的起始地址為0X06000000。讀寫信號與片選信號都是保持默認(rèn)設(shè)置的低電平有效。在DM9000A中只有INDEX端口與DATA端口兩個寄存器可以直接被CPU直接訪問,其它所有內(nèi)部控制和狀態(tài)寄存器都是通過這兩個端口寄存器間接訪問的。本文的設(shè)計中將CMD引腳與處理器的地址線ADR2相連,網(wǎng)絡(luò)控制器CMD引腳決定了處理器訪問的是哪個端口寄存器:當(dāng)CMD=0時,主機訪問的是INDEX(地址)端口寄存器,它的地址為0X06000000;當(dāng)CMD=1時,訪問的是DATA(數(shù)據(jù))端口寄存器,它的地址為0X06000004。實際中INDEX端口寄存器保存的是訪問DATA端口寄存器的內(nèi)部寄存器的地址,因此對DM9000A控制或狀態(tài)寄存器訪問的命令順序是: (1)將要訪問寄存器的地址寫到INDEX端口; (2)通過DATA端口來讀/寫數(shù)據(jù)[4]。 4. 工作原理在系統(tǒng)上電時,處理器通過總線配置DM9000A內(nèi)的網(wǎng)絡(luò)控制寄存器(NCR)、中斷寄存器(ISR)等,以完成DM9000A的初始化。隨后,DM9000A進人數(shù)據(jù)收發(fā)等待狀態(tài),當(dāng)DM9000A接收到外部網(wǎng)絡(luò)送來的以太網(wǎng)數(shù)據(jù)時,首先檢測數(shù)據(jù)幀的合法性,如果幀頭標(biāo)志有誤或存在CRC校驗錯誤,則將該幀數(shù)據(jù)丟棄,否則將數(shù)據(jù)幀緩存到內(nèi)部RAM,并通過中斷標(biāo)志位通知處理器,處理器收到中斷后將DM9000A接收RAM的數(shù)據(jù)讀出進行處理。當(dāng)處理器要向以太網(wǎng)發(fā)送數(shù)據(jù)幀時,先將數(shù)據(jù)打包成TCP或IP數(shù)據(jù)包,并通過8位或16位總線逐字節(jié)發(fā)送到DM9000A的數(shù)據(jù)發(fā)送緩存中,然后將數(shù)據(jù)長度等信息填充到DM9000A的相應(yīng)寄存器內(nèi),隨后發(fā)送使能命令,DM9000A將緩存的數(shù)據(jù)和數(shù)據(jù)幀信息進行MAC組幀,并發(fā)送出去[5]。 DM9000A的驅(qū)動1. DM9000A按字節(jié)、半字、字方式讀寫數(shù)據(jù)define DM9000_outb(d,P) ( *(volatile UINT8 *)p = d ) define DM9000_outw(d,p) ( *(volatile UINT16*)p = d )define DM9000_outl(d,p) (*(volatile UINT32 *)p = d )define DM9000_inb(p) (*(volatile UINT8 *)p)define DM9000_inw(p) (*(volatile UINT16 *)p)define DM9000_inl(p) (*(volatile UINT32 *)p)其中*(volatile UINT8 *)p為強制類型轉(zhuǎn)換,即將P轉(zhuǎn)換為無符號八位,再將d賦給轉(zhuǎn)換后的p,后面幾個語句類似于此語句。2. DM9000A軟件復(fù)位void DM9000_reset(void){ dlyus(20);DM9000_iow(DM9000_NCR, 0x03); dlyus(20); DM9000_iow(DM9000_NCR, 0x03); dlyus(20); DM9000_iow(DM9000_GPR, 0x01); DM9000_iow(DM9000_GPR, 0x00); dlyms(4);}函數(shù)的功能是實現(xiàn)DM9000A的復(fù)位。即將寄存器NCR的第0位賦值為1,保持4ms,自動清零。 3. DM9000A寄存器讀數(shù)據(jù)__inline UINT8 DM9000_ior(UINT8 reg){ DM9000_outb(reg,DM9000_INDEX_PORT); return DM9000_inb(DM9000_DATA_PORT); } 使用如上函數(shù),實現(xiàn)DM9000A從寄存器中讀取數(shù)據(jù),首要對要訪問的寄存器正確尋址,再將DM9000A的數(shù)據(jù)端口和地址端口復(fù)用,通過CMD引腳來選擇端口。當(dāng)CMD引腳拉高時,當(dāng)前命令周期訪問的是數(shù)據(jù)端口;當(dāng)CMD引腳拉低時,當(dāng)前命令周期訪問的是地址端口。此程序首先是由INDEXPORT寫入需要讀取操作的寄存器地址,在由DATAPORT讀取寄存器內(nèi)的數(shù)據(jù)。4. DM9000A寄存器寫數(shù)據(jù) __inline void DM9000_iow(UINT8 reg,UINT8 value) { DM9000_outb(reg,DM9000_INDEX_PORT); DM9000_outb(value,DM9000_DATA_PORT); }函數(shù)功能實現(xiàn)將數(shù)據(jù)寫入寄存器中,首先由INDEXPORT寫入需要寫操作的寄存器地址 ,再由DATAPORT寫入寄存器內(nèi)數(shù)據(jù)。5. DM9000A檢查PID與VID UINT32 DM9000_probe(void) { UINT32 id_val; id_val = DM9000_ior(DM9000_VIDL); id val|= DM9000_ior(DM9000_VIDH) 8; id val|= DM9000_ior(DM9000_PIDL) 16; id_val |= DM9000_ior(DM9000_PIDH) 24; if (id_val == DM9000_PIDVID) { ifdef ETHERNET_DEBUG DbgPrintf([DM9000_probe OK!]); endif return 1;} else { return 0;}}函數(shù)實現(xiàn)了DM9000檢查PID與VID,DM9000A默的PID是0x9000,VID是0x0A46。6. DM9000A的初始化處理 DM9000A的初始化處理基于DM9000A如何接收和發(fā)送數(shù)據(jù)的驅(qū)動程序設(shè)計,DM9000A是一個全雙工的低功耗快速以太網(wǎng)控制器,集成了MAC層和PHY層,同時具有16K字節(jié)的SRAM,支持多種雙絞線和光纖傳輸媒介,完全兼容IEEE802.3u協(xié)議標(biāo)準(zhǔn),10/100MB/s自適應(yīng)。DM9000A內(nèi)部的16K字節(jié)SRAM被分成兩部分,一部分為發(fā)送(TX)緩沖區(qū),另一部分為接收(RX)緩沖區(qū),DM9000A的驅(qū)動程序主要由初始化函數(shù)、接收函數(shù)、發(fā)送函數(shù)和一些輔助函數(shù)組成[6]。 void DM9000_Init(UINT8* mac){ int i,oft; DM9000_reset(); If (DM9000_probe()==0){ return 1;} If (((DM9000_ior(DM9000_ISR)7)amp。0x01) != DM9000_IO_MODE) { return 1;} DM9000_iow(DM9000_NCR, 0x00); DM9000_iow(DM9000_TCR, 0x00); DM9000_iow(DM9000_SMCR,0x00); DM9000_iow(DM9000_NSR, 0x2C); DM9000_iow(DM9000_ISR, 0x3f); DM9000_iow(DM9000_BPTR,0x3f); DM9000_iow(DM9000_FCTR,0x38); DM9000_iow(DM9000_FCR, 0x29); for (i = 0,oft = DM9000_PAR;i 6;i++,oft++) DM9000_iow(oft,mac[i]); for (i = 0,oft = DM9000_MAR;i 8;i++,oft++) DM9000_iow(oft,0xff); DM9000_iow(DM9000_RCR,0x31); DM9000_iow(DM9000_IMR,17); ifdef ETHERNET_DEBUG DbgPrintf([DM9000 init is succed!]); end if } 對DM9000A的初始化,即填寫、設(shè)置DM9000A的控制寄存器,首先調(diào)用復(fù)位函數(shù),使GPIO默認(rèn)0位為輸出以激活內(nèi)部PHY,寄存器NCR的第0位賦值為1,軟件復(fù)位清零,以便設(shè)置正常的工作模式。 GPIO控制寄存器(GPCR),GPCR的1到3位表示GPIO的輸入輸出方向,1為輸出,0為輸入。4到6位為GPIO的固定output不可寫,在本課題設(shè)計中,將其設(shè)置為0x01。 GPIO寄存器(GPR),它的第0位為0表示激活PHY,為1表示關(guān)閉PHY。它的1到3位表示GPIO的1到3位的端口映射位,4到6位表示GPIO的4到6位的端口映射位。在本課題將其設(shè)置為0x00,表示激活PHY。 網(wǎng)絡(luò)控制寄存器(NCR),設(shè)置網(wǎng)絡(luò)控制寄存器NCR的Bit[0](RST位)為1,進行軟件復(fù)位,設(shè)置網(wǎng)絡(luò)控制寄存器NCR,進行網(wǎng)絡(luò)工作模式設(shè)置。復(fù)位成功后,進行進一步初始化操作處理。 設(shè)置發(fā)送控制寄存器(TCR),本課題中將其置為0x00。它的Bit[0]代表發(fā)送請求,發(fā)送完成后自動清零該位;Bit[1]表示禁止為數(shù)據(jù)包指針1添加CRC校驗;Bit[2]表示禁止為數(shù)據(jù)包指針1添加PAD;Bit[3]表示禁止為數(shù)據(jù)包指針2添加CRC校驗;Bit[4]表示禁止為數(shù)據(jù)包指針2添加PAD;Bit[5]表示額外沖突模式控制,0代表當(dāng)額外的沖突計數(shù)多于15則終止本次數(shù)據(jù)包,1代表始終嘗試發(fā)發(fā)送本次數(shù)據(jù)包;Bit[6]表示Jabber傳輸使能,1代表使能Jabber傳輸定時器(2048字節(jié)),0代表禁止。本課題中將其設(shè)置為0x00。 特殊模式控制寄存器(SMCR)賦值為0x00,它的0位表示強制最短“Backoff”時間,第1位表示強制最長“Backoff”時間,第2位表示強制沖突延遲,3到6位保留,第7位表示特殊模式使能。 使用網(wǎng)絡(luò)狀態(tài)寄存器NSR清除各種狀態(tài)標(biāo)志位,將其置為0x2C,賦值中斷狀態(tài)寄存器(ISR)為0x3f,來清除所有中斷標(biāo)志位。它Bit[0]表示數(shù)據(jù)包接收;Bit[1]表示數(shù)據(jù)包傳輸;Bit[2]表示接收溢出;Bit[3]表示接收溢出計數(shù)器溢出;Bit[4]表示傳輸“Underrun”Bit[5]表示連接狀態(tài)改變;Bit[7]表示處理器模式;0為16位模式,1為8位模式。 還用到了背壓門限寄存器(BPTR),它的0到3位表示擁擠狀態(tài)時間,默認(rèn)為200us。0000為5us,0001為10us,0010為15us,0011為25us,0100為50us,0101為100us,0110為150us,0111為200us,1000為250us,1001為300us,1010為350us,1011為400us,1100為450us,1101為500us,1110為550us,1111為600us。它的4到7位表示背壓門限最高值,當(dāng)接收SRAM空閑空間低于該門限值,則MAC將產(chǎn)生一個擁擠狀態(tài),默認(rèn)值為3H,即3K字節(jié)空閑空間,不要超過SRAM(16KB)大小。本課題將其賦值為0x3f。對于溢出控制門限寄存器(FCTR), 將其賦值為0x38,它的0到3位表示接收FIFO緩存溢出門限最低值。當(dāng)接收SRAM空閑空間大于該門限值,則發(fā)送一個暫停時間(pause_time)為0000H的暫停包;當(dāng)溢出門限最高值的暫停包發(fā)送之后,溢出門限最低值的暫停包才有效,默認(rèn)值為8K字節(jié),不要超過SRAM大小。4到7位表示接收FIFO緩存溢出門限最高值;當(dāng)接收SRAM空閑空間小于該門限值,則發(fā)送一個暫停時間(pause_time)為FFFFH的暫停包;若該值為0, 則無接收空閑空間,默認(rèn)值為3H,即3K字節(jié)空閑空間,不要超過SRAM大小。 對于接收/發(fā)送溢出控制寄存器(FCR),Bit[0]表示溢出控制使能,1設(shè)置使能溢出控制模式;Bit[1]表示接收暫停包當(dāng)前狀態(tài);Bit[2]表示接收暫停包狀態(tài),只讀清零允許;Bit[3]表示背壓模式,該模式僅在半雙工模式下有效,當(dāng)接收SRAM超過BPHW并數(shù)據(jù)包DA匹配時,產(chǎn)生一個擁擠狀態(tài);Bit[4]表示背壓模式,該模式僅在半雙工模式下有效,當(dāng)接收
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1