亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于TMS320C6455+DDR2的Flash加載及燒寫(xiě)程序研究

        2019-03-08 10:21:48陳俊凱劉笑凱馮國(guó)兵徐一鳳劉書(shū)萌
        關(guān)鍵詞:程序方法

        陳俊凱,劉笑凱,周 林,馮國(guó)兵,徐一鳳,劉書(shū)萌,王 龍

        (中國(guó)電子信息產(chǎn)業(yè)集團(tuán)有限公司第六研究所,北京 100083)

        0 引言

        TMS320C6455是一款非常優(yōu)秀的DSP處理芯片,由于內(nèi)部沒(méi)有Flash存儲(chǔ)空間,離線運(yùn)行時(shí)需要外部加載程序,因此在設(shè)計(jì)通用信號(hào)處理模塊前,有必要研究DSP的加載方式。許多文獻(xiàn)介紹了將執(zhí)行程序加載到DSP內(nèi)部L2RAM的設(shè)計(jì)方法,但是TMS320C6455的內(nèi)部存儲(chǔ)空間較小,只有32 KB的L1P程序空間、32 KB的L1D數(shù)據(jù)空間及2 MB的L2RAM。沒(méi)有內(nèi)部Flash[1],當(dāng)代碼量超過(guò)2 MB時(shí),或者需要在L2RAM留出較大的數(shù)據(jù)空間時(shí),將代碼加載到內(nèi)部L2RAM變得不可行,由于TMS320C6455設(shè)計(jì)有DDR2接口,可以擴(kuò)展最大512 MB的外部存儲(chǔ)空間。本文設(shè)計(jì)將代碼加載到空間很大的外部DDR2芯片,緩解內(nèi)部存儲(chǔ)空間不足的矛盾。如圖1所示,TMS320C6455通過(guò)EMIFA接口連接Flash芯片,通過(guò)DDR2接口外擴(kuò)DDR2芯片,通過(guò)軟件設(shè)計(jì),使用戶程序存儲(chǔ)于Flash芯片,執(zhí)行于DDR2芯片。

        圖1 TMS320C6455外部擴(kuò)展DDR2和Flash芯片框圖

        1 在線仿真

        開(kāi)發(fā)人員在進(jìn)行程序代碼的仿真調(diào)試過(guò)程中,由于TMS320C6455的內(nèi)部存儲(chǔ)空間有限,可以盡可能地把代碼和數(shù)據(jù)存儲(chǔ)在外部存儲(chǔ)空間DDR2上。使用DDR2存儲(chǔ)空間的條件是,在CMD文件中將生成帶代碼及數(shù)據(jù)段映射到DDR2的存儲(chǔ)空間上,還需要在調(diào)試代碼之前,初始化TMS320C6455的DDR2配置寄存器。此時(shí),可以借助GEL文件,通過(guò)仿真器初始化DDR2配置寄存器,然后在接口函數(shù)OnTargetConnect()中調(diào)用DDR2初始化函數(shù),利用外部存儲(chǔ)空間DDR2在線仿真調(diào)試代碼。GEL文件中的初始化DDR2控制器代碼如下:

        init_ddr2()

        {

        *(int *)PERCFG1 = 0x00000003;

        DDR_SDCFG = 0x00D38832;

        DDR_SDRFC = 0x0000079E;

        DDR_SDTIM1 = 0x3EDB4B91;

        DDR_SDRIM2 = 0x00A2C722;

        DDR_DDRPHYC = 0x00000006;

        DDR_SDCFG = 0x00538832;

        }

        2 外部Flash加載過(guò)程

        TMS6455引導(dǎo)模式包括外部Flash啟動(dòng)、主機(jī)接口啟動(dòng)、SRIO啟動(dòng)、IIC啟動(dòng)等多種啟動(dòng)方式[2-3],而在實(shí)際應(yīng)用中,啟動(dòng)模式絕大多數(shù)為外部Flash啟動(dòng)方式。DSP在該方式下從外部EMIFA接口CS3模式下加載1 KB代碼,然而1 KB大小的代碼量無(wú)法滿足系統(tǒng)需要。要達(dá)到DSP的高速運(yùn)算,又不能將大量代碼放在外部Flash中運(yùn)行。因此,當(dāng)用戶代碼長(zhǎng)度大于1 KB時(shí),需要使用二次加載[4]。即專(zhuān)門(mén)編寫(xiě)一段長(zhǎng)度為1 KB的二次加載程序,在初始化時(shí)被加載到DSP。而這段程序的功能是從外部Flash的某個(gè)地址處將1 KB 以外的全部用戶程序和數(shù)據(jù)拷貝到其運(yùn)行地址處,如圖2所示。

        圖2 DSP使用二次加載程序的加載過(guò)程

        在DSP芯片復(fù)位期間,程序指針自動(dòng)指向片內(nèi)ROM中的Boot Loader的小程序,這個(gè)程序會(huì)根據(jù)相應(yīng)的BOOTMODE管腳狀態(tài)選擇相應(yīng)的程序加載方法,按照默認(rèn)的時(shí)序?qū)⑼獠縁lash中的程序搬移到DSP內(nèi)部的RAM程序區(qū)中,通常被傳輸?shù)氖嵌渭虞d程序,傳輸完成后,運(yùn)行二次加載程序,初始化關(guān)鍵的寄存器,然后將系統(tǒng)程序剩余代碼和數(shù)據(jù)拷貝到指定的位置中[5-6]。本文介紹如何將系統(tǒng)程序和數(shù)據(jù)拷貝到DDR2中運(yùn)行的設(shè)置方法,在二次加載程序的最后跳轉(zhuǎn)到_c_int00處,初始化C運(yùn)行時(shí)的環(huán)境,一旦運(yùn)行到環(huán)境初始化完成,就開(kāi)始運(yùn)行用戶代碼。

        3 存儲(chǔ)區(qū)域分配

        TI的集成開(kāi)發(fā)工具CCS編譯鏈接后生成的.out文件是通用對(duì)象文件格式(Common Object File Format,COFF)的,不能直接燒錄到外部Flash,因?yàn)镕lash中保存的應(yīng)該是原始的DSP機(jī)器碼,即燒錄的應(yīng)該是DSP程序的二進(jìn)制文件[3]。有幾種方法可以實(shí)現(xiàn)文件格式的轉(zhuǎn)換,一種是直接提取COFF文件中的原始數(shù)據(jù)部分。這種方法比較復(fù)雜,但是有助于理解.cmd文件的編寫(xiě)原理以及鏈接器的工作過(guò)程。還有一種方法是借助CCS自帶的工具,在編譯選項(xiàng)Build的Step選項(xiàng)卡的post-Build step Command文本框中,填寫(xiě)如下命令:

        “MYM{CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat”

        “MYM{BuildArtifactFileName}”

        “MYM{BuildArtifactFileBaseName}.bin”

        “MYM{CG_TOOL_ROOT}/bin/ofd6x.exe”

        “MYM{CG_TOOL_ROOT}/bin/hex6x.exe”

        “MYM{CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe”

        在Debug目錄下生成的.bin文件可以直接燒錄到外部Flash中。

        以上方法都需要進(jìn)行格式轉(zhuǎn)換,還有一種較為簡(jiǎn)單的方法,直接利用CCS開(kāi)發(fā)工具將用戶程序(包含二次加載程序)編譯鏈接后生成的.out文件通過(guò)仿真器下載到與DSP連接的DDR2中,但是不運(yùn)行程序。用戶程序在DSP外部DDR2中就是以二進(jìn)制的格式存儲(chǔ)的機(jī)器碼,可以直接通過(guò)在線編程的方法燒寫(xiě)到片外的Flash中。開(kāi)發(fā)人員運(yùn)行在線燒寫(xiě)Flash的程序(這個(gè)程序完成的功能是將代碼寫(xiě)入到Flash),這里存在的風(fēng)險(xiǎn)就是燒寫(xiě)程序的存儲(chǔ)區(qū)域與前面用戶程序的存儲(chǔ)區(qū)域相沖突,要注意在兩個(gè)工程的cmd文件中存儲(chǔ)區(qū)域不要重疊,如圖3所示。

        圖3 程序在DSP+DDR2的存儲(chǔ)分配方式

        在用戶工程的CMD文件中,也就是第一個(gè)工程中,將二次加載程序及用戶程序配置在DSP外部DDR2空間中(0xE0000000~0xF0000000);在燒寫(xiě)Flash工程的CMD文件中,將代碼配置在DSP內(nèi)部L2RAM的空間,保證燒寫(xiě)Flash程序的.out文件下載下去之后不會(huì)與前面下載的目標(biāo)工程的.out文件存儲(chǔ)區(qū)域相沖突。然后運(yùn)行燒寫(xiě)Flash程序,將前面下載的用戶程序?qū)懭胪獠縁lash芯片中。

        4 二次加載程序

        二次加載程序?qū)崿F(xiàn)的功能為:(1)初始化關(guān)鍵寄存器,如DDR2寄存器;(2)將用戶程序的剩余代碼和數(shù)據(jù)拷貝到指定位置;(3)搬移完代碼之后,跳轉(zhuǎn)到_c_int00處,開(kāi)始執(zhí)行用戶代碼。本文將代碼段和數(shù)據(jù)段存放在DDR2空間。因此在編寫(xiě)二次加載程序時(shí),搬移代碼之前,需要初始化DDR2寄存器,才可以正常將代碼搬移到DDR2空間中。同時(shí)查看用戶工程map文件中代碼段的大小,設(shè)置搬移代碼BOOT_SIZE的值,注意匯編程序每次搬移是16位數(shù)據(jù),所以BOOT_SIZE的大小等于真實(shí)代碼段大小除以2,由于二次加載程序受限于1 KB字節(jié)的大小,因此二次加載程序采用更為簡(jiǎn)潔的匯編程序來(lái)實(shí)現(xiàn)。二次加載程序的代碼大小、代碼搬移地址、代碼DDR2寄存器、EMIFA寄存器參數(shù)的設(shè)置如下:

        BOOT_SIZE .equ 0x000FF000

        FLASH_START .equ 0xB0000000

        BOOT_START .equ 0xE0000000 ;DDR2

        ;EMIF config

        EMIF_CF3CFG_R .equ 0x70000084

        EMIF_AWCC_R .equ 0x700000A0

        EMIF_CF3CFG_V .equ 0x012C8024

        EMIF_AWCC_V .equ 0x40000380

        ;DDR config

        PERCFG1_R .equ 0x02AC002C

        DDR_MIDR_R .equ 0x78000000

        DDR_SDCFG_R .equ 0x78000008

        DDR_SDRFC_R .equ 0x7800000C

        DDR_SDTIM1_R .equ 0x78000010

        DDR_SDTIM2_R .equ 0x78000014

        DDR_DDRPHYC_R .equ 0x780000E4

        PERCFG1_V .equ 0x00000003

        DDR_SDCFG_V1 .equ 0x00D38832

        DDR_SDRFC_V .equ 0x000007A2

        DDR_SDTIM1_V .equ 0x3EDB4B91

        DDR_SDTIM2_V .equ 0x00A2C722

        DDR_DDRPHYC_V .equ 0x00000006

        DDR_SDCFG_V2 .equ 0x00538832

        將上述參數(shù)以下面的匯編語(yǔ)句寫(xiě)入相應(yīng)得寄存器地址,完成寄存器參數(shù)的配置:

        MVKL EMIF_CF3CFG_R,A4

        MVKH EMIF_CF3CFG_R,A4

        MVKL EMIF_CF3CFG_V,B4

        MVKH EMIF_CF3CFG_V,B4

        STW B4,*A4

        將DDR2的起始地址BOOT_START加載到A4寄存器,將Flash的起始地址FLASH_START加載到B4寄存器,代碼搬移長(zhǎng)度BOOT_SIZE加載到A0寄存器,然后下面的語(yǔ)句完成代碼從Flash到DDR2的搬移過(guò)程。

        _wait_loop:LDH *B4++[1],B5

        SUB A0,1,A0

        NOP 4

        STH B5,*A4++[1]

        [A0] B _wait_loop

        NOP 5

        搬移完成之后,跳轉(zhuǎn)到_c_int00位置,啟動(dòng)程序。

        MVKL.S2 _c_int00,B0

        MVKH.S2 _c_int00,B0

        B.S2 B0

        NOP 5

        5 燒寫(xiě)程序設(shè)計(jì)

        用戶程序和二次加載程序都編寫(xiě)完畢后,想要完成加載功能,還需要的就是燒寫(xiě)程序的編寫(xiě)了。寫(xiě)入Flash芯片之前需要先擦除掉原來(lái)的內(nèi)容,再寫(xiě)入用戶代碼。擦除和寫(xiě)入操作驅(qū)動(dòng)程序根據(jù)不同的Flash芯片有所不同。本文只給出燒寫(xiě)部分內(nèi)容,CODE_SIZE為實(shí)際要燒寫(xiě)的用戶程序大?。?/p>

        #define CODE_SIZE 0x127fd1

        #define DDR_ADDR 0xE0000000

        #define FLASH_ADDR 0xB0000000

        //擦除Flash

        flash_Erase();

        //燒寫(xiě)用戶程序

        Count= 0;

        for(i = 0;i < CODE_SIZE;i++)

        {

        if(0!=flash_writes(FLASH_ADDR +i,*(unsigned char *)(DDR_ADDR +i)))

        Count++;

        }

        6 結(jié)束語(yǔ)

        本文詳細(xì)介紹了TMS320C6455+DDR2的在線仿真及ROM加載模式,并給出了二次加載程序的匯編代碼以及Flash燒寫(xiě)代碼。通過(guò)上文的方法,可以實(shí)現(xiàn)將執(zhí)行代碼加載到DSP的外部存儲(chǔ)空間DDR2上,用戶代碼受限于DSP內(nèi)部存儲(chǔ)空間的大小,有利于運(yùn)行復(fù)雜度比較高得數(shù)據(jù)運(yùn)算,其TMS320C6455+DDR2的硬件平臺(tái)可以支撐起有大量運(yùn)算需求的產(chǎn)品應(yīng)用,在信息安全領(lǐng)域的密碼方面[7-8],可以為對(duì)稱密碼算法(如AES、3DES)、公鑰密碼算法(如RSA算法、橢圓曲線算法)、消息摘要的哈希算法等大運(yùn)算量的算法提供良好的硬件平臺(tái)。

        猜你喜歡
        程序方法
        學(xué)習(xí)方法
        試論我國(guó)未決羈押程序的立法完善
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        可能是方法不對(duì)
        用對(duì)方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        賺錢(qián)方法
        色综合视频一区中文字幕| 日本免费看一区二区三区| 精品视频在线观看日韩| 99精品国产在热久久无码| 又爽又黄禁片视频1000免费| 亚洲AV秘 无套一区二区三区| 久久久精品国产av麻豆樱花 | 久久99国产综合精品| 久久久精品2019免费观看| 久久亚洲成a人片| 人妻中文字幕在线一二区| 欧美做受又硬又粗又大视频| 福利视频一二三在线观看| 国产思思久99久精品| 乳乱中文字幕熟女熟妇 | 夜先锋av资源网站| av色综合网站| av免费在线播放一区二区| 亚洲av成人无码久久精品老人| 性动态图av无码专区| 国产成人综合日韩精品无| 国产一级内射一片视频免费| 国产精品无码久久综合网| 女人与牲口性恔配视频免费| 欧美日韩视频无码一区二区三| 亚洲a级片在线观看| 91人妻一区二区三区蜜臀| 乱老年女人伦免费视频| 欧美成人看片黄a免费看| 无码av专区丝袜专区| 久久夜色国产精品噜噜亚洲av| 区二区三区玖玖玖| 国产日韩A∨无码免费播放| 中文字幕丰满人妻被公强| 人妻中文字幕在线网站| 老头巨大挺进莹莹的体内免费视频| 午夜无码片在线观看影院y| 久草视频这里只有精品| 天天鲁在视频在线观看| 亚洲国产成人久久综合一区77| 亚洲精品大全中文字幕|