对于一个习惯51,AVR,对于理解程序下载在什么地方,执行时又是在那个地址所带来的安全感是开发的开始。2440仅仅是一快ARM9的处理器内部内有ROM,而ram也少的可怜(4K的Boot SRAM),因而需要在其外部挂上储存芯片,而2440分8个部分的外接储存设备接口,每个接口的地址已经固定且最大不能超过128M。
2440支持两种启动模式:
启动模式通过管脚电平设定,所以在上电之前其启动模式已经设定好。
1、Nand启动:上电,硬件立即从外部的nand flash 的前4K拷贝到SRAM中,地址0x0000为SRAM的0地址开始,及上电时cpu的主控权完全交给BootInternalSRAM (4KB),至于要把nand flash中的内容复制到SDRAM还是点亮一个LED就看你怎么编写。
2、nor启动: 0地址指向nor flash的0地址而非sram的0地址,上电cpu从0地址执行。
上电之前确定2440的启动模式后所有的储存设备的物理地址就已经确定,其执行各个设备的地址同时也已经确定。烧写地址和执行时的设备地址一样,烧写不过是利用jlink、h-link等把二进制文件烧写烧对应的地址address内,address为设备地址既保持该二进制文件的地址,你需要注意address的地址是否指向你要的设备,还有该设备是否需要擦除。
以下是我烧写用jlinkled流水灯到jz2440的程序:
step1:关看门狗,默认看门狗是开的
disable_watch_dog:
@ 往WATCHDOG寄存器写0即可
mov r1, #0x53000000
mov r2, #0x0
str r2, [r1]
mov pc, lr @ 返回
step2:设置寄存器的值便于使用Bank6外接的SDRAM可以不要,流水灯程序很小boot internnal SRAM空间足够了
mem_cfg_val:
@ 存储控制器13个寄存器的设置值
.long 0x22011110 @ BWSCON
.long 0x00000700 @ BANKCON0
.long 0x00000700 @ BANKCON1
.long 0x00000700 @ BANKCON2
.long 0x00000700 @ BANKCON3
.long 0x00000700 @ BANKCON4
.long 0x00000700 @ BANKCON5
.long 0x00018005 @ BANKCON6
.long 0x00018005 @ BANKCON7
.long 0x008C07A3 @ REFRESH
.long 0x000000B1 @ BANKSIZE
.long 0x00000030 @ MRSRB6
.long 0x00000030 @ MRSRB7
step3:跳转到C语言的main()中、main为流水灯
bl main
Step4生产编译链接生成bin文件
Step5利用jlink commander烧写bin到address 0x00 内 (注意是nand启动)
jlink执行的命令
1、h
2、loadbinC:\Users\Michael\Desktop\sdram\leds.bin 0x00 (如果是nor启动则是 ox40000000)
3、setpc ox00(如果是nor启动则是 ox40000000)
4、g
记住启动时nan 和nor是 其地址会不同一定要弄明白下表在写代码:
源文档 <http://blog.csdn.net/chinalj2009/article/details/12349163>