- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
DSP芯片TMS320C6712的外部内存自引导功能的实现
(1) 中断向量表 vectors.asm
中断向量表缺省保存在DSP芯片内部RAM的0地址开始的0x200字节空间,上电或复位后,芯片自动运行复位中断。因此,复位中断向量设置为引导程序(_boot)的入口地址,引导程序的主体在boot.asm中定义。部分程序如下:
.ref _boot ;调用引导程序
.sect ".vectors" ;段声明
RESET_RST: ;复位中断向量
mvkl .S2 _boot, B0 ;装载引导程序地址
mvkh .S2 _boot, B0
B .S2 B0 ;跳转到引导程序执行
NOP 5
(2) 自引导的汇编程序 boot.asm
自引导汇编程序主要是配置基本的寄存器,并将保存在外部FLASH中的二进制程序拷贝到DSP内部的RAM中再执行。由于TMS320C6712自动拷贝1KB,因此起始地址是从0x400开始,汇编程序如下:
.sect ".boot_load" ;定义数据段
.ref _c_int00 ;声明外部函数
.global _boot ;定义全局函数
_boot:
;先设置控制寄存器,如EMIF_GCR等,(略)
;拷贝FLASH中的程序到DSP内部RAM
mvkl 0x00000400, A4 ;A4为RAM地址指针
|| mvkl 0x90000400, B4 ;B4为FLASH地址指针
mvkh 0x00000400, A4
|| mvkh 0x90000400, B4
zero A1 ;A1用作计数器
_boot_loop: ;DSP开始读取FLASH中程序
ldb *B4++, B5
mvkl 0x0000F200, B6 ;B6为需要拷贝的字节数
add 1, A1, A1
|| mvkh 0x0000F200, B6
cmplt A1, B6, A0
nop
stb B5, *A4++
[B0] b _boot_loop
nop 5
mvkl .S2 _c_int00, B0 ;循环结束后,跳转到主函数main执行
mvkh .S2 _c_int00, B0
B .S2 B0
Nop 5
(3) 主程序 main.c
主程序是DSP要实现具体功能的主体,其定义的主函数main()经编译后在函数_c_int00中调用,因此在上面的引导程序结束时,将跳转到函数_c_int00,即主函数main执行。
(4) 链接命令程序 link.cmd
链接命令程序用于定义系统各存储器的地址及大小,并分配编译后各段到相应的存储空间,link.cmd内容如下:
-c
-lrts6201.lib
MEMORY
{
vecs: o = 00000000h =00000200h
BOOT_RAM: o = 00000200h l = 00000200h
IRAM: o = 00000400h l = 0000c400h
CE0: o = 80000000h l = 01000000h
CE1: o = 90000000h l = 00100000h
}
来源:维库开发网