IAR调试S3C6410的笔记(二)

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

    简单地说,IAR调试S3C6410可以分成以下3个步骤:

1)编写mac文件,初始化S3C6410的看门狗、时钟、DDRAM控制器等,为下载代码做准备。

2)编写icf文件对S3C6410的内存空间进行分配,配置堆栈段、数据段、程序段的起始地址和大小。

3)编写S3C6410的启动代码,跳至main函数运行。


    下面是飞凌6410核心板的IAR调试过程:

1)编写mac文件。mac文件无非就是初始化cpu,这个功能Wince的FIRSTBOOT就可以实现,直接在nandflash里烧入FIRSTBOOT(飞凌里叫什么steploader),然后改为nandflash启动,搞定~(飞凌给的资料里,用RVDS2.2调试S3C6410就是这么干的,友善的就不晓得了)

2)编写icf文件。icf文件大同小异,可以根据IAR的模板修改,路径为IAR Systems\Embedded Workbench 6.0\arm\config\generic.icf,只需修改地址映射和段位置即可,以下为我的icf文件


/*###ICF### Section handled by ICF editor, don't touch! ****/

/*-Editor annotation file-*/

/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */

/*

/*-Specials-*/

define symbol __ICFEDIT_intvec_start__ = 0xc000000;

/*-Memory Regions-*/

define symbol __ICFEDIT_region_ROM_start__ = 0x50000000;

define symbol __ICFEDIT_region_ROM_end__   = 0x50FFFFFF;

define symbol __ICFEDIT_region_RAM_start__ = 0x51000000;

define symbol __ICFEDIT_region_RAM_end__   = 0x51FFFFFF;

/*-Sizes-*/

define symbol __ICFEDIT_size_cstack__   = 0x1000;

define symbol __ICFEDIT_size_svcstack__ = 0x800;

define symbol __ICFEDIT_size_irqstack__ = 0x800;

define symbol __ICFEDIT_size_fiqstack__ = 0x800;

define symbol __ICFEDIT_size_undstack__ = 0x800;

define symbol __ICFEDIT_size_abtstack__ = 0x800;

define symbol __ICFEDIT_size_heap__     = 0x800;

/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;

define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];

define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };

define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };

define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };

define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };

define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };

define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };

define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { section .intvec };

do not initialize  { section .noinit };

place in ROM_region { section .intvec };

place in ROM_region { section .intvec_init };

place in ROM_region { section .iar.init_table };

place in ROM_region { section .text };

place in RAM_region { section .data };

place in RAM_region { section .bss };

place in RAM_region   { block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,

                        block UND_STACK, block ABT_STACK, block HEAP };

飞凌核心板使用的是DDRAM,起始地址为0x50000000

从文件可以看出程序段放在0x50000000~00x50FFFFFF,数据段放在0x51000000~00x51FFFFFF

3)编写启动代码。其实启动代码可短可长,完成关键部分就行,这里把IAR Systems\Embedded Workbench 6.0\arm\src\lib\arm\cstartup.s复制过去就行,现在万事具备,只差用IAR新建工程了。


关键字:IAR调试  S3C6410 引用地址:IAR调试S3C6410的笔记(二)

上一篇:LPC2XXX系列ARM带CAN的波特率计算
下一篇:为S3C6410添加开机logo(Wince6.0)(一)

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

s3c6410的UART设备驱动(3)
上一篇说到了第二部分,但没说完,这一篇接着说第二部分,如下这部分: 在模块初始化是调用uart_register_driver和uart_add_port注册UART驱动并添加端口,在模块卸载时调用uart_unregister_driver和uart_remove_one_port以注销UART驱动并移除端口。 1、先来看uart_add_one_port函数,源码如下: /** * uart_add_one_port - attach a driver-defined port structure * @drv: pointer to the uart low level driver structure fo
[单片机]
S3C6410裸机UART驱动(将printf重定义到串口)
要确保S3C6410已经初始化,一般是使用UBOOT初始化 //串口寄存器 //UART0 #defineULCON0 *((vu32*)0x7F005000) //UART通道0 行控制寄存器 #defineUCON0 *((vu32*)0x7F005004) //UART通道0 控制寄存器 #defineUFCON0 *((vu32*)0x7F005008) //UART通道0 FIFO 控制寄存器 #defineUMCON0 *((vu32*)0x7F00500C) //UART通道0 调制解调器(Modem)
[单片机]
基于ARM11和MMS的远程监控系统研究
引言 随着国民经济的快速发展和人民生活水平的日益提高,各种监控系统应运而生,广泛应用于银行、铁路、民航等重点领域,并逐步进入到个人家居监控应用领域中。目前大多数监控系统都是将现场信息发送到远程计算机上,但计算机携带不方便,不能满足人们随时随地查看现场信息的需求。而手机相对计算机来说普及率高、成本低、携带轻便,尤其是近年来GPRS无线数字移动通信网的快速发展,为手机终端提供了无线接入Internet业务,使得手机成为互联网中最普遍的终端设备。多媒体消息服务(Multimedia Message Service,MMS)作为GPRS一项基本业务,被广大手机用户所使用。它不仅实现了终端之间、终端和电子邮件之间的信息传递,还实现了内容的
[单片机]
基于ARM11和MMS的远程监控系统研究
s3c6410 uart 裸机 轮询 非fifo
/* uart 非中断模式R,轮询,不用fifo */ #include stdio.h #include uart.h #include gpio.h #include sysc.h #define UART0 ( ( volatile UART_REGS * ) (UART_BASE)) u32 Inp32(u32 xx) { return xx; } void GpioInit() { // 设置gpio ,使用uart0 u32 TEMP; TEMP = GPIO- rGPIOACON; TEMP &= ~(0XFF); TEMP |= 0X22; GPIO- rGPIOACON =
[单片机]
IAR 串口调试,基于新唐n76e003的双串口透传程序设计
在解决好多bug后终于实现了双串口之间的相互收发,但是主管说写的程序很垃圾,但是终于能用了,还是很开心,在指导下会进一步修改,如果只是完成作业的话可以借鉴一下,话不多说,继续码上 在这里插入 //*********************************************************************************************************** // File Function: N76E003 UART-0 Mode1 demo code //************************************************************
[单片机]
基于S3C6410处理器的U-Boot SD卡启动的移植分析与功能
通用Bootloader(Universal Bootloader,U-Boot)是系统上电后执行的第一段代码,其作用主要包括初始化硬件环境以及加载执行操作系统内核。在进行系统安装时,U-Boot通常需要使用专用工具烧写到FLASH中,内核及文件系统则通过U-Boot命令进行烧写,该过程操作繁琐,并且容易出错,不适宜系统的大量安装。 S3C6410是三星公司生产的一款基于ARM11架构的通用嵌入式处理器,其启动方式除了传统的Flash启动模式外,还支持从SD 卡中启动系统。本文基于S3C6410处理器,分析了从SD卡启动系统的原理,并对U-Boot源码进行修改以支持该启动方式,在此基础上进一步扩展了U-Boot的功能,使其
[单片机]
基于<font color='red'>S3C6410</font>处理器的U-Boot SD卡启动的移植分析与功能
S3C6410移植u-boot(一)
步骤1 1、首先下载u-boot( ftp://ftp.denx.de/pub/u-boot ) wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2 2、解压到你指定下路径中 tar -jxvf u-boot-latest.tar.bz2 -C /opt 步骤2 1、进入u-boot- 发布日期 文件夹 cd /opt/u-boot-2011.06/ cd board/samsung/ 2、建立smdk6410文件夹 mkdir smdk6410 3、复制6400文件夹下的所有代码到6410下 cp -rf smdk6400/* smdk6410 4、进入
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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