《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > DM642引導加載方式研究及其C語言實現
DM642引導加載方式研究及其C語言實現
來源:電子技術應用2013年第7期
劉 勇1,2, 張忠偉1, 董文濤1, 安軍社1
1. 中國科學院空間科學與應用研究中心,北京100190; 2. 中國科學院研究生院,北京100190
摘要: 詳細闡述了DM642的二級bootloader基本原理、加載過程及其C語言實現方案,并驗證了該方案的可行性與穩定性, 為開發基于DM642的多媒體系統提供了新思路、新途徑,具有很大的實用性。
中圖分類號: TP311.11
文獻標識碼: A
文章編號: 0258-7998(2013)07-0134-03
Research of bootloader and its implementation with C for DM642
Liu Yong1,2, Zhang Zhongwei1, Dong Wentao1, An Junshe1
1. Center for Space Science and Applied Research, Chinese Academy of Sciences, Beijing 100190, China; 2. Graduate University of Chinese Academy Sciences, Beijing 100190, China
Abstract: This paper describes the basic principle and loading process of secondary bootloader and its implementation with C for DM642. The feasibility and stability of this scheme has been verified. A new idea and way for developing multimedia processing system based on DM642 is provided. It has great practical significance.
Key words : DM642; self-startup; secondary bootloader; C language

    DM642[1]是TI公司推出的一款高性能的數字多媒體處理器, 屬于C64x系列DSP芯片,并保留了C64x原有的內核結構,具有二級存儲器和高速緩沖器, 以及超長指令字結構。其運算速度快、體積小、功耗低的優點使其廣泛應用于多媒體處理領域[2]。

    DM642系統在脫機運行時, 用戶代碼需要在加電后自動加載運行。這一過程通常由引導加載程序(bootloader)來完成的,bootloader自動將一段存儲在外部非易失性存儲器中的代碼移植到高速存儲器單元中執行。因此, 開發可靠穩定的bootloader成為嵌入式系統項目中的一個重點和難點。本文在深入研究分析DM642系統軟硬件的基礎上,摒棄傳統的匯編移植方案,用C語言實現了DM642的引導加載過程,同時該方案對于TI C6000系列DSP芯片具有通用性,可以在該系列不同器件中方便地移植。
1 DM642與Flash硬件連接
    系統選用意法半導體公司的SST39VF080 Flash芯片,其容量為1 M×8 bit,8根數據線,20根地址線,與DM642的EMIF接口實現無縫連接[3],兩者接線圖如圖1所示。DM642選擇EMIF啟動時,從CE1空間起始處(地址0x90000000)加載數據,所以外部Flash必須接在EMIF接口的CE1空間。

2 DM642加載方式研究
2.1 DM642自啟動方式

    DM642有三種啟動方式,分別是Host boot、EMIF boot和No boot。系統上電或復位時通過采樣引腳AEA[22:21]的電平來設置,具體配置如表1所示。

    DM642選擇Host boot啟動方式時,系統上電復位后CPU將停止運行,其他設備正常運行。這期間,外部主機能夠通過Host接口初始化CPU的存儲器和內部的配置寄存器,主機完成初始化工作后,通過設置HPIC寄存器的DSPINT位,CPU即從0地址開始運行。選擇No boot啟動方式時,CPU直接從0地址運行程序。本文重點研究EMIF boot啟動方式的加載過程。
2.2 EMIF boot加載過程
    DM642系統的CE1空間外接Flash固態存儲器,當選擇從EMIF啟動時,DM642芯片內部已完成固化的加載程序(也稱一級bootloader)會自動從Flash空間(CE1空間,起始地址0x90000000)讀取1 KB數據到內部RAM空間(起始地址0x00000000),然后跳轉到0x00000000處執行。這個過程由DM642處理器自動完成,用戶無法干預。
    如果用戶的應用程序很小(<1 KB),則直接通過系統的一級bootloader加載即可;但是用戶的應用程序通常>1 KB,所以位于0x00000000地址的1 KB程序通常也是一個引導程序(又稱二級bootloader),其作用是將應用程序從Flash中讀出并放到內存中,然后跳轉到c_int00()執行,這個過程也被稱為二次加載[4]。
3 二級bootloader程序設計
3.1  傳統設計方案

    二級bootloader需要完成3部分功能:
 (1)初始化EMIF口,配置其寄存器;
 (2)把Flash中1 KB以后的各程序段和數據拷貝到指定的存儲物理地址中;
 (3)跳到C程序入口點c_int00()運行。
   傳統的二級bootloader設計方案多通常基于TI公司提供的匯編例程移植實現[5],該方案要求設計者熟練掌握TI C6000系列DSP匯編語言,開發難度大、周期長。
3.2 C語言實現
    二級bootloader采用匯編語言編寫,是因為在引導過程中還未建立C語言的運行環境,包括系統堆棧定義、初始化堆棧、初始化全局和靜態變量等[6]。但是如果能夠避開系統堆棧操作,仍然可以使用C語言編寫二級bootloader程序。
    這些與系統堆棧相關的操作主要有兩方面:(1)定義局部變量時使用register修飾類型,表明是定義在寄存器中,而不是堆棧中;(2)不需進行函數調用,包括C庫函數的調用。
    把目標工程燒寫到Flash中,數據在Flash中的分配如圖2所示。其中,前1 KB空間(圖中灰色部分)存放二級bootloader;地址0x90000400之后的Flash空間存放用戶應用程序,從圖2可知應用程序存儲是以_c_int00()開始,以0x00000000結束,中間是各代碼段和數據段。

    基于上述Flash中數據分配,以下是對應的二級bootloader部分C語言程序代碼:
    #include <c6x.h>
    #define Flash_CODE_ADDR    0x90000400
    #pragma CODE_SECTION(boot, ".bootloader");
    extern far void c_int00(void);
    void boot(void)
    { register int code_i;
      register int addr_ptr;
      register int code_len;
      register int code_addr;
                                     //此處需要先初始化EMIF口;
      // addr_ptr指向代碼段1長度位置
      addr_ptr = (int)(FLASH_CODE_ADDR+4);    
for(; ;)
      {
      //代碼段長度
      code_len = *(volatile int *)addr_ptr;
      addr_ptr += 4;
      //代碼段運行地址
      code_addr = *(volatile int *)addr_ptr;
      addr_ptr += 4;
      if(code_len == 0x00000000)
      {
         //跳轉到C語言入口
         c_int00();    
      }
      else
      {
         //把代碼段從Flash中讀到片內來
         for(code_i=0;code_i<code_len;code_i++)
         {
             *(char *)(code_addr+code_i)
       = *(char *)addr_ptr;
           addr_ptr++;
         }
      }
     }
}
    程序中"#pragma CODE_SECTION(boot,".bootloader")語句的作用是將boot定位在.Bootloader段,然后在.cmd文件中將.bootloader段映射到片內起始1 KB內存區。此bootloader程序編譯后體積為352 B,不會超過1 KB的限制。另外該程序是基于小端字節序編寫,若系統為大端字節序,需要作少許修改。
    使用C語言設計bootloader,極大提高了程序的可讀性和移植性,加快了用戶應用程序的開發。但其效率低于傳統的匯編bootloader,所以從系統上電到加載完成運行所需時間略長。
3.3 程序燒寫
 在CCS中目標工程生成的是COFF格式(.out文件)。而Flash燒寫工具一般只支持ASC II十六進制格式,所以,必須先用16進制轉換工具將.out文件轉換成.hex文件[7],再進行燒寫。燒寫目標程序的步驟為:
  (1)編譯生成目標工程的.out文件,在編譯之前需進行如下操作: ①把上述C語言編寫的bootloader程序添加到目標工程中去; ②修改目標工程的.cmd文件,將bootloader這段代碼映射到片內起始1 KB內存區,目標工程中的其他代碼放在后面。
  (2)用16進制轉換工具hex6x.exe從.out文件產生.hex文件。
  (3)用Flashburn軟件燒錄.hex文件。
3.4 結果驗證
  系統采用自主研發的DM642硬件平臺,為了驗證C語言bootloader程序的可行性與穩定性,具體操作步驟如下:
  (1)編寫測試應用程序,其功能是通過串口循環向PC機發送預定的數據;
  (2)按照上述方法把程序燒寫到Flash中;
  (3)斷電,設置 AEA[22:21]為&ldquo;11&rdquo;,即EMIF boot啟動方式;
  (4)系統與PC串口連接、上電,查看PC機上的串口調試助手是否收到預定的數據。

 


    驗證時,若PC機上的串口調試助手收到的數據與DM642應用程序發送的數據一致,則表明該方案可行。重復驗證操作,每次都能收到預定的數據,則表明該方案穩定。
    本文的創新之處在于采用C語言實現了DM642的二級引導加載程序的設計,不再需要使用TI公司提供的匯編程序例程進行移植,提高了程序的可讀性和移植性。在實際項目中已經證實了該方案可行性和穩定性,同時,該方案適用于TI C6000系列各種型號,可以在該系列不同器件中方便地移植,為基于DM642的實際應用開發提供了新的途徑。
參考文獻
[1] TI. SPRS200N TMS320DM642 video/imaging fixed-point digital signal processor[S]. 2002.
[2] 張志濤,梁光明.基于DM642的Flash分頁二級引導程序設計[J].現代電子技術,2009(22):210-212.
[3] 韓非,胡春海.TMS320C6000系列DSP開發應用技巧[M].北京:中國電力出版社,2008.
[4] 王躍宗,劉京會.TMS320DM642 DSP應用系統設計與開發[M].北京:人民郵電出版社,2009.
[5] 劉志發,張東,楊艷,等.基于DM642自啟動的Flash燒寫原理研究及實現[J].現代電子技術,2008(22):8-11.
[6] 李興友,游志勝.基于DM642的大容量Flash引導加載方法研究與實現[J].計算機應用,2005,25(8):1939-1941.
[7] 胡海龍,彭啟琮.TMS320C6713基于DSP/BIOS的二級BootLoader開發[J]. 現代電子技術,2005(15):74-75.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          日韩系列欧美系列| 欧美怡红院视频一区二区三区| 中日韩男男gay无套| 久久免费黄色| 韩国成人精品a∨在线观看| 亚洲一区二区黄| 国产美女诱惑一区二区| 国产精品久久久久久影院8一贰佰| 亚洲欧洲精品一区二区| 亚洲一区免费看| 亚洲欧美高清| 久久久久久国产精品一区| 久久婷婷久久一区二区三区| 欧美激情免费观看| 欧美午夜不卡影院在线观看完整版免费| 欧美好吊妞视频| 亚洲免费视频成人| 免费91麻豆精品国产自产在线观看| 日韩一级免费| 欧美一区二区三区在线| 亚洲美女黄色片| 国产精品一区二区三区久久| 国产综合香蕉五月婷在线| 欧美精品一区二区三区一线天视频| 亚洲乱码国产乱码精品精天堂| 免费久久99精品国产自在现线| 日韩午夜中文字幕| 久久福利影视| 最新成人av网站| 欧美亚洲视频在线观看| 欧美激情亚洲| 一色屋精品视频在线看| 日韩视频在线永久播放| 免费精品视频| 欧美日本在线看| 国产精品人人做人人爽| 蜜桃av久久久亚洲精品| 在线电影欧美日韩一区二区私密| 国产在线观看91精品一区| 亚洲激情在线播放| 国语对白精品一区二区| 欧美激情精品久久久久久黑人| 久久丁香综合五月国产三级网站| 一区二区三区产品免费精品久久75| 久久久精品一品道一区| 国产精品一区二区三区四区| 99视频一区二区三区| 狠狠爱成人网| 亚洲免费在线观看| 国产精品护士白丝一区av| 亚洲美女在线视频| 久久嫩草精品久久久久| 亚洲黄网站黄| 好吊色欧美一区二区三区视频| 欧美日韩综合精品| 久久久www成人免费无遮挡大片| 亚洲福利精品| 欧美激情免费观看| 国产丝袜一区二区| 亚洲精品久久久久| 国产一级揄自揄精品视频| 欧美三级电影大全| 国产欧美日韩91| 久久国产福利| 一区二区日韩欧美| 久久精品国产亚洲精品| 欧美精品在线一区二区三区| 欧美激情在线有限公司| 夜夜爽99久久国产综合精品女不卡| 国产精品久久一级| 国产一区 二区 三区一级| 校园春色综合网| 久久免费精品视频| 亚洲国产精品一区在线观看不卡| 久久久久久97三级| 国产精品拍天天在线| 久久综合免费视频影院| 欧美a级理论片| 久久这里只有精品视频首页| 国产美女诱惑一区二区| 国产精品久久网站| 亚洲激情小视频| 黄色成人精品网站| 午夜国产精品影院在线观看| 国产日韩欧美精品综合| 99精品黄色片免费大全| 黄色成人在线| 欧美一区二粉嫩精品国产一线天| 亚洲一区二区三区在线视频| 久久久久久久波多野高潮日日| 国内精品久久久久国产盗摄免费观看完整版| 国产日韩欧美另类| 在线观看国产日韩| 欧美日韩成人综合| 国产精品亚洲一区| 亚洲欧美激情视频| 亚洲少妇一区| 欧美亚洲综合在线| 欧美激情中文字幕一区二区| 国产日韩一区二区三区| 洋洋av久久久久久久一区| 一区二区日韩伦理片| 久久精品视频在线播放| 欧美一级艳片视频免费观看| 久久这里只有精品视频首页| 麻豆视频一区二区| 欧美国产日韩a欧美在线观看| 欧美精品一区二区三区在线播放| 一区二区三区视频在线观看| 国产精品一区二区a| 亚洲精品中文字幕女同| 99re这里只有精品6| 中文在线资源观看网站视频免费不卡| 亚洲国产日韩美| 亚洲激情视频在线观看| 狠狠色狠狠色综合日日91app| 亚洲第一色在线| 欧美日韩在线一区二区| 欧美成人免费在线| 国产亚洲欧洲997久久综合| 欧美日韩国内自拍| 亚洲尤物影院| 欧美亚洲午夜视频在线观看| 一区在线观看| 国产精品视频久久久| 欧美日韩 国产精品| 欧美日韩精品系列| 久久综合影音| 欧美中文字幕在线播放| 欧美激情第1页| 欧美精品性视频| 国产精品久久毛片a| 久久在线观看视频| 亚洲欧美日韩久久精品| 极品中文字幕一区| 国产精品初高中精品久久| 欧美不卡视频| 亚洲在线视频| 亚洲女女做受ⅹxx高潮| 亚洲免费av网站| 免费在线亚洲欧美| 欧美亚洲在线视频| 久久在线精品| 美女脱光内衣内裤视频久久影院| 欧美性大战久久久久久久蜜臀| 国产精品久久久久久亚洲毛片| 国产一区二区久久| 在线免费观看日本欧美| 亚洲欧美日本精品| 亚洲美女少妇无套啪啪呻吟| 黄色免费成人| 国产午夜精品理论片a级大结局| 国产乱理伦片在线观看夜一区| 久久久国产一区二区| 亚洲欧美在线高清| 一区二区三区日韩欧美| 免费日韩av电影| 国产欧美一区二区三区沐欲| 国产精品电影网站| 久久久精品日韩| 欧美日韩一区二区三区四区五区| 在线观看91久久久久久| 免费观看亚洲视频大全| 亚洲精品乱码久久久久久| 亚洲欧洲在线免费| 国产精品国产三级国产aⅴ9色| 亚洲小说区图片区| 国模精品一区二区三区色天香| 欧美日韩成人精品| 亚洲国产精品一区| 久久免费少妇高潮久久精品99| 亚洲一区二区日本| 久久不射网站| 国产欧美欧美| 欧美一区二区精品在线| 亚洲七七久久综合桃花剧情介绍| 欧美一区二区免费观在线| 黄色成人在线观看| 国模私拍一区二区三区| 性欧美在线看片a免费观看| 国产精品国产馆在线真实露脸| 国产综合18久久久久久| 日韩视频免费观看高清在线视频| 中文国产成人精品| 亚洲一区二区精品在线观看| 亚洲欧美日韩成人高清在线一区| 久久综合九色综合久99| 亚洲精品一二三区| 欧美日本高清视频| 国产综合久久久久久| 韩日视频一区| 国产午夜精品麻豆| 美日韩丰满少妇在线观看| 麻豆精品视频在线| 欧美高清视频在线播放| 欧美黄免费看| 一区二区三区精品视频| 久久免费一区| 国产亚洲精品久久久久婷婷瑜伽| 9色国产精品| 国产日韩精品电影| 亚洲国产成人一区| 国内精品久久久久影院薰衣草| 亚洲综合色视频| 欧美日韩岛国| 亚洲精品在线看| 一本大道久久a久久精品综合| 狠狠色2019综合网| 欧美一区二区三区免费观看| 亚洲宅男天堂在线观看无病毒| 91久久精品日日躁夜夜躁国产| 久久亚洲影院| 日韩亚洲在线观看| 亚洲性人人天天夜夜摸| 日韩午夜在线电影| 亚洲午夜极品| 免费一级欧美在线大片| 欧美日韩国产在线播放网站| 亚洲精品国产精品国自产观看| 亚洲精品美女在线观看| 欧美日韩综合网| 欧美日韩国产精品一区二区亚洲| 在线观看91久久久久久| 国产伦精品一区二区三区照片91| 乱中年女人伦av一区二区| 中文在线不卡| 亚洲高清成人| 欧美在线不卡视频| 在线 亚洲欧美在线综合一区| 狠狠久久五月精品中文字幕| 国产欧美一区二区精品仙草咪| 噜噜噜在线观看免费视频日韩| 国产精品theporn88| 在线观看视频一区| 欧美激情视频免费观看| 欧美激情 亚洲a∨综合| 日韩亚洲在线| 国模精品一区二区三区色天香| 欧美日韩你懂的| 99国产精品99久久久久久| 国产午夜精品全部视频在线播放| 欧美成人精品一区二区| 中文精品一区二区三区| 午夜国产不卡在线观看视频| 伊人久久亚洲美女图片| 国产综合色精品一区二区三区| 国产精品av一区二区| 国产精品chinese| 欧美大成色www永久网站婷| 欧美激情亚洲精品| 欧美网站在线观看| 欧美国产第一页| 亚洲资源在线观看| 精品动漫3d一区二区三区免费| 一区二区三区在线视频观看| 欧美国产高潮xxxx1819| 午夜国产精品影院在线观看| 国产精品成人在线| 欧美淫片网站| 欧美午夜免费电影| 含羞草久久爱69一区| 国产精品网站在线观看| 国产三区精品| 一本在线高清不卡dvd| 欧美中文字幕视频在线观看| 在线视频成人| 国内精品**久久毛片app| 亚洲人成在线观看| 在线精品视频一区二区| 亚洲区在线播放| 亚洲精品在线免费观看视频| 日韩视频欧美视频| 欧美人在线视频| 欧美午夜精品一区| 欧美日韩小视频| 久久夜色精品一区| 亚洲一区二区三区精品在线| 欧美日韩在线视频一区二区| 在线日本欧美| 一区二区三区视频观看| 欧美成人视屏| 在线观看国产成人av片| 欧美人与性动交α欧美精品济南到| 日韩一级网站| 久热精品在线| 久久一区二区三区国产精品| 欧美福利小视频| 精品成人乱色一区二区| 亚洲精品国产日韩| 亚洲综合国产激情另类一区| 久久精品视频免费播放| 欧美大香线蕉线伊人久久国产精品| 久久亚洲精品中文字幕冲田杏梨| 久久久久免费视频| 亚洲伦理在线| 羞羞答答国产精品www一本| 男女精品视频| 樱桃国产成人精品视频| 亚洲二区视频| 欧美午夜精品久久久久久超碰| 久久视频国产精品免费视频在线| 亚洲激情视频| 国产精品日韩二区| 国产精品一区在线播放| 国产麻豆日韩| 麻豆国产va免费精品高清在线| 亚洲国内高清视频| 欧美一区二区高清在线观看| 欧美午夜免费| 久久综合中文| 欧美日韩在线观看一区二区三区| 日韩视频―中文字幕| 狠狠入ady亚洲精品| 99re66热这里只有精品4| 久久免费观看视频| 夜夜爽www精品| 欧美一区二区三区视频在线观看| 午夜一级久久| 欧美日韩国产在线一区| 亚洲欧美日韩在线播放| 国产日韩欧美在线播放| 久久这里只精品最新地址| 久久久久九九九九| 久久久久国产精品人| 欧美日韩岛国| 亚洲资源在线观看| 国产精品成人一区二区| 欧美午夜精品久久久久久浪潮|