利用IAR 调试mini2440,准备先玩玩裸奔
以前开发Lpc2214的时候用的是IAR调试环境 感觉还是很不错的 当时一度错怪的了这开发环境
因为Lpc对Jtag的引脚可以配置成普通IO
我当时一时疏忽把他配置成IO了 导致IAR无法单步执行 一度觉得这个环境不好用 当时由于把Jtag口屏蔽了 导致下载一次以后JTAG口就不能用了 很多时候都是用串口擦除了片内Flash再烧写 后来回忆起来当时有点傻(主要还是当时误认为芯片被加密了,只能用串口擦除),当时完全不必用串口擦除程序。其实Jtag口被屏蔽了 直接把芯片的ISP使能引脚短接,然后芯片就从内部的Bootloader启动了,然后Flashloader就可以下载程序了
开发Lpc时还有一个需要注意的地方就是如果MEMMAP设置的不对的话,一发生中断就会跳到一个不对的地方 导致中断无法调试 因为这个原因 让我当时怀疑IAR是无法调试中断的 后来发现我完全错了
后来接触了Samsung的一些片子,知道了Mac文件的作用,mac文件是在编译成功的二进制文件下载到硬件之前,用来配置ARM寄存器的文件,比如2440带有片上的SDRAM控制器,由于上电后SDRAM寄存器是默认不使能的,所以如果要在RAM中调试程序的话,程序是无法下载到RAM中的。所以在文件下载之前必须配置SDRAM控制器。
我先在RAM中跑了一个RAM程序,mac文件如下
execUserFlashInit()
{
__writeMemory32(0x00000000, 0x53000000, "Memory");
__writeMemory32(0xffffffff, 0x4a000008, "Memory");
__writeMemory32(0x000007ff, 0x4a00001c, "Memory");
__writeMemory32(0x00000000, 0x53000000, "Memory");
__writeMemory32(0x000055AA, 0x56000050, "Memory");
__writeMemory32(0x00000007, 0x4C000014, "Memory");
__writeMemory32(0x00FFFFFF, 0x4C000000, "Memory");
__writeMemory32(0x00061012, 0x4C000004, "Memory");
__writeMemory32(0x00040042, 0x4C000008, "Memory");
__writeMemory32(0x22111120, 0x48000000, "Memory");
__writeMemory32(0x00002F50, 0x48000004, "Memory");
__writeMemory32(0x00000700, 0x48000008, "Memory");
__writeMemory32(0x00000700, 0x4800000C, "Memory");
__writeMemory32(0x00000700, 0x48000010, "Memory");
__writeMemory32(0x00000700, 0x48000014, "Memory");
__writeMemory32(0x0007FFFC, 0x48000018, "Memory");
__writeMemory32(0x00018005, 0x4800001C, "Memory");
__writeMemory32(0x00018005, 0x48000020, "Memory");
__writeMemory32(0x008E0459, 0x48000024, "Memory");
__writeMemory32(0x00000032, 0x48000028, "Memory");
__writeMemory32(0x00000030, 0x4800002C, "Memory");
__writeMemory32(0x00000030, 0x48000030, "Memory");
}
将ICF文件中的起始地址都设置成SDRAM的地址,程序就能下载运行并且调试了。
现在还没有摸索出来怎么将文件利用flashloader下载到外部flash中。参考lpc的调试,发现不管是下载到片内的FLASH还是片外的Flash,flashloader在程序下载之前首先要将一个.out文件下载到片子的RAM中,这点和HJTAG相似,HJTAG在下载时也是需要你指明RAM的起始地址的,他们这两个工具下载原理是一样的,加入你要将B程序烧写进flash中,必须先将一个编译好的二进制程序A下载到片子的内部RAM中,然后利用A这个程序在将要下载的B程序下载到flash中
IAR的flashloader提供很多片子的A程序,像LPC系列片子的A程序都有,但是对于2440就没有这个程序,需要自己写,如果不自己实现的话也可以采用HJTAG的HFALSHER来进行烧写。
上一篇:stm32的程序下载方式ISP、JFLASH、MDK总结
下一篇:Lpc系列ARM的中断向量表中实现方式
推荐阅读最新更新时间:2024-03-16 16:19