TMS320C6000 DSP自动引导的方法和编程实现
CE1VECS: origin=0x01400000, len = 0x00000200
CE1PMEM:origin = 0x01400200, len = 0x0000d000
CE1INIT: origin = 0x0140d200, len = 0x00001e00
CE3: origin = 0x03000000, len = 0x01000000
DRAM: origin = 0x80000000, len = 0x00010000
}
SECTIONS ;说明目标文件中各段的加载地址和运行地址
{
.myBootCode :load=CE1VECS, run=VECS
;用户的引导代码段
.text ?: load=CE1PMEM, run=PMEM
.cinit ?: load=CE1INIT, run=DRAM
;装载到ROM中,在片内数据区运行
.const > DRAM
.data > DRAM
.bss > DRAM
.sysmem > DRAM
.stack > DRAM
.far > CE3
}
3.2 编写用户引导代码
DSP加电复位后,自动从CE1空间中拷贝64K数据(程序代码)到地址0处,然后从0地址处开始执行指令。由于在命令文件中,将.cinit装载到外部ROM中,但其运行地址却在片内数据区,所以采用下面这段程序,其主要作用是将Cinit从外部ROM中搬到片内数据区,使其能在C编程环境下进行正确的初始化工作,保证程序的顺利进行。
.sect “.myBootCode”
;将用户引导代码分配到
myBootCode段中
.global myBootCode
.ref _c_int00
;C程序的入口地址
myBootCode?
......
;EMIF寄存器和DMA寄存器初始化
;使用DMA方式将以原地址0x0000d200开始的0x380长的存储空间拷贝到目标地址上
mvkl DMA0_SRA ,A5 ;装载原地址0xd200
mvkl 0x0000d200?, B4
mvkh DMA0_SRA ,A5
mvkh 0x0000d200m B4
stw B4,*A5
mvkl DMA0_DSA, A5 ;装载目标地址0x80000000
《TMS320C6000 DSP自动引导的方法和编程实现(第3页)》