新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > Samsung S3C2440平臺上的Vxworks BSP移植

        Samsung S3C2440平臺上的Vxworks BSP移植

        作者: 時間:2011-08-16 來源:網絡 收藏
        部分代碼修改如下:

        本文引用地址:http://www.104case.com/article/178741.htm

          /*添加了對串行口UART的初始化,配置了UART的一些控制寄存器,并設置了波特率,部分代碼如下*/

          InitUART:

          #define UART_BRD (( 50750000 / (115200 * 16)) - 1)

          mov r2,#UART_BRD /*設置串口的波特率 */

          /*初始化堆棧指針*/

          ldr sp, L$_STACK_ADDR

          mov fp, #0

          在建立堆棧之后,系統就具備了高級語言的執行條件,后續的代碼就可以用C語言來實現了。

          /*使程序跳轉至C語言程序段代碼如下*/

          #if (ARM_THUMB)

          ldr r12,L$_rStrtInRom

          orr r12,r12, #1

          bx r12

          #else

          ldr pc,L$_rStrtInRom /*跳轉到romStart()中執行*/ #endif

          CPU將執行權轉移給romStart()之后。該函數就使內存清空,然后把整個引導映像復制到內存中,最后將CPU的控制權交給usrInit()。

          修改sysLib.c

          文件sysLib.c提供VxWorks和應用程序間的板級聯系,這里重點介紹一下內存映射函數。

          目標系統開啟了MMU模塊,在sysLib.c文件里面就定義了一個sysPhysMemDesc[ ]表。部分代碼如下所示:

          PHYS_MEM_DESC sysPhysMemDesc [] =

          { (void*) (ROM_BASE_ADRS+0xf0000000), (void *) (ROM_BASE_ADRS),

          ROUND_UP(ROM_SIZE_TOTAL*2,PAGE_SIZE),

          VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|VM_STATE_MASK_CACHEABLE,

          VM_STATE_VALID|VM_STATE_WRITABLE_NOT|VM_STATE_CACHEABLE_NOT

          }

          上面一小段代碼是對ROM_BASE_ADRS 的內存映射,ROM_BASE_ADRS+0xf0000000是要映射的虛擬地址,ROM_BASE_ADRS是硬件設計時定義的實際物理地址,ROUND_UP(ROM_SIZE_TOTAL*2,PAGE_SIZE)是映射長度,VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|VM_STATE_MASK_CACHEABLE是可初始化的地址狀態,VM_STATE_VALID|VM_STATE_WRITABLE_NOT|VM_STATE_CACHEABLE_NOT是實際初始化的地址狀態。

          若添加新的外設,該外設對應的內存空間必須在sysPhysMemDesc[]中配置。通過這樣的配置就完成了內存映射和MMU的開啟。

          修改dm9kEnd.c

          由于使用的是DM9000網卡。要做好DM9000網卡的END驅動首先要初始化網卡的數據結構dm9kDevice,這個數據結構如下:

          typedef struct dm9kDevice

          {

          END_OBJ endObj; /*繼承類 */

          int unit; /*設備單元號 */

          UINT32 flags; /* 本地標志信號*/

          int ivec; /* 中斷向量 */

          int ilevel; *中斷級 */

          ……

          } DM9K_DRV_CTRL

          數據結構中的END_OBJ類型成員、網卡單元號、中斷號和中斷向量是網卡驅動中必須包含的成員元素。

          驅動的部分接口函數,主要包括網卡加載函數dm9kEndLoad、網卡啟動函數dm9kStart、停止網卡函數dm9kStop、網卡控制函數dm9kIoctl、網卡卸載函數dm9kUnload、網卡發送函數dm9kSend、獲取組播地址函數dm9kMCastGet、啟動輪詢模式函數dm9kPollStart、關閉輪詢模式函數dm9kPollStop、輪詢模式發送函數dm9kPollSend、輪詢模式接收函數dm9kPollRcv等,通過對這些接口函數編寫功能,實現網卡驅動。

          在編寫驅動的過程中,還必須注意:由于目標板用一種100pin的DM9000芯片,這種芯片除了有CMD信號之外,還有6根地址片選信號SA4~SA9,根據SA4~SA9對應的CPU地址線和數據手冊上引腳定義,可以計算出網卡的端口地址,如果SA4~SA9對應CPU地址的addr4~addr9,那么網卡端口基址就是0x18000300,這樣可以計算出網卡的基地址。

          

          圖2 VxWorks COM1口的打印信息



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 上思县| 鄯善县| 闸北区| 昭觉县| 西昌市| 平顺县| 蓬溪县| 普兰店市| 吴堡县| 河北省| 商水县| 宜宾市| 长治县| 镶黄旗| 保康县| 儋州市| 获嘉县| 辉县市| 衡阳市| 武宁县| 蓬莱市| 象山县| 固镇县| 镇赉县| 武安市| 台中县| 淮滨县| 故城县| 牟定县| 万安县| 溧阳市| 封开县| 晋城| 马龙县| 巴南区| 宜兰市| 蚌埠市| 永城市| 石棉县| 织金县| 周至县|