DM6437烧写总结

2019-07-15 16:12发布

1 要了解烧写,首先要了解6437的存储器组织
存储器的硬件组织原理可以参看TMSC6000结构原理与硬件设计(北京航天航空大学);具体的存储器的硬件连接可以参照合众达的DEC6437原理图。从原理图可以知道,flash的控制信号线CE/OE/WE都是连接与板子上面的CPLD,如需要控制读写,还要参看flash的datasheet来了解其读写时序,编写CPLD的程序,这里暂且略过,S29AL032D数据线22根,相当于内部有4M*8bit的存储空间(在flash烧写的程序中会有一句
if(FillSize > 0x100000)
{
printf("The OUT file is too big! ");
}
之所以这里是1M,不是4M,是因为后面调用fread的时候是按照4字节为单位来读取的!),地址线连接于EM_BA0-1(用于bank区分) EM_A0-A19
片选是选择的cs2,因此flash用到的空间是EMIF_CS2 = 0x0x4200 0000,查看存储器映射表(详见TMS320DM6437 Digital Media Processor中table 2-3)
因此,在烧写的程序中基址被定为
#define FLASH_BASE ( EMIF_CS2_BASE )
数据总线与dsp的连接是:EM_D0-7 8位
因此,flash写数据时,指针设置为从FLASH_BASE开始的地方。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
gaochy1126
2019-07-16 11:33
copy_loop: ; 循环加载当前段内容
ldb *a3++,b5 ;将flash地址中的数放到B5 8bit
sub b0,1,b0 ; decrement counter 每加载一个,字节数减1
[ b0] b copy_loop ; setup branch if not done 判断加载字节数是否为零
[!b0] b copy_section_top ; 当前段加载成功后转入加载下一段
zero a1 ; 执行完这条指令B5和A4中才有新的数据
[!b0] and 3,a3,a1 ; 什么条件下执行??
stb b5,*a4++ ; 将flash读出到B5中的段内容放到对应的ram地址中,
; 按bit8搬移
[!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:
mvkl 0x00000100, b0 ; set pll_div1 register value
nop 5
copy_done1:
sub b0,1,b0
[ b0] b copy_done1 ; have we copied all sections?
nop 9

b .S2 b1 ;跳转到c入口标签地址 这句还不太懂
nop 9

一周热门 更多>