新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于SEP3203處理器的BSP的實現探討

        基于SEP3203處理器的BSP的實現探討

        作者: 時間:2012-05-21 來源:網絡 收藏

        //搬運Nor flash中所有代碼(包括bootloader)到SDRAM

        ldr r3, =0x00000000 //SDRAM起始地址

        ldr r1, =0x30002000 //搬運代碼SDRAM目標地址

        ldr r2, =0x20001000 //代碼在flash中的起始地址

        LOOP //每個循環搬運32位代碼

        ldr r4, [r2], #4 //將代碼從flash搬運到SDRAM中

        str r4, [r1], #4

        add r3, r3, #1

        cmp r3, #0x2C000 //0x2C000為代碼量

        bne LOOP

        //REMAP操作

        ldr pc, =0x20000080 //定位pc指針

        mov r0, r0 //空語句

        mov r0, r0

        mov r0, r0

        mov r0, r0

        ldr r1, =0x11000010 //配置REMAP寄存器

        ldr r2, =0x0000000b

        str r2, [ r1 ]

        //使pc指針指向主程序起始地址

        ldr pc, =0x30002000 //定位pc指針

        mov r0, r0

        mov r0, r0

        mov r0, r0

        mov r0, r0

        3.2、啟動代碼的難點分析

        執行指令為三級流水線結構,即第一條指令執行的時,第二條指令正在譯碼,第三條指令正在取指如(圖四三級流水線)。

        Remap操作中,語句ldr pc, =0x20000080是將pc指針指向了下面的4條mov語句,這4條mov語句是沒有意義的,只是用來填充三級流水線,以避免執行Remap操作時,產生不必要的錯誤。

        Remap操作后,NOR FLASH 將失去零地址,而只擁有實際地址0x20000000,而SDRAM 則擁有了兩個起始地址,即0x00000000和0x30000000,訪問這兩個地址實際上都是在訪問SDRAM。因此,當完成代碼搬運后,pc指針應先重新定位到Nor Flash實際地址(0x20000000開始的地址)再繼續運行啟動代碼的剩余部分,否則Remap之后pc會取錯地址導致錯誤。

        語句ldr pc, =0x30002000將pc指針定位到主程序的入口,之后4條mov語句用于填充三級流水線,否則pc指針在讀取重新定位pc指針指令后,將會繼續向下移動,取錯指令。

        pc指針跳轉到主程序的入口后,整個啟動代碼結束。

        4、串口驅動程序

        串口驅動程序包含串口配置和收發數據兩部分,接收數據使用do(取fifo數據)while(fifo非空)的結構讀取fifo中的數據;發送數據即直接向發送fifo填入數據,其代碼不再贅述。串口配置是在主函數運行后進行的。代碼如下:

        int init_uart(unsigned long sysclk, unsigned long baudrate, unsigned long databit, unsigned long trigerlevel)

        {

        unsigned long baud, bit, triger, baudh, baudl;

        baud = sysclk/16/baudrate

        baudh = baud >> 8 //波特率高8位和低8位分離

        baudl = baud 0xff

        write_reg(UART0_LCR, bit); //選擇訪問波特率設置寄存器

        write_reg(UART0_DLH, baudh) //分高低8位分別配置波特率

        write_reg(UART0_DLL, baudl)

        read_reg(UART0_LCR) = (~(0x1 7)) //關閉波特率配置寄存器訪問

        write_reg(UART0_FCR, triger) //配置fifo觸發級

        write_reg(UART0_IER, 0x00) //使能串口相關中斷源

        irq_enable(INT_UART0); //使能串口中斷

        }

        由于處理器的串口波特率配置寄存器地址是與其他寄存器地址復用的,所以在配置波特率時須進行如下操作:語句:write_reg(UART0_LCR, bit)中bit參數的第7位決定了波特率配置寄存器的訪問,之后語句:read_reg(UART0_LCR) = (~(0x1 7))關閉了波特率配置寄存器的訪問。

        本文作者創新點:

        根據無線通信平臺的測試及在儀表監控系統中應用的實際情況,本完成了預定內容,且運行穩定。的成功編寫為今后更為復雜的底層開發提供了保證,也有助于相關嵌入式操作系統的移植與開發。

        參考文獻

        1 杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003.1-160

        2 Andrew N.Sloss,Dominic Symes,Chris Wright. ARM嵌入式系統開發——軟件設計與優化[M].北京:北京航空航天大學出版社,2005.1-92

        3 董策,楊志家. AES加密算法的高速低功耗ASIC設計[J]. 微計算機信息-2005年09X期,36-37


        上一頁 1 2 下一頁

        關鍵詞: SEP3203 BSP ARM7

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大悟县| 葵青区| 沙洋县| 五华县| 应用必备| 仙居县| 枣阳市| 随州市| 孟州市| 永安市| 昂仁县| 忻城县| 株洲市| 东台市| 古浪县| 建始县| 基隆市| 蒙阴县| 高阳县| 阿尔山市| 石河子市| 密山市| 茶陵县| 衡山县| 若尔盖县| 军事| 天津市| 青冈县| 泗水县| 南川市| 云龙县| 景泰县| 增城市| 长沙市| 云浮市| 广丰县| 汽车| 高清| 罗山县| 闻喜县| 甘洛县|