网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> C6000文章 >> C64X系列 >> 文章正文
  TMS320C6416 Flash加载         ★★★ 【字体:
TMS320C6416 Flash加载
作者:A002    文章来源:本站    点击数:    更新时间:2007-2-28    

c6416如果需要从flash加载,必须写一个二级bootloader程序。这个程序由系统上电复位时直接由qdma载入到内部ram1k数据空间之中,它负责一些初始化配置工作以及1k后程序的搬移,下面是一个second level bootloader的代码例子,我修改自dm642fpgaloader.注意这个程序不能太大,必须小于1k.

;*********************************************************************

;

; second_level bootloader

;   flashload.s62

;   written by wang 2006-7-12

;

;********************************************************************

            .title  "Flash bootup utility for c6416"

            .option D,T

            .length 102

            .width  140

COPY_TABLE    .equ    0x64000400  

EMIFA_GCTL       .equ 0x01800000

EMIFA_CE1        .equ 0x01800004

EMIFA_CE0        .equ 0x01800008

EMIFA_CE2        .equ 0x01800010

EMIFA_CE3        .equ 0x01800014

EMIFA_SDRAMCTL   .equ 0x01800018

EMIFA_SDRAMTIM   .equ 0x0180001c

EMIFA_SDRAMEXT   .equ 0x01800020

EMIFA_CE1SECCTL  .equ 0x01800044

EMIFA_CE0SECCTL  .equ 0x01800048

EMIFA_CE2SECCTL  .equ 0x01800050

EMIFA_CE3SECCTL  .equ 0x01800054

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EMIFA_GCTL_V       .equ 0x000100BC

EMIFA_CE1_V        .equ 0xF7FFDFD3

EMIFA_CE0_V        .equ  0xffffffd3

EMIFA_CE2_V        .equ  0x1071C123

EMIFA_CE3_V        .equ  0xFFFFFF23

EMIFA_SDRAMCTL_V   .equ  0x63228000

EMIFA_SDRAMTIM_V   .equ  0x0000081b

EMIFA_SDRAMEXT_V   .equ  0x0005342b

EMIFA_CE1SECCTL_V  .equ  0x00000003

EMIFA_CE0SECCTL_V  .equ  0x00000002

EMIFA_CE2SECCTL_V  .equ  0x00000002

EMIFA_CE3SECCTL_V  .equ  0x00000002  

            .sect ".boot_load"

            .global _boot

_boot:     

;************************************************************************

;* Debug Loop -  Comment out B for Normal Operation

;************************************************************************

            zero B1

_myloop:  ; [!B1] B _myloop 

            nop  5

_myloopend: nop

;************************************************************************

;* Configure EMIF

;************************************************************************

;EMIFA_GCTL

  mvkl EMIFA_GCTL,a3

  mvkl EMIFA_GCTL_V,b3

  mvkh EMIFA_GCTL,a3

  mvkh EMIFA_GCTL_V,b3

  stw b3,*a3

;EMIFA_CE1

  mvkl EMIFA_CE1,a3

  mvkl EMIFA_CE1_V,b3

  mvkh EMIFA_CE1,a3

  mvkh EMIFA_CE1_V,b3

  stw b3,*a3

;EMIFA_CE0

  mvkl EMIFA_CE0,a3

  mvkl EMIFA_CE0_V,b3

  mvkh EMIFA_CE0,a3

  mvkh EMIFA_CE0_V,b3

  stw b3,*a3

;EMIFA_CE2

  mvkl EMIFA_CE2,a3

  mvkl EMIFA_CE2_V,b3

  mvkh EMIFA_CE2,a3

  mvkh EMIFA_CE2_V,b3

  stw b3,*a3

;EMIFA_CE3

  mvkl EMIFA_CE3,a3

  mvkl EMIFA_CE3_V,b3

  mvkh EMIFA_CE3,a3

  mvkh EMIFA_CE3_V,b3

  stw b3,*a3

;EMIFA_SDRAMCTL

  mvkl EMIFA_SDRAMCTL,a3

  mvkl EMIFA_SDRAMCTL_V,b3

  mvkh EMIFA_SDRAMCTL,a3

  mvkh EMIFA_SDRAMCTL_V,b3

  stw b3,*a3

;EMIFA_SDRAMTIM

  mvkl EMIFA_SDRAMTIM,a3

  mvkl EMIFA_SDRAMTIM_V,b3

  mvkh EMIFA_SDRAMTIM,a3

  mvkh EMIFA_SDRAMTIM_V,b3

  stw b3,*a3

;EMIFA_SDRAMEXT

  mvkl EMIFA_SDRAMEXT,a3

  mvkl EMIFA_SDRAMEXT_V,b3

  mvkh EMIFA_SDRAMEXT,a3

  mvkh EMIFA_SDRAMEXT_V,b3

  stw b3,*a3

;EMIFA_CE1SECCTL

  mvkl EMIFA_CE1SECCTL,a3

  mvkl EMIFA_CE1SECCTL_V,b3

  mvkh EMIFA_CE1SECCTL,a3

  mvkh EMIFA_CE1SECCTL_V,b3

  stw b3,*a3

;EMIFA_CE0SECCTL

  mvkl EMIFA_CE0SECCTL,a3

  mvkl EMIFA_CE0SECCTL_V,b3

  mvkh EMIFA_CE0SECCTL,a3

  mvkh EMIFA_CE0SECCTL_V,b3

  stw b3,*a3

;EMIFA_CE2SECCTL

  mvkl EMIFA_CE2SECCTL,a3

  mvkl EMIFA_CE2SECCTL_V,b3

  mvkh EMIFA_CE2SECCTL,a3

  mvkh EMIFA_CE2SECCTL_V,b3

  stw b3,*a3

;EMIFA_CE3SECCTL

  mvkl EMIFA_CE3SECCTL,a3

  mvkl EMIFA_CE3SECCTL_V,b3

  mvkh EMIFA_CE3SECCTL,a3

  mvkh EMIFA_CE3SECCTL_V,b3

  stw b3,*a3

;****************************************************************************

;* Copy code sections

;****************************************************************************

        mvkl  COPY_TABLE, a3   ; load table pointer

        mvkh  COPY_TABLE, a3

        ldw   *a3++, b1        ; Load entry point

copy_section_top:

        ldw   *a3++, b0        ; byte count

        ldw   *a3++, a4        ; ram start address

        nop   3

 [!b0]  b copy_done            ; have we copied all sections?

        nop   5

copy_loop:

        ldb   *a3++,b5

        sub   b0,1,b0          ; decrement counter

 [ b0]  b     copy_loop        ; setup branch if not done

 [!b0]  b     copy_section_top

        zero  a1

 [!b0]  and   3,a3,a1

        stb   b5,*a4++

 [!b0]  and   -4,a3,a5         ; round address up to next multiple of 4

 [ a1]  add   4,a5,a3          ; round address up to next multiple of 4

;****************************************************************************

;* Jump to entry point

;****************************************************************************

copy_done:

        b    .S2 b1

        nop   5

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    数字信号处理器在多媒体通信…
    G.729A语音编码TMS320VC5416…
    外挂Flash的引导装载设计
    TMS320LF2407A的FLASH编程的…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号