• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于C6000系列DSP片外Flash的IAP設(shè)計(jì)

    2018-02-25 06:21:08李光學(xué)李超郭燕紅岳宗帥宋茜
    電子技術(shù)與軟件工程 2018年9期

    李光學(xué) 李超 郭燕紅 岳宗帥 宋茜

    摘要 本文在基于C6000系列DSP片外Flash的基礎(chǔ)上,針對(duì)嵌入式設(shè)備程序燒寫(xiě)升級(jí)困難的問(wèn)題, 闡述了In-ApplicationProgramming (lAP)的設(shè)計(jì)方案,詳細(xì)介紹了二次引導(dǎo)啟動(dòng)及首次燒寫(xiě)方法,給出關(guān)鍵技術(shù)的代碼實(shí)現(xiàn)。采用IAP很好的實(shí)現(xiàn)了C6000系列DSP的程序燒寫(xiě)及升級(jí),其不用借助外部工具,可靠便捷,通用性好,具有良好的推廣價(jià)值。

    【關(guān)鍵詞】C6000 DSP 片外 Flash IAP

    1 概述

    C6000系列DSP在產(chǎn)品的開(kāi)發(fā)的過(guò)程中,固件程序的升級(jí)更新非常頻繁,若繼續(xù)采用傳統(tǒng)的JTAG或者ICP等燒寫(xiě)方法,過(guò)程繁瑣復(fù)雜,極大地降低了工作效率,所以開(kāi)發(fā)一種便捷,可靠,通用性好的在應(yīng)用燒寫(xiě)In-Application Programming (IAP)方法就顯得格外重要。06000系列DSP不帶片上ROM,脫機(jī)運(yùn)行需要配置外部Flash,不能直接通過(guò)JTAG仿真器來(lái)燒寫(xiě)程序,與一般自帶片上ROM的單片機(jī)系統(tǒng)的IAP開(kāi)發(fā)方法不同,本文針對(duì)上述問(wèn)題,詳細(xì)闡述了C6000系列DSP的IAP實(shí)現(xiàn)原理及整個(gè)引導(dǎo)啟動(dòng)流程。

    2 DSP配置分析

    DSP系統(tǒng)上電后,在復(fù)位信號(hào)的上升沿處,會(huì)鎖存BOOTMODE引腳信號(hào),借以決定DSP的存儲(chǔ)器映射方式,地址為0處的存儲(chǔ)器類(lèi)型及復(fù)位后芯片的自舉方式。BOOTMODE信號(hào)決定了DSP在復(fù)位期間所做的工作。C6000系列DSP主要有以下3種自舉模式:

    (1)不加載(NO BOOT)。DSP直接從地址O處開(kāi)始執(zhí)行程序,地址O處的存儲(chǔ)器可以是DSP內(nèi)部存儲(chǔ)器或者外部RAM,這種方式適用于仿真器系統(tǒng)下的DSP自舉模式。

    (2) ROM加載。此種方式適合8位、16位和32位的ROM( -般為Flash)。對(duì)于不同型號(hào)的C6000系列DSP,需注意Flash的大小端模式存儲(chǔ)。

    (3)主機(jī)引導(dǎo)(HPI Boot)。CPU在復(fù)位期間,其硬件保持正常工作狀態(tài),外部主機(jī)通過(guò)HPI接口初始化CPU的存儲(chǔ)空間。

    復(fù)位結(jié)束后,無(wú)論采用哪種引導(dǎo)方式,DSP芯片都將從地址O處開(kāi)始執(zhí)行程序。因該系列DSP不自帶Flash,本系統(tǒng)以C6701為例,設(shè)計(jì)一個(gè)脫機(jī)運(yùn)行系統(tǒng),外部配置16位Flash,加載方式為16bit ROM加載,即自舉模式2,存儲(chǔ)器映射為MAP1,地址O處為內(nèi)部存儲(chǔ)器,BOOTMODE引腳需配置為Oll01。

    3 首次燒寫(xiě)設(shè)計(jì)

    06000系列DSP沒(méi)有片上ROM,只有片上RAM,脫機(jī)運(yùn)行需配置外部Flash,第一次代碼燒寫(xiě)需編寫(xiě)專門(mén)的燒寫(xiě)程序來(lái)下載應(yīng)用程序到外部Flash中。這是一種需要加載兩次程序的方法,如圖1所示,首先用CCS編譯軟件打開(kāi)用戶應(yīng)用程序,生成可執(zhí)行文件(0UT),然后用CCS的file/load program加載應(yīng)用程序的OUT文件到DSP片上內(nèi)存空間。再通過(guò)map文件,確定應(yīng)用程序各段數(shù)據(jù)所對(duì)應(yīng)的空間,將程序段和數(shù)據(jù)段這兩段數(shù)據(jù)采用file/data/load命令分別導(dǎo)出成dat格式的文件。然后加載Flash燒寫(xiě)程序,利用file/data/load命令,將生成的dat文件加加載到DSP片上RAM的一段未使用的空間中,然后使用專用燒寫(xiě)程序?qū)?shù)據(jù)燒寫(xiě)到對(duì)應(yīng)的Flash空間中。

    其燒寫(xiě)函數(shù)實(shí)現(xiàn)如下所示:

    ProgramFlash (PRAM, PFlash,Length);//將程序段燒入FLSAH中

    ProgramFlash (DRAM, DFlash, Length);//將數(shù)據(jù)段燒入Flash中

    其中函數(shù)的定義是:

    void ProgramFlash (int *sourcepoint, Uint32Flashpoint;Uint32 int j)第一個(gè)參數(shù)sourcepoint是待燒寫(xiě)數(shù)據(jù)在片上RAM首地址;第二個(gè)參數(shù)Flashpoint是將被燒寫(xiě)Flash的首地址;最后一個(gè)參數(shù)j是待燒寫(xiě)的32位數(shù)據(jù)的總長(zhǎng)度。

    圖2所示為首次燒寫(xiě)過(guò)程中,代碼在片上RAM和片外ROM(Flash)中的變化,首先專用燒寫(xiě)程序通過(guò)自舉模式1啟動(dòng),然后手動(dòng)載入待燒寫(xiě)的用戶應(yīng)用程序,接著運(yùn)行專用燒寫(xiě)程序?qū)⒂脩魬?yīng)用程序燒入片外ROM中,斷電后片上RAM數(shù)據(jù)消失,只有片外ROM的用戶應(yīng)用程序。

    4 應(yīng)用程序設(shè)計(jì)

    上面介紹了首次如何使用專用燒寫(xiě)程序,借助CCS開(kāi)發(fā)環(huán)境將用戶應(yīng)用程序燒寫(xiě)到片外ROM(Flash)中。為了能讓DSP脫機(jī)運(yùn)行,一個(gè)完整的用戶應(yīng)用程序需包含實(shí)際的應(yīng)用程序數(shù)據(jù)和二次引導(dǎo)代碼數(shù)據(jù)。DSP芯片在復(fù)位時(shí),DMA控制器自動(dòng)將片外ROM(Flash)自起始地址一定大小的程序(二次引導(dǎo)代碼)搬移到片上RAM地址O處,即自引導(dǎo)過(guò)程,如圖中過(guò)程l所示;完成復(fù)位后,CPU從地址O處開(kāi)始執(zhí)行程序,把應(yīng)用程序數(shù)據(jù)從片外ROM搬運(yùn)到片上RAM的某地址處,即二次引導(dǎo)過(guò)程,然后跳轉(zhuǎn)到c int00(mam函數(shù))處運(yùn)行,如圖中過(guò)程3所示,最終完成應(yīng)用程序的啟動(dòng)。

    當(dāng)用戶應(yīng)用程序需要更新的時(shí)候,可以采用首次燒寫(xiě)方法進(jìn)行,但比較繁瑣,特別對(duì)于一些正式產(chǎn)品來(lái)說(shuō),那只能返廠更新,本文設(shè)計(jì)的應(yīng)用程序包含在線燒寫(xiě)功能,可以通過(guò)總線接收數(shù)據(jù),燒寫(xiě)進(jìn)入外部Flash中,如圖3 最后一個(gè)步驟所示。

    下面將分別從CMD連接命令文件配置,二次引導(dǎo)程序設(shè)計(jì),向量表設(shè)計(jì),在線燒寫(xiě)設(shè)計(jì)詳細(xì)介紹IAP的實(shí)現(xiàn)。因C6000系列DSP的原理都一致,實(shí)例代碼是以C6701硬件平臺(tái)給出。

    4.1 CMD連接命令文件配置

    CMD文件的作用是實(shí)現(xiàn)程序代碼和數(shù)據(jù)在DSP存儲(chǔ)空間的定位,在編譯連接時(shí)由CCS開(kāi)發(fā)環(huán)境調(diào)用。脫機(jī)啟動(dòng)時(shí),自引導(dǎo)就是將片外ROM的向量表和二次引導(dǎo)程序搬到地址0處執(zhí)行,所以需在CMD文件中明確這兩個(gè)段的運(yùn)行空間,CMD文件如下

    -heap Ox400

    -stack Ox400

    MEMORY

    {

    vecs:

    o=OOOOOOOOh l=00000200h//向量表空間

    boot_ load:

    0 = 00000200h 1=00000200h//二次引導(dǎo)程序空間

    IPRAM:

    o=00000400h 1=OOOOeOOOh∥程序段空間

    IDRAM:

    o=80000000h 1=OOOlOOOOh,/數(shù)據(jù)段空間

    SEC,TIONS

    {

    ”vectors” >

    vecs

    //將”vectors”段存儲(chǔ)到vecs空間

    ”.boot_ load”>

    boot_ load//將”boot load”段存儲(chǔ)到boot load空間

    cinit

    >

    IDRAM

    .text

    >

    IPRAM

    .stack > IDRAM

    .bss

    > IDRAM

    const >

    IDRAM

    data > IDRAM

    .far

    >IDRAM

    .switch > IDRAM

    .sysmem >

    IDRAM

    tables >IDRAM

    Cl0 > IDRAM

    其中vectors和boot load段存儲(chǔ)的為向量表和二次引導(dǎo)程序,地址范圍為O-Ox3ff,啟動(dòng)時(shí)被自動(dòng)加載到地址0處并執(zhí)行。

    4.2 二次引導(dǎo)程序設(shè)計(jì)

    二次引導(dǎo)程序的作用是將應(yīng)用程序數(shù)據(jù)從片外ROM(Flash)搬移到片上RAM存儲(chǔ)器中執(zhí)行。本實(shí)例中將二次引導(dǎo)程序保存在DSP內(nèi)部RAM的Ox200地址開(kāi)始的Ox200字節(jié)空間,由于復(fù)位中斷向量設(shè)置為二次引導(dǎo)程序的入口地址,所以當(dāng)系統(tǒng)上電復(fù)位后,系統(tǒng)轉(zhuǎn)去執(zhí)行二次引導(dǎo)程序,將應(yīng)用程序數(shù)據(jù)段搬移到指定的存儲(chǔ)空間,再跳轉(zhuǎn)到DSP主程序的程序入口處(c int00)執(zhí)行DSP應(yīng)用程序。主要代碼如下:

    EMIF GCR

    e quOx01800000 11定義EMIF全局控制器GBLCTL

    EMIF GCR DATA

    equ Ox3779//設(shè)置GBLCTL參數(shù)

    EMIF CEl

    e quOx01800004∥定義EMIF CEl控制器CEICTL

    EMIF_CEl_DATA .equ Oxffffff03 11設(shè)置CEICTL

    BOOT SLZE

    .equ Ox600 //設(shè)置搬運(yùn)長(zhǎng)度,單位為字節(jié)

    sect”boot load”

    ∥定義”boot load”段

    ref_cint00

    //引用全局符號(hào)c int00

    .global _boot

    //定義一個(gè)全局符號(hào)boot,供外部調(diào)用

    boot:

    mvkl EMIF_GCR,A4

    ||mvkl EMIF_GCR_DATA, B4

    mvkh EMIF_GCR,A4

    ||mvkh EMIF_GCR_DATA, B4

    stw B4, *A4

    //設(shè)置GBLCTL參數(shù)

    mvkl EMIF CE1.A4

    ll mvkl EMIF_CEl_DATA,B4

    mvkh EMIF CE1.A4

    || mvkh EMIF_CEl_DATA,B4

    stw B4, *A4

    +設(shè)置CEICTL參數(shù)

    mvkl Ox80000000,A4

    || mvkl Ox01410000,B4

    mvkh Ox80000000,A4

    ll mvkh Ox01410000,B4

    //A4為數(shù)據(jù)段地址指針,B4為Flash地址指針

    zero Al

    //Al作為計(jì)數(shù)器,清零Al

    _boot_loop:

    //循環(huán)搬運(yùn)

    ldb*B4++,B5

    //DSP讀取Flash中的數(shù)據(jù)到寄存器B5

    mvkl BOOT_SIZE,B6

    //B6為需要拷貝的字節(jié)數(shù)

    add l,A1,A1

    //Al=Al++

    || mvkh BOOT_SIZE,B6

    cmplt Al,B6,BO

    ∥若AI

    NOP

    stb B5,*A4++

    ∥將從Flash讀出數(shù)據(jù)搬運(yùn)到數(shù)據(jù)空間中

    [BO]B _boot_loop

    //判斷BO值,為1跳轉(zhuǎn)到boot_loop處執(zhí)行

    NOP 5

    mvkl .s2_c_int00,BO //循環(huán)結(jié)束后,跳轉(zhuǎn)到主函數(shù)開(kāi)始執(zhí)行

    mvkh .s2 _c int00, BO //把cint00裝載到BO寄存器

    B

    .s2 BO

    ∥跳轉(zhuǎn)到主函數(shù)

    NOP 5

    4.3 向量表設(shè)計(jì)

    中斷向量表vectors保存在DSP內(nèi)部RAM的O地址開(kāi)始的Ox200字節(jié)空間,上電或復(fù)位后,DSP自動(dòng)運(yùn)行復(fù)位中斷。因此,復(fù)位中斷響應(yīng)設(shè)置為二次引導(dǎo)程序的入口地址(boot)。中斷向量表的復(fù)位程序如下:

    ref_ boot //調(diào)用boot引導(dǎo)程序

    sect”vectors”//定義一個(gè)段

    RESET RST://復(fù)位中斷向量

    mvkl.S2__ boot,BO

    mvkh.S2_ boot,BO//裝載引導(dǎo)程序地址

    B.S2 BO∥跳轉(zhuǎn)到引導(dǎo)程序執(zhí)行

    4.4 在線燒寫(xiě)程序設(shè)計(jì)

    考慮到后續(xù)程序升級(jí)的需求,利用IAP實(shí)現(xiàn)在線升級(jí)功能。在應(yīng)用程序中,有一部分代碼專門(mén)用來(lái)判斷是否需要進(jìn)行軟件更新,若需要更新則進(jìn)入程序燒寫(xiě)流程,若不需要?jiǎng)t繼續(xù)執(zhí)行程序。燒寫(xiě)函數(shù)同首次燒寫(xiě)程序類(lèi)似,燒寫(xiě)時(shí)需要將OUT文件轉(zhuǎn)化為HEX十六進(jìn)制文件,有專門(mén)的工具,這里不再敖述。

    5 結(jié)論

    本文利用IAP在應(yīng)用編程設(shè)計(jì),解決了C6000系列DSP的首次程序燒寫(xiě)與后續(xù)程序更新升級(jí)的問(wèn)題,其不用借助外部工具,方案可靠便捷,通用性好,本系統(tǒng)通過(guò)多次測(cè)試,性能穩(wěn)定,具有良好的推廣價(jià)值。本文詳細(xì)介紹了首次燒寫(xiě)方法及二次引導(dǎo)設(shè)計(jì),給出關(guān)鍵技術(shù)的代碼實(shí)現(xiàn),脫機(jī)運(yùn)行系統(tǒng)都可以參考。

    參考文獻(xiàn)

    [1]崔旭濤,楊日杰,何又.TMS320C6701 DSP的程序引導(dǎo)方法及編程實(shí)現(xiàn)[J].電子工程師,2006,32 (09):36-39.

    [2]鄭歡歡,穆占杰.基于C6000系列DSP片外Flash自啟動(dòng)方法[J].信息化研究,2011,37 (05): 34-37.

    [3]李方慧,王飛,何佩琨等.TMS320C6000系列DSP原理與應(yīng)用[M].北京:電子工業(yè)出版社,2003.

    [4]劉偉,魏芹芹,王偉.TMS320C672x系列DSP原理與應(yīng)用[M],北京:北京航空航天大學(xué)出版社,2008.

    木里| 油尖旺区| 泰安市| 辛集市| 五大连池市| 介休市| 汉沽区| 青田县| 越西县| 新野县| 义马市| 碌曲县| 高碑店市| 两当县| 志丹县| 鄂伦春自治旗| 宁陵县| 怀安县| 新闻| 松江区| 观塘区| 额济纳旗| 尼勒克县| 勐海县| 峡江县| 民权县| 措美县| 峨边| 开鲁县| 松江区| 繁昌县| 景宁| 旌德县| 营口市| 积石山| 潞西市| 辰溪县| 柘荣县| 延吉市| 北京市| 宣恩县|