基于S3C4480X的嵌入式以太網(wǎng)接口設(shè)計(jì)
3設(shè)計(jì)思路
本文引用地址:http://butianyuan.cn/article/82658.htm首先,S3C44B0X通過(guò)RTL8019AS的I/O口,對(duì)其相關(guān)寄存器進(jìn)行配置。在通信時(shí),S3C44B0X與RTL8019AS的收發(fā)緩存器的數(shù)據(jù)交換由遠(yuǎn)程DMA控制,而RTL81019AS收發(fā)緩存器與以太網(wǎng)總線之間的數(shù)據(jù)交換由它的本地DMA控制。RTL8019AS通過(guò)中斷的方式通知S3C44B0X數(shù)據(jù)收發(fā)的結(jié)果和狀態(tài),S3C44B0X通過(guò)查詢(xún)中斷狀態(tài)寄存器的值,作出相應(yīng)處理。
系統(tǒng)結(jié)構(gòu)如圖2所示。
4接口電路設(shè)計(jì)
接口電路如圖3所示。
S3C 44B0X的nOE、nWE分別與RTL8019AS的IORB、IOWB相連,控制數(shù)據(jù)的讀和寫(xiě)操作,低電平有效。RTL8019使用中斷0,對(duì)應(yīng)S3C4480的外部中斷1。
RTL8019AS RTL8019AS有3種工作方式:
a)跳線方式:I/O和中斷由跳線決定;
b)即插即用方式(PNP):由軟件進(jìn)行自動(dòng)配置,使用這種方法時(shí),系統(tǒng)的啟動(dòng)程序必須包含支持PNP的函數(shù);
c)免跳線方式:I/O和中斷由外接的EEPROM93C46中的內(nèi)容決定。
在本設(shè)計(jì)中,為了降低啟動(dòng)程序和接口電路的復(fù)雜性,選擇跳線方式,故JP接高電平。
X1、X2分別為20 MHz晶振的輸入輸出端。LED0~2分別連接3個(gè)發(fā)光二極管,指示網(wǎng)絡(luò)連接、數(shù)據(jù)傳輸和發(fā)送的情況。 20F001為網(wǎng)卡濾波器,內(nèi)部包含一對(duì)低通濾波器和一對(duì)隔離變壓器,其輸出TX+/-、RX+/-與RJ45的信號(hào)口相連。
由于在本設(shè)計(jì)中RTL8019AS的AEN與S3C44B0X的nGCS2相連,所以對(duì)應(yīng)S3C44B0X的存儲(chǔ)器的起始地址0x0600-0000;并且,由于RTL8019AS的IOS0~I(xiàn)OS3接地,在跳線模式下,當(dāng)IOS0~I(xiàn)OS1為0000時(shí),RTL8019AS的基址為0300H。因此,在本設(shè)計(jì)中,S3C44B0X訪問(wèn)RTL8019AS的基址就是0x0600-0300。
5驅(qū)動(dòng)程序設(shè)計(jì)
5.1程序設(shè)計(jì)思路
在本設(shè)計(jì)方案中,驅(qū)動(dòng)程序主要包含3個(gè)函數(shù),即系統(tǒng)的初始化函數(shù)、接收數(shù)據(jù)包函數(shù)、發(fā)送數(shù)據(jù)包函數(shù)。 初始化部分完成RTL8019AS在使用之前的初始化工作,包括設(shè)置相關(guān)工作模式的寄存器、分配和初始化接收和發(fā)送緩沖區(qū)、初始化網(wǎng)卡接收地址等。
MAR0-MAR7-多點(diǎn)地址寄存器:這8個(gè)寄存器的值是根據(jù)多播地址數(shù)組的值生成的,提供對(duì)多播地址的過(guò)濾,過(guò)濾掉一些不屬于自己接收多播數(shù)據(jù)包。
這里均設(shè)為FFH,接所有多播地址的數(shù)據(jù)包:
下面6條語(yǔ)句設(shè)置MAC地址,寄存器為PAR0~PAR5:實(shí)際地址寄存器,這些寄存用來(lái)對(duì)目標(biāo)地址數(shù)據(jù)包進(jìn)行比較,以確定接收或者拒絕接收。地址放在數(shù)組add[6]中。
5.2數(shù)據(jù)的傳輸和發(fā)送
數(shù)據(jù)的傳輸和發(fā)送由本地DMA傳輸和與遠(yuǎn)程DMA傳輸兩部分完成,前者大部分工作由RTL8019AS自動(dòng)完成,我們要做的是設(shè)置收發(fā)緩沖區(qū)的大小及指針變量,這些工作在RTL8019AS的初始化時(shí)已完成,因此只需要編寫(xiě)遠(yuǎn)程DMA讀寫(xiě)函數(shù)。對(duì)遠(yuǎn)端DAM口的讀寫(xiě),不同的只是數(shù)據(jù)傳輸方向,這里,僅以讀操作為例,即編寫(xiě)從RTL8019AS接收緩沖區(qū)取數(shù)據(jù)包到S3C4480X。(注意:遠(yuǎn)程DMA的寫(xiě)函數(shù),即向RTL8019AS發(fā)送緩沖區(qū)寫(xiě)數(shù)據(jù)函數(shù)--send_data()省略。)
5.3以太網(wǎng)接口通信函數(shù)流程
這里采用中斷和查詢(xún)相結(jié)合的方式來(lái)決定是否發(fā)送和接收數(shù)據(jù)。當(dāng)RTL8019AS的ISR(中斷狀態(tài)寄存器)的任意一中斷位置位時(shí),S3C4B0X都要對(duì)其進(jìn)行中斷相應(yīng)(在這里只關(guān)注第0中斷位和第1中斷位,即分別反映RTL8019AS已正確接收到數(shù)據(jù)和已成功發(fā)送數(shù)據(jù)包,因此在初始化函數(shù)中將其他位屏蔽)。這時(shí)要對(duì)ISR進(jìn)行訪問(wèn),來(lái)判斷是何種中斷,進(jìn)而作出相應(yīng)的響應(yīng),如圖4所示。
6結(jié)束語(yǔ)
本設(shè)計(jì)經(jīng)過(guò)軟硬件的調(diào)試,并已成功地進(jìn)行以太網(wǎng)數(shù)據(jù)傳輸。由于S3C4480X出眾的性?xún)r(jià)比及豐富的外圍接口,通過(guò)擴(kuò)展本設(shè)計(jì)可以應(yīng)用到嵌入式儀器儀表、工業(yè)數(shù)據(jù)采集網(wǎng)絡(luò)、嵌入式網(wǎng)絡(luò)控制等許多領(lǐng)域。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論