利用IAR调试Mini2440

发布者:bln898最新更新时间:2018-12-12 来源: eefocus关键字:IAR调试  Mini2440 手机看文章 扫描二维码
随时随地手机看文章

利用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来进行烧写。


关键字:IAR调试  Mini2440 引用地址:利用IAR调试Mini2440

上一篇:stm32的程序下载方式ISP、JFLASH、MDK总结
下一篇:Lpc系列ARM的中断向量表中实现方式

推荐阅读最新更新时间:2024-03-16 16:19

Keil IAR - Cortex M3 调试问题及解决方法(1)
看到一篇文章,转载如下。 其实不光是STM32, 其它芯片甚至其它的IDE 都可参考。 STM32调试过程中常见的问题及解决方法 一、 在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device found.” 解决办法: Keil MDK默认使用ULINK仿真器下载程序,在“Utilities选项卡”下把编程所使用的仿真器改为相应的类型即可。 二、 编译工程时提示如下信息: main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10x_nvic.o). main.axf:
[单片机]
keil mini2440 分散加载文件scatter中(InRoot$$Sections)的理解
查阅一些资料终于认识了 (InRoot Sections)实现对映像的加载,而这一段代码就是∗(InRoot Sections)实现对映像的加载,而这一段代码就是∗(InRoot Sections)它是__main()的一部分。 从启动代码说起 启动代码 1。异常/中断跳转的地址表。 2。堆栈初始化 3。分散加载镜像文件 IMAGE(映像文件) 1个RO, 1个RW, 1个ZI组成。 并且RO的load region和execution region相同,这个里面放置 *(InRoot$$Sections) 主要作用COPY RW区到RAM,然后再RW区后面创建ZI区。 库函数__main函数中有这个段。 注释掉会报出
[单片机]
Mini2440 NRF24L01无线模块驱动
为了和jihuaLi 完成智能家居系统,我移植了这个驱动,不管写的如何,总结一下是很有必要的。 NRF24L01使用SPI总线与主机通信,没有SPI端口的设备可以使用IO口进行模拟。 关于SPI: SPI是一种四线串行总线, SCLK: 串行时钟线 MOSI: 总线主机输出/ 从机输入 MISO: 总线主机输入/ 从机输出; SS: 从机使能 数据传输方式 通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿
[单片机]
<font color='red'>Mini2440</font> NRF24L01无线模块驱动
mini2440第一个裸机程序——点亮LED
手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习。 我使用的是友善之臂的Mini2440开发板、韦东山的《嵌入式Linux应用开发完成手册》及其视频教程。所以,本篇文章中所涉及到的各种软件均可在以下两处找到: 0. Mini2440开发板的配套光盘 韦东山JZ2440开发板的光盘 JZ2440是韦东山出品的开发板,作为《嵌入式Linux应用开发完全手册》的配套硬件,它和Mini2440相差无几,所以我这里用的是Mini2440。 一、目标 动手之前先确定好一个小目标——这一次,我们的目标是在Mini2440上点亮LED,怎么样,听起来很简单吧。 但是做起来,可并不是很简单喏,主要
[单片机]
<font color='red'>mini2440</font>第一个裸机程序——点亮LED
Linux-2.6.32.2内核在mini2440上的移植(七)---LCD驱动移植
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,linux 版本:linux-2.6.32.2 7,参考文章: 嵌入式linux应用开发完全手册,韦东山,编著。 Mini2440 之Linux 移植开发实战指南 【1】LCD 驱动基础知识 Linux-2.6.32.2 内核已经支持S3C2440
[单片机]
Linux-2.6.32.2内核在<font color='red'>mini2440</font>上的移植(七)---LCD驱动移植
u-boot-2009.08在mini2440上的移植(一)---建立mini2440工程环境(1)
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,参考文章: http://blogold.chinaunix.net/u3/101649/showart.php?id=2105215 http://blog.chinaunix.net/space.php?uid=23787856&do=blog&id=115382
[单片机]
u-boot-2009.08在<font color='red'>mini2440</font>上的移植(一)---建立<font color='red'>mini2440</font>工程环境(1)
deepin下mini2440 qt gui开发
这些文章都是参照我之前ubuntu下的环境搭建写的,并且在deepin下一边操作验证,一边截图记录。 (1)deepin下配置mini2440 nfs挂载 (2)deepin下配置交叉编译环境 (3)deepin下移植qt到mini2440 (4)deepin下设计qt程序 (5)deepin下烧录文件系统到mini2440 1,安装NFS服务程序 打开命令终端(快捷键:ctrl+alt+t) sudo -s 输入密码 sudo apt-get install nfs-kernel-server 2,配置/etc/exports NFS挂载目录及权限由/etc/exports文件定义 编辑 /etc/exports文件写入/
[单片机]
deepin下<font color='red'>mini2440</font> qt gui开发
mini2440串口模块总结
一.串口工作原理: 1.由上面的串口电路可知具体流程如下: 发送:写数据——》buffer—》shifter—》TXDn-- RSTXDn--- PC 接收:PC---》RSRXDn---》RXDn--- shifter-- buffer--- 取数据 2.由上图可知, buffer有两种模式,FIFO模式 和 Non-FIFO模式。 如果使用FIFO模式,则需要配置FIFO Register,具有64 字节的缓存可用。 如果使用Non-FIFO模式,则不需要配置FIFO Register,但是只具有一个字节的缓存可用。 3.做串口模块的具体流程: 1 .从串口电路图中可以知道,我们首先应
[单片机]
<font color='red'>mini2440</font>串口模块总结
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved