C6424通过EMIF ROM启动有两种方式,一种是with AIS 一种是without AIS;
第一种是将编译后的out文件转换为AIS格式写入到FLASH中,官方提供的资料中都是这种方式较多,这种应该是支持16位的FLASH接口的。
第二种是自已编写boot.asm,做一个二级bootloader,把ROM中的代码拷到RAM中,再跳到C入口运行,这种方式是不是不支持16位的FLASH?
我找了同系列的c6416、dm6437、6455、6713,看了好多参考设计与boot文件,全都是8 bits的设计,请问通过二级bootloader这种方式是不是不支持16位接口?
我的c6424FLASH接口设计的是16位的,boot.asm文件参考的是6416的代码(附后),EMIF的寄存器设置改为16位,AEM[2:0]设置为010,16bit EMIF模式,程序烧入FLASH后总是不能启动
是二级bootloader不支持16位ROM接口呢?还是程序或硬件上哪里设置的不对?请帮忙分析一下,谢谢
boot.asm
拷贝部分代码如下:
;****************************************************************************
;* 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:
mvkl 0x00000100, b0
nop 5
copy_done1:
sub b0,1,b0
[ b0] b copy_done1 ; have we copied all sections?
nop 9
b .S2 b1
nop 9