• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    S3c2410軟件調試總結

    發布: 2008-8-04 10:51 | 作者: 網絡轉載 | 來源: 網絡轉載 | 查看: 322次 | 進入軟件測試論壇討論

    領測軟件測試網

    2410的MMU支持1級&2級地址映射,在我們目前大部分應用中均采用1級section模式的地址映射,一個section的大小為1M,也就是說從邏輯地址到物理地址的轉變是這樣的一個過程:
    一個32位的地址,高12位決定了該地址在頁表中的index,這個index的內容決定了該邏輯section對應的物理section; 低20位決定了該地址在section中的偏移(index)。
    因此從0x0~0xffffffff的地址空間總共可以分成0x1000(4K)個section,頁表中每項的大小為32個bit,因此頁表的大小為0x4000(16K)。在我的代碼中所有程序的頁表統一存放在地址0x33ff8000。
    每個頁表項的內容如下:

    bit: 31 20 19 12 11 10 9 8 5 4 3 2 1 0
    content: Section對應的物理地址 NULL AP 0 Domain 1 C B 1 0

    最低兩位(10)是section分頁的標識。
    AP:Access Permission,區分只讀、讀寫、SVC&其它模式。
    Domain:每個section都屬于某個Domain,一個有16個Domain,每個Domain的屬性由CP15的R3寄存器控制。 在我得所有程序中,都只包含兩個Domain,一個是SFR地址以下(包括SFR)的空間,可訪問; 另一個是SFR以上的空間,不可訪問。
    C、B:這兩位決定了該section的cache&write buffer屬性,這與該段的用途(RO or RW)有密切關系。不同的用途要做不同的設置。

    C B 具體含義
    0 0 無cache,無寫緩沖,任何對memory的讀寫都反映到ASB總線上。
    對 memory 的操作過程中CPU需要等待。
    0 1 無cache,有寫緩沖,讀操作直接反映到ASB總線上。寫操作CPU將數據寫
    入 到寫緩沖后繼續運行,由寫緩沖進行ASB操作。
    1 0 有cache,寫通模式,讀操作首先考慮cache hit;寫操作時直接將數據寫入
    寫緩沖,如果同時出現cache hit,那么也更新cache。
    1 1 有cache,寫回模式,讀操作首先考慮cache hit;寫操作也首先考慮cache,
    如果hit,則只修改cache,并將cache對應半行的dirty比特置位;如果miss,
    則寫入寫緩沖,觸發ASB總線操作。

    在我的程序中內存空間的分配統一采用了文末的MEMORY圖。雖然MMU只是使用了邏輯地址到物理地址的linear transfer(值不改變),但是由于MMU能夠引入cache&write buffer,因此系統性能有很大的提高!
    配置時鐘比、重新設置PLL
    2410內部有三個時鐘:FCLK、HCLK、PCLK,分別供CPU、AHB總線和APB總線使用,為了降低功耗,一般都選擇周期比為1:2:4的合理配置。 同時將PLL配置為運行環境時鐘,一般都達到最高202M。
    IO初始化
    將IO口配置為對應的功能選項,同時一般會點亮相應的LED燈。

    中斷初始化
    2410的內存空間沒有remap的機制,應該中斷入口時鐘位于零地址。因此中斷服務機制可以描述如下:
    首先,不管使用那種啟動方式,必須確保一下代碼段位于內存的0x0地址:
    b ResetHandler
    b HandlerUndef ;handler for Undefined mode
    b HandlerSWI ;handler for SWI interrupt
    b HandlerPabort ;handler for PAbort
    b HandlerDabort ;handler for DAbort
    b . ;reserved
    b HandlerIRQ ;handler for IRQ interrupt
    b HandlerFIQ ;handler for FIQ interrupt
    除ResetHandler外,其余各項都是由如下的宏定義的一段代碼:
    HandlerFIQ HANDLER HandleFIQ
    MACRO
    $HandlerLabel HANDLER $HandleLabel
    $HandlerLabel
    sub sp,sp,#4 ;decrement sp(to store jump address)
    stmfd sp!,{r0} ;PUSH the work register to stack
    ldr r0,=$HandleLabel ;load the address of HandleXXX to r0
    ldr r0,[r0] ;load the contents
    str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
    ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
    MEND
    這段代碼的含義是通過堆棧將中斷向量表中的內容賦給PC指針(如HandleFIQ是存放著FIQ服務程序入口地址的地址),自然程序就跳到相應的入口地址。
    可見,中斷向量表存放的是各個中斷服務程序的入口地址,它是用來被加載的,而并不是可執行代碼。為了統一,所有示例程序都將中斷向量表放在0x33ffff00開始的地址,并根據入口地址依次排列。
    需要注意的是如果各種模式的服務程序用C語言定義,那么類型必須用__irq定義,以保證能夠正確返回。

    初始化串口
    串口統一選用UART0,模式采用115200、1bit STOP、No Parity。

    最后跳轉到我們自己的應用程序!
    附:我得程序所使用的地址空間結構以及MMU中C、B的設置:

    Blank Area: RW_FAULT 0x5b000000 ~ 0xffffffff

    Sram & SFR: NCNB 0x40000000 ~ 0x4affffff

    Blank Area: RW_FAULT 0x34000000 ~ 0x3fffffff
    Int_Vec, Stack, MTT: CNB 0x33f00000 ~ 0x33ffffff

    SDRAM Download: NCNB 0x31000000 ~ 0x33efffff

    SDRAM Exec RW: CB 0x30800000 ~ 0x30ffffff

    SDRAM Exec R CNB 0x30000000 ~ 0x307fffff

    Bank5, FPGA: NCNB 0x28000000 ~ 0x2fffffff

    Bank4, FPGA: NCNB 0x20000000 ~ 0x27ffffff

    Bank3, Bottom NIC: NCNB 0x18000000 ~ 0x1fffffff

    Bank2, Bottom Flash: CNB 0x10000000 ~ 0x17ffffff

    Bank1, Bottom Sram: CNB 0x08000000 ~ 0x0fffffff

    Bank0, Flash or Sram: CNB 0x00000000 ~ 0x07ffffff
    S3c2410軟件調試總結(四)

    Nor Flash Bootloader

    這是我著手寫的第一個程序,我的想法是讓這個程序同時支持通過串口對Nand 和 Nor FLASH的燒寫,如果不進行任何燒寫,那么就跳到Nor Flash的第二個section啟動應用程序,這樣一來,即使脫離JTGA,我也可以使用串口進行盲調。


    由于有現成的初始化文件和flash燒寫的示例程序,開發起來還比較快。當然也遇到了一些問題,一開始連flash的device ID都讀不出來,后來發現我指針沒有定義成volatile類型,flash的操作時序被編譯器優化了;再者,在對Nor Flash進行操作時,bank0在MMU中的類型一定要設為NCNB,這樣比較保險。


    遇到最大的問題就是下面的了,一開始我用jtag把程序下載到0x30000000的地方運行,對Nor Flash的燒寫完全正常,但是當把程序下載到Nor Flash中啟動運行后,再對Nor Flash的section 2進行燒寫時,就出現了問題。所幸沒多久我就意識到了問題,將程序放在Nor Flash中運行,同時有對同一片flash進行操作,那么操作時序勢必會被CPU的指令讀取時序所破壞,因此程序必須搬運到SDRAM中運行。


    但是啟動地址有必須是零地址,所以我采用了前文提到的scatter文件的方法,將非必要的代碼全部搬到sdram中運行,scf文件格式就是前文中的那個。當然采用了__main的入口,調用了ADS的鏈接庫,讓它幫忙建立程序的運行環境。


    至此,Nor Flash Bootloader可以順暢無憂的實現其功能了。

     

    S3c2410軟件調試總結(后記&特別感謝)

    后記 & 特別感謝

    第一次寫這么洋洋灑灑的文章,想必垃圾成分一定很高,不過能有那么一點點有用的東西,我也就很高興了。畢竟自己這么一路走過來,真的是滿有感觸的。


    在此,特別要感謝版上twentyone朋友對我的大力幫助,在高人的指點下,我長進不小,另外我用的他開發的JTAG代理軟件XJTAG,個人覺得性能相當不錯,各位在用簡易JTAG口的,強烈推薦大家嘗試:http://www.twentyone.blogchina.com/


    走到這一步,我只能說精彩的生活剛剛開始,接下來我會在linux和FPGA上作一些文章,這兩方面的工作我都剛剛開始,遠不夠深入!非常樂意和大家一起探討、學習、交流,讓我們一起進步!

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    22/2<12

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>