网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C6000 >> 文章正文
  TMS320C6416 second level bootloader的代码例子         ★★★ 【字体:
TMS320C6416 second level bootloader的代码例子
作者:Free    文章来源:本站原创    点击数:    更新时间:2007-11-19    
c6416如果需要从flash加载,必须写一个二级bootloader程序。这个程序由系统上电复位时直接由qdma载入到内部ram
它负责一些初始化配置工作以及1k后程序的搬移,下面是一个second level bootloader的代码例子,我修改自dm642的fpgaloader.
序不能太大,必须小于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
 
64的boot方式是从默认的地址上电后搬移1k的数据,再执行,一般我们在这1k里做一个搬移程序,把真实的程序搬过来,在把pc指向程序执行点,也就是两级boot
               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号