|
長(zhǎng)沙有哪些嵌入式培訓(xùn)機(jī)構(gòu)_嵌入式操作系統(tǒng)的網(wǎng)絡(luò)加載實(shí)現(xiàn),
引言
在復(fù)雜的應(yīng)用系統(tǒng)中通常都需要嵌入式操作系統(tǒng)的支持,這樣嵌入式操作系統(tǒng)鏡像文件的尺寸往往就會(huì)變得比較大?梢赃x擇通過網(wǎng)絡(luò)將嵌入式操作系統(tǒng)加載到SDRAM中運(yùn)行來解決這一問題。另外,通過網(wǎng)絡(luò)進(jìn)行操作時(shí),只要將需要升級(jí)的軟件系統(tǒng)在主機(jī)端更新,然后嵌入式系統(tǒng)就可以通過網(wǎng)絡(luò)來加載更新后的軟件系統(tǒng)了。
硬件電路設(shè)計(jì)
本方案所選用的基本芯片包括Blackfin處理器ADSP-BF533、以太網(wǎng)控制器DM9000AE等,功能框圖如圖1所示。
圖1 系統(tǒng)功能框圖
DM9000AE驅(qū)動(dòng)
本文中所述系統(tǒng)的網(wǎng)絡(luò)模塊基于DM9000AE,可以與多種不同的處理器方便地進(jìn)行連接。
DM9000AE的數(shù)據(jù)讀寫通過兩個(gè)對(duì)外可直接訪問的寄存器來進(jìn)行,其中INDEX port寄存器的地址=主控芯片片選基地址+0x0,DATA port寄存器的地址=主控芯片片選基地址+0x4。本系統(tǒng)將BF533的異步片選信號(hào)/ASM2連接至DM9000AE的片選引腳,因此本系統(tǒng)中INDEX port=0x20000000,DATA port=0x20000004。
數(shù)據(jù)傳輸
數(shù)據(jù)傳輸經(jīng)過以下幾個(gè)步驟:
1. 檢查主控芯片與DM9000AE之間使用的數(shù)據(jù)總線寬度。
。╱8)io_mode= DM9000_ior (0xFE)>>7; /*寄存器ISR第7位IOMODE表示I/O數(shù)據(jù)寬度*/
2. 將數(shù)據(jù)幀寫入到DM9000AE的傳輸FIFO SRAM中。
/*DM9000_IO=0x20000000, DM9000_DATA=0x20000004*/
DM9000_outb(0xF8, DM9000_IO); /*在設(shè)置了寄存器MWCMD后,就可以將要傳輸?shù)臄?shù)據(jù)寫入SRAM中,并且寫指針設(shè)置為自動(dòng)增加*/
if(io_mode==1) /*8位模式*/墻上嵌入式電視墻, 上海培訓(xùn)嵌入式, 嵌入式和機(jī)械有關(guān)嗎, 自動(dòng)化怎樣轉(zhuǎn)嵌入式, 嵌入式實(shí)用會(huì)議桌, 嵌入式車載顯示屏, 阿里+嵌入式+p7, 嵌入式退稅政策, 嵌入式VOD點(diǎn)歌機(jī), 電視機(jī)嵌入式對(duì)散熱, 嵌入式培訓(xùn)機(jī)構(gòu)那個(gè)好, 基座或嵌入式階地, 玩轉(zhuǎn)嵌入式開發(fā)板, 嵌入式qt心得體會(huì), 嵌入式的發(fā)展方向, 煤礦嵌入式開發(fā)面試, 陽臺(tái)嵌入式設(shè)計(jì), 嵌入式專業(yè)名稱, 數(shù)字嵌入式磁盤陣列, 嵌入式系統(tǒng)模式共享, 用機(jī)頂盒學(xué)嵌入式,
for (i = 0; i < TX_length; i++) /* TX_length表示待傳輸?shù)臄?shù)據(jù)幀長(zhǎng)度*/
DM9000_outb(TX_data, DM9000_DATA); /*待傳輸?shù)臄?shù)據(jù)幀保存在數(shù)組TX_data 中*/
else if(io_mode==0) /*16位模式*/
{Length_tmp= (TX_length+1)/2;
for (i = 0; i < Length_tmp; i++)
DM9000_outw((u16 *) TX_data, DM9000_DATA);}
3. 在寄存器TXPLH(0xFD)和TXPLL(0xFC)中設(shè)置傳輸?shù)臄?shù)據(jù)幀的長(zhǎng)度。
DM9000_iow(0xFC, TX_length & 0xff); /*將數(shù)據(jù)長(zhǎng)度的低字節(jié)寫入寄存器TXPLL */
DM9000_iow(0xFD, (TX_length >> 8) & 0xff); /*將數(shù)據(jù)長(zhǎng)度的高字節(jié)寫入寄存器TXPLH */
4. 開始傳輸數(shù)據(jù)幀。
DM9000_iow(0x02, 1); /*將寄存器TCR的位0置1,向DM9000AE發(fā)出一個(gè)傳輸請(qǐng)求*/
5. 檢查傳輸是否完成。
while (DM9000_ior(0x02) & 0x01) { /*檢查寄存器TCR的位0是否為0,如果為0就表示傳輸完成*/
if (get_TImer(0) >=TImeout) { /*檢查傳輸是否超時(shí)*/
printf(“transmission TImeout\n“);
break;
}
}
|
|