娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

基于S3C2440和DM9000移植LWIP

發布者:MysticGarden最新更新時間:2024-07-09 來源: elecfans關鍵字:S3C2440  DM9000  移植LWIP 手機看文章 掃描二維碼
隨時隨地手機看文章

終于開始我的第一篇筆記了。這回要做的事情,是以太網的移植。

使用mini2440已經有一段時間了。諸如裸機的LED,鍵盤開關等等等等也都試驗過了,uCOS,WinCE也是淺嘗了一下。如今想到了以太網。

由于mini2440的板上集成了一個DM9000的網卡,并且在CE系統里面成功的使用以太網與PC連接了。于是自然而然的想,能不能在uCOS下也實現以太網接口呢?

一上來什么都不懂,于是找一些資料,在這里要謝謝焦海波老師所著的嵌入式網絡系統設計一書,移植過程中很多資料都來源于這本書。其次是mikenoodle的單片機驅動DM9000網卡一文,里面詳細地講述如何在2440裸機下驅動DM9000網卡。

首先明確我們需要做的事情是什么?為了實現在uCOS下的LWIP協議。我們當然需要一個LWIP協議文件,這些程序文件可以在LWIP官網上下載到。目前最新版本是1.3.0,為了方便我第一次移植,我使用了焦海波老師所使用的1.2.0版本的LWIP。其次是DM9000的網卡驅動,再次就是基于2440的uCOS系統。總結一下,我們需要做以下工作:

1、Lwip

2、uCOS for 2440

3、Driver for DM9000

4、Lwip->Driver for DM9000

其中最后一項是Lwip和DM9000驅動的鏈接程序,也就是我們通常說的協議與硬件的接口。

Lwip可以從官網上下載,只需要稍微修改一下就可以用于2440;uCOS for 2440很容易也有了,剩下的就是后面兩項的實現。

DM9000的驅動我找了好久,最后找到一個2440裸機下面的驅動,但是不確定它是不是符合我的需要。因此我決定先在uCOS下將這個驅動實現一下,也就是將裸機下的驅動移植到uCOS下,不經過Lwip協議,直接測試它的可用性。

說道DM9000的驅動,主要是完成兩個任務。一個是按照DM9000網卡的技術要求,向DM9000的各個寄存器里面賦值,以實現DM9000的初始化;另一個就是實現DM9000的收發數據函數。關于DM9000的初始化問題,mikenoodle的博客里面做了具體的講解,總的來說有以下若干個步驟:

1、激活GPIO0,將其設為輸入(input),它是DM9000和內部PHY溝通的一個通道。

2、檢測DM9000的ID號,這一步的目的是確定使用的芯片是不是DM9000.

3、檢測DM9000的類型,這一步是確定網卡的類型。

4、設置PHY的寄存器,也就是對物理層的參數進行初始化。

5、設置網卡的MAC地址。這一步可以手動設置,也可以使用EEPRAM來設置。

6、激活DM9000,主要是設置中斷和接收寄存器。

7、等待鏈接建立并完成初始化。

應注意的是,對DM9000寄存器的賦值,一般過程是先寫入寄存器地址,再寫入數據。向DM9000寫地址和數據的唯一差別就是,寫地址參數的地址是基礎地址+300,而寫數據參數的地址是基礎地址+300+4,從電路模型上看,也就是CMD引腳的高低電平區別。高電平代表寫入的是數據,低電平代表寫入的是地址。另外,向EEPRAM和PHY寄存器賦值的時候,要先選中EEPRAM或者PHY,再向讀寫EEPRAM/PHY的寄存器賦值。

初始化之后,下一步的任務就是編寫收發驅動程序。收發的實現,其實就是把要發送的數據寫到DM9000的發送寄存器中,以及將要接收的數據從接收寄存器中讀取出來的過程,跟一般的串口收發過程類似。值得注意的時候,其讀寫寄存器的過程同樣需要先寫寄存器地址,在對寄存器進行下一步操作。

需要注意的是,DM9000的接收和發送,都有兩個寄存器可以進行操作。一個是接收(發送)遞增寄存器,每次讀取(發送)一位數據之后,它的地址指針會自動遞增一位,另一個是接收(發送)不遞增寄存器,每次讀取(發送)一位數據之后,該地址指針不遞增。

以上就是DM9000驅動所要實現的內容。

基于S3C2440和DM9000實現LWIP(二)

完成了DM9000的驅動,下一步就是將這個驅動和LWIP協議鏈接起來,并將它放置在ucos系統中。根據焦海波先生在嵌入式網絡系統設計一書中的介紹,這個過程主要需要完成三個部分的內容。

1、LWIP初始化和網卡初始化之間的關聯。

2、LWIP接收和網卡接收驅動的關聯。

3、LWIP發送和網卡發送驅動的關聯。

總體思路是這樣的:

首先,我們從初始化講起。在UCOS系統中,我們建立一個任務,這個任務的目的是初始化網絡接口。這個任務程序首先調用LWIP中的初始化程序,初始化LWIP用到的郵箱、隊列、信號量、堆棧等等的一些參數;緊接著,它將我們在DM9000驅動中設定好的網絡地址,MAC地址,網關等PIV4協議需要用到的地址參數打包裝入LWIP協議中管理這些地址的數據(結構體);然后它調用網卡初始化程序,初始化DM9000,這個時候,DM9000和外部網絡的通道就打通了。

但是這個時候,還不能跟外部網絡的其他計算機通信,因為即使網絡打通了,由于網絡上傳輸的數據需要符合以太網協議才能被識別,所以我們還需要做下面的兩個步驟。就是將LWIP協議中處理各種網絡協議的接收(發送)程序和DM9000驅動中的接收(發送)程序關聯起來。這個關聯有兩個方法,一個是使用中斷的方法關聯,就是在2440設置外部中斷,在中斷程序中讀DM9000的中斷狀態寄存器ISR,判斷是接收還是發送中斷,然后利用郵箱或者信號量的功能,引導執行相應的程序。另一種就是利用UCOS的任務功能,建立兩個任務,一個負責接收,一個負責發送,采用查詢的方式來執行。

別忘了,在做完這一步之后,我們還需要在LWIP的input程序和output程序中,調用DM9000驅動中的接收或發送程序,完成彼此之間的鏈接。

至此,LWIP在2440上便可以投入使用了。


關鍵字:S3C2440  DM9000  移植LWIP 引用地址:基于S3C2440和DM9000移植LWIP

上一篇:ARM9 S3C2440 定時器中斷
下一篇:linux-3.0內核移植到fl2440開發板(以MINI2440為模板)

推薦閱讀最新更新時間:2025-04-17 22:41

s3c2440的網卡接口擴展DM9000
網絡對于嵌入式系統來說必不可少??墒莝3c2440沒有集成以太網接口,所以要想使s3c2440具備以太網的功能,就必須擴展網卡接口。在這里,我們外接DM9000,使其可以與以太網相連接。 DM9000可以直接與ISA總線相連,也可以與大多數CPU相連。在這里,我們當然是要讓DM9000與s3c2440相連接了。DM9000對外來說只有兩個端口——地址口和數據口,地址口用于輸入內部寄存器的地址,而數據口則完成對某一寄存器的讀寫。DM9000的CMD引腳用來區分這兩個端口,當CMD引腳為0時,DM9000的數據線上傳輸的是寄存器地址,當CMD引腳為1時,傳輸的是讀寫數據。我們把DM9000的A8和A9接為高電平,把A4~A7接為低
[單片機]
s3c2440串口裸板驅動(使用fifo)
1:串口的數據發送的數據量較大時,使用fifo可以大大降低MCU的開銷。(有點類似串入并出的cput處理模型,本質上還是串行收發) 2:在某些特殊場合,例如制定較復雜的協議時,可以使用fifo特性來做協議簡化,比如一包 數據包含8個字節,(并且fifo設置的長度為8),這樣相當于把uart轉換為類似CAN/以太網模型, 這樣信息可擴展性得到了質的提高,當然,這里需要同步協調。 fifo分析拓展: 1. 如果要用中斷來處理接收到的數據,就是說,接收完數據然后產生中斷,再于中斷里處理接收的數據。如果要實現這個本意,要設置好觸發點。 至于超時中斷之類,那是另外一回事了。 2. 就UART的中斷類型
[單片機]
<font color='red'>s3c2440</font>串口裸板驅動(使用fifo)
S3C2440的中斷
中斷源發生中斷,此信號自動被掛起PEND,自動被屏蔽 MASK S3C2440一共有60個中斷源,其中有15個子中斷源,它們與SUBSRCPND寄存器中的每一位相對應,其他45個中斷源與SRCPND中的每一位相對應。要注意的是EINT4~7對應的是同一位SRCPND ,而EINT8~23對應的也是SRCPND 一位。 1 S3C2440的中斷寄存器 中斷分兩大類:外部中斷和內部中斷。 1.1 外部中斷寄存器 24個外部中斷占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用這些腳做中斷輸入,則必須配置引腳為中斷,并且不要上拉。具體可參考datesheet
[單片機]
<font color='red'>S3C2440</font>的中斷
S3C2440 WINCE6將USB DEVICE改成USB HOST,實現兩個USB HOST
S3C2440一般默認的是一個USB DEVICE,一個USB HOST,即一個主口,一個從口,先來看看USB Device與USB Host相關知識。 USB Host: 最底層就是USB Host控制器了,上層是USB Host Controller Driver,該驅動負責和硬件通訊來傳輸數據,在WinCE中支持UHCI,OHCI和EHCI。Host Core Driver & Hub Driver是獨立于硬件的USB協議棧,支持USB Host協議及USB Hub功能。最上層就是USB Host Class driver是USB Host的應用協議,目前在WinCE中,支持RNDIS,Print,Mass Storag
[單片機]
S3C2440 FCLK、HCLK、PCLK的配置
三星官方搭載的wince系統的FLCK值為400MHz,HCLK值為100MHz、PCLK值為50MHz。那么這些值通過什么方法計算出來呢?大概過程如下,這些值在外部晶振12MHz的基礎上通過PLL的作用倍頻到我們需要的核心頻率如400MHz,由于該頻率過高,需要通過對預分頻器進行適當的設置獲取外圍設備能夠正常工作的頻率如HCLK 100MHz、PLCK 50MHz。 在這里有必要說明FCLK、HCLK、PCLK的含義,FCLK為內核時鐘,HCLK為總線時鐘(包括USB時鐘),PCLK為I/O接口時鐘(如常用的SPI、I2C、UART的時鐘配置都是通過PCLK時鐘為基準的)。 在WINCE6.0 BSP中,設置MPLLCON與設置
[單片機]
<font color='red'>S3C2440</font> FCLK、HCLK、PCLK的配置
s3c2440之點亮led
原理是操作led 與 CPU 相連管腳的GPIO,具體操作哪個GPIO,需要查看原理圖。將對應GPIO配置為輸出模式,并設置GPIO的對應位為低電平即可點亮led,相反,設置對應位為高電平則熄滅led 以韋東山的JZ2440為例,原理圖: 可以看出3個led分別對應GPF4,GPF5,GPF6設置為輸出狀態,查看芯片手冊: 得知GPFCON寄存器地址為 0x56000050,GPFDAT寄存器地址為 0x56000054,GPF4,GP5,GPF6 的對應配置分別為8-9,10-12,12-13位,需要將這連續的6位設置為010101 即可配置設置GPF4-6為輸出模式,然后控制 GPFDAT 4-6 位,0點亮,1熄
[單片機]
<font color='red'>s3c2440</font>之點亮led
移植QtEmbedded 4.6.3 tslib1.4 到 S3C2440
1、下載源碼包: 到QT官網下載最新版 QT FOR EMBEDDED 下載最新版 tslib1.4 2、配置交叉編譯環境 下載交叉編譯工具 arm-linux-gcc 4.3.2 (交叉編譯工具的版本,請根據開發板中系統內核編譯時使用的版本進行確定,我使用的mini2440內核采用此版本交叉編譯器編譯所以選用此編譯器) 在命令行模式下執行 export PATH=/usr/local/arm/4.3.2/bin:$PATH 建議寫成腳本setcrossenv.sh方便以后執行 3、交叉編譯tslib1.4 A、安裝編譯過程需用到的程序 root@hrixin-desktop:/home/hrixin # apt
[單片機]
基于S3C2440和PCL6045BL的四軸運動控制器設計
運動控制系統已被廣泛應用于工業控制領域。近年來,工業控制對運動控制系統的要求越來越高。傳統的基于PC及低端微控制器日漸暴露出高成本、高消耗、低可靠等問題,已經不能滿足現代制造的要求 。隨著嵌入式技術的日益成熟,嵌人式運動控制器已經初露鋒芒?;贏RM技術的微處理器具有體積小、低成本、低功耗的特點,決定其在運動控制領域具有良好的發展前景。 PCL6045BL是一種新型專用DSP運動控制芯片,它具有強大的數據處理能力和較高的運行速度,可以實現高精度的多軸伺服控制。為解決精密制造對低成本、可移植性強的通用型多軸數控系統的迫切需求,文中給出一種基于ARM 微處理器S3C2440與DSP專業運動控制芯片PCL6045BL構成的嵌入式四軸
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 郧西县| 扶余县| 连山| 无极县| 朝阳县| 大安市| 永川市| 海兴县| 武鸣县| 琼中| 常德市| 本溪| 调兵山市| 庐江县| 都安| 佳木斯市| 岗巴县| 阿瓦提县| 安吉县| 六安市| 婺源县| 思南县| 尉犁县| 澜沧| 应用必备| 淮北市| 龙海市| 南昌市| 乌审旗| 松原市| 保亭| 康马县| 双峰县| 云浮市| 高邮市| 滨海县| 博乐市| 兴山县| 烟台市| 旅游| 吴忠市|