TMS320C6711的FLASH引导装载系统研究与设计
加快代码的执行速度。链接可由*.cmd文件来实现。代码在链接在应遵循以下原则:
(1)所有代码和初始化数据都必须有一个FLASH的导入地址;
(2)所有非常数数据据都有一个RAM运行地址;
(3)未初始化的数据无需独立的导入地址;
(4)从FLASH拷贝到RAM的代码要有一个FLASH导入地址和RAM运行地址。
3.3写自加载功能的定制代码
通常1kB的定制代码需要包括以下三个部分:
(1)配置EMIF寄存器。只有正确配置了EMIF的值,它才有可能访问外部存储器FLASH和SDRAM;
(2)拷贝初始化段。对于既有导入地址,又有运行地址的初始化段,需要把它从导入地址拷贝到它的运行地址处,处时还必须参考.map文件来确定要搬移的数据块的大小,这些段代码的搬移可以用汇编指令MOV来实现,也可以用TMS320C6711的EDMA来实现。由于用EDMA搬移数据要对EDMA参数进行设置,所以通常采用MOV指令来实现;
(3)转向C程序的入口_c_int00,即跳转到main()函数的入口处。
该自加载功能的代码如下:
BOOT_SIZE.equ0x9800;待装载代码的大小
FLASH_START.equ0x90000000;FLASH起始地址
BOOT_START.equ0x0000000;L2sram起始地址
EMIF_GCR.equ0x01800000;EMIF全局控制寄存器的地址
EMIF_CE1.equ0x01800004;CE1空间控制寄存器的地址
EMIF_CE1-8.equ0x1161C901;CE1空间控制寄存器的值
.sect".boot_load"
.global_boot
.ref_c_int00
_boot:
mvklEMIF_GCR,A4
mvkl0x3300,B4
mvkhEMIF_GCR,A4
mvkh0x3300,B4
stwB4,*A4;配置EMF全局控制寄存器
mvk1EMIF_CE1,A4
mvk1EMIF_CE1-8,B4
mvkhEMIF_CE1,A4
mvkhEMIF_CE1-8,B4
stwB4,*A4;配置CE1空间控制寄存器
mvklBOOT_START+1024,A4;待搬移数据的目标地址
mvklFLASH_START+1024,B4;待搬移数据的源地址
mvkhBOOT_START+1024,A4
mvkhFLASH_START+1024,B4
zer0A1
_boot_loop1:数据搬移
ldb*B4++,B5
mvklBOOT_SIZE, 《TMS320C6711的FLASH引导装载系统研究与设计(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/142407.html
(1)所有代码和初始化数据都必须有一个FLASH的导入地址;
(2)所有非常数数据据都有一个RAM运行地址;
(3)未初始化的数据无需独立的导入地址;
(4)从FLASH拷贝到RAM的代码要有一个FLASH导入地址和RAM运行地址。
3.3写自加载功能的定制代码
通常1kB的定制代码需要包括以下三个部分:
(1)配置EMIF寄存器。只有正确配置了EMIF的值,它才有可能访问外部存储器FLASH和SDRAM;
(2)拷贝初始化段。对于既有导入地址,又有运行地址的初始化段,需要把它从导入地址拷贝到它的运行地址处,处时还必须参考.map文件来确定要搬移的数据块的大小,这些段代码的搬移可以用汇编指令MOV来实现,也可以用TMS320C6711的EDMA来实现。由于用EDMA搬移数据要对EDMA参数进行设置,所以通常采用MOV指令来实现;
(3)转向C程序的入口_c_int00,即跳转到main()函数的入口处。
该自加载功能的代码如下:
BOOT_SIZE.equ0x9800;待装载代码的大小
FLASH_START.equ0x90000000;FLASH起始地址
BOOT_START.equ0x0000000;L2sram起始地址
EMIF_GCR.equ0x01800000;EMIF全局控制寄存器的地址
EMIF_CE1.equ0x01800004;CE1空间控制寄存器的地址
EMIF_CE1-8.equ0x1161C901;CE1空间控制寄存器的值
.sect".boot_load"
.global_boot
.ref_c_int00
_boot:
mvklEMIF_GCR,A4
mvkl0x3300,B4
mvkhEMIF_GCR,A4
mvkh0x3300,B4
stwB4,*A4;配置EMF全局控制寄存器
mvk1EMIF_CE1,A4
mvk1EMIF_CE1-8,B4
mvkhEMIF_CE1,A4
mvkhEMIF_CE1-8,B4
stwB4,*A4;配置CE1空间控制寄存器
mvklBOOT_START+1024,A4;待搬移数据的目标地址
mvklFLASH_START+1024,B4;待搬移数据的源地址
mvkhBOOT_START+1024,A4
mvkhFLASH_START+1024,B4
zer0A1
_boot_loop1:数据搬移
ldb*B4++,B5
mvklBOOT_SIZE, 《TMS320C6711的FLASH引导装载系统研究与设计(第3页)》