电子工程师的网站
首 页 |  新闻资讯 | 最新产品 | 解决方案 | 技术参数
设计应用
电路图 | 技术资料 | 芯片资料 | 技术论坛
  现在位置: 首页 > 设计应用 > 嵌入式系统/ARM技术 > 详细信息
嵌入式系统/ARM技术:基于IAR集成开发平台的ARM程序设计方法
来源:   时间: 2007-10-26 1:03:28    
  摘  要:本文主要介绍了在不加载操作系统的情况下,如何使用IAR软件平台进行基于ARM的嵌入式系统开发,包括了底层驱动、I/O控制,中断控制等程序设计。

  关键词:嵌入式系统;IAR;ARM;中断控制

  引言

  在项目开发,特别是中小型项目开发中,为了降低开发难度和开发成本,常选择不加载操作系统的方案。本文选择IAR嵌入式开发平台,在不加载操作系统的前提下,使用C语言(约95%)和汇编语言(约5%),对以ATMEL公司的AT91M40800芯片(ARM7TDMI内核)为主芯片的工业控制系统进行了软件开发。


图1 系统硬件结构


图2 系统软件框架

  硬件构架

  系统的整体硬件框架如图1所示,该系统基本包括了目前工业控制系统所需要的各种功能,其软件开发十分具有代表性。

  IAR集成开发环境

  IAR开发平台是瑞典IAR公司开发的基于最新C/C++编译和调试技术的综合开发平台。该平台是一套完整的集成开发环境,可以完成创建工程、编辑文件、编译、汇编、连接和调试应用程序的所有工作;同一个工作空间可放多个工程;可针对单个源文件,一组源文件或者全部源文件进行配置;提供工程模板,支持几乎所有ARM内核;提供ANSI标准C编译器、ISO/ANSI C 和嵌入式C++库;支持包括Wiggler JTAG接口等多种JTAG;提供了多种代码优化方式。

  IAR生成的目标代码分为调试版本(Debug)和发行版本(Release)两种。其中Debug目标代码的地址定义在SRAM中,将被下载到SRAM中执行;Release目标代码的地址定义在Flash中,最终大部分在Flash中执行。在程序编译之前需要根据模板编写Debug.xcl和Release.xcl这两个内存分配文件。在IAR提供的工程模板基础上,需要修改的地方有:

  -DROMSTART=2000000
  -DROMEND=200FFFF
  //ROM的地址段
  -Z(CODE)INTVEC=00-3F
  -DRAMSTART=2010000
  -DRAMEND=207FFFF
  //RAM的地址段
  -D_USR_STACK_SIZE=20000
  //栈的大小
  -D_SVC_STACK_SIZE=50
  -D_FIQ_STACK_SIZE=100
  -D_ABT_STACK_SIZE=50
  -D_UND_STACK_SIZE=50
  -D_IRQ_STACK_SIZE=1000
  -D_HEAP_SIZE=2000
  //堆的大小

  启动代码设计

  通常C语言是从main函数开始执行的,在没有操作系统的情况下,对main函数的初始化工作由启动代码来完成,包括硬件初始化、堆栈初始化、各种寄存器的初始化等。

  在完成所有的初始化工作以后,用一条跳转指令进入C程序的main函数,程序的控制权转移到C程序。

  驱动程序设计

  系统的软件框架如图2所示。驱动程序包括设备驱动程序、中断程序以及中断服务程序。首先以Flash驱动设计为例。根据Flash的Datasheet及硬件设计,有以下定义:

  #define FLASH_BASE ((volatile USHORT *)(0x01000000))
  /*FLASH的基地址*/
  /*定义flash的操作代码*/
  #define FLASH_SEQ_ADD1   (0x5555)
  #define FLASH_SEQ_ADD2   (0x2AAA)
  #define FLASH_CODE1     ((USHORT)(0xAA))
  #define FLASH_CODE2     ((USHORT)(0x55))
  #define ID_IN_CODE     ((USHORT)(0x90))
  #define ID_OUT_CODE     ((USHORT)(0xF0))
  #define WRITE_CODE     ((USHORT)(0xA0))
  #define CHIP_ERASE_CODE   ((USHORT)(0x10))

  然后编写FLASH功能函数。下面的函数用于验证FLASH的设备ID号:

  -ramfunc-farfunc BOOL FLASH_Test(void)
  {
  //输入命令序列,manuf_code表示生产编号,device_code表示设备编号
  USHORT manuf_code,device_ code;
  *(FLASH_BASE + FLASH_ SEQ_ADD1) = FLASH_CODE1;
  *(FLASH_BASE + FLASH_ SEQ_ADD2) = FLASH_CODE2;
  *(FLASH_BASE + FLASH_ SEQ_ADD1) = ID_IN_CODE;
  //读取生产编号和设备编号
  manuf_code = *FLASH_BASE ;
  device_code = *(FLASH_BASE + 1) ;
  //退出产品认证模式
  *(FLASH_BASE + FLASH_ SEQ_ADD1) = ID_OUT_CODE;
  //判断读出的生产编号和设备编号是否正确
  return ((manuf_code== 0x001f)&&(device_code==0x00c0));
  }

  中断发生时,ARM内核运行状态会由一般模式(System & User)进入其它几种模式(包括FIQ、IRQ等),因此需要保护正在运行的现场(r0~r12通用寄存器),同时将ARM状态寄存器(CPSR和SPSR)入栈。中断程序使用汇编语言保护寄存器,而中断服务程序可以使用C语言编写。这里以控制步进电机运动的定时器中断为例:

  tc0_handler
  stmfd sp!, {r14}
  ;保护寄存器入栈
  mrs r14, SPSR
  stmfd sp!, {r14}
  mrs r14, CPSR
  stmfd sp!, {r0-r12,r14}    
  IMPORT Interrupt_Tc0
  ldr r0,=Interrupt_Tc0
  ;此处跳转进入C语言中断服务程序Interrupt_Tc0( )
  mov lr,pc
  bx r0
  IntExit
  ;中断服务程序完毕
  ldmia sp!,{r0-r12,r14}
  ;恢复现场
  msr CPSR_cxsf, r14
  ldmia sp!,{r14}
  msr SPSR_cxsf,r14
  ldmia sp!, {r14}
  subs pc,lr,#4

  值得注意的是,ARM的除法运算采用软件除法方式,会用到r14寄存器,所以也必须加以保护,在中断服务程序完毕后恢复现场,将寄存器依次出栈。

  结语

  在本系统的开发过程中有如下体会:

  1、尽量少用占用大量存储空间的变量(如int buffer[4096]),系统开销太大,可能造成系统崩溃。

  2、慎重使用malloc()这样的内存分配函数。如果使用,一定要在使用完毕后调用free()函数释放内存空间,否则容易造成内存泄漏,甚至系统崩溃。

  3、要注意IAR编译器的所有警告信息,仔细查看警告信息的意义。

  4、一些经常调用且需要快速处理的模块,考虑使用汇编完成。

  5、生成 Release版本目标代码时,Release目录下的exe目录内即为目标文件,而List目录内的*.map文件包含了目标文件内存分配的具体情况,可以根据里面的信息判断内存分配是否存在问题。

相关信息
发表评论
打印本页 关闭本页
Atmel推出面向HD-DVD/Blu-ray笔记本电脑驱动器的超小型FMD集成电路
    Atmel Corporation日前宣布推出用于薄型和超薄型HD-DVD与Blu-ray驱动器光学读取头(OPU)的ATR1841和ATR1842型号FMD集成电路。这些新设备尺寸仅为3mm×3mm,性能优越。   随着市场对诸如HD-DVD和Blu-ray等高容量光学存储驱动器需求的日趋成熟,驱动器制造商正寻求机会进一步缩小驱动设备的尺寸,生产用于笔记本电脑的薄型与超薄型驱动器。同时继续满足对低噪声与快速脉冲响应时间的...
>>详细内容
Atmel发布新系列低功耗32位闪存微控制器
    Atmel Corporation(爱特梅尔)日前宣布推出32位闪存(Flash)微控制器。以Atmel的AVR 32 UC内核为基础,UC3A系列拥有512K字节的闪存,并拥有一个内置10/100以太网媒体接入控制器(MAC)、一个具有OTG(on-the-go)功能的全速(12Mbps)USB 2.0以及一个SRAM/SDRAM外部总线接口。首批推出的设备AT32UC3A0512和AT32UC3A1512能够以66MHz的速率提供80 Dhrystone MIPS(DMIPS)的性能,且只需电压3.3V...
>>详细内容
Atmel推出低功耗32位闪存微控制器UC3A系列
    Atmel宣布推出业界最低功耗的32位闪存微控制器系列。UC3A系列基于爱特梅尔的AVR 32 UC内核,配有512KB的闪存、一个内置10/100以太网媒体接入控制器(MAC)、一个具有OTG(on-the-go)功能的全速(12Mbps) USB 2.0接口,以及一个SRAM/SDRAM外部总线接口。   首批推出的产品型号为AT32UC3A0512和AT32UC3A1512,能够以66MHz的速率提供80 Dhrystone MIPS(DMIPS)的性能,而在3.3伏电压下的...
>>详细内容
Atmel推出首款HD-DVD/Blu-ray播放器的激光二极管驱动IC
    Atmel Corporation日前宣布推出用于兼容HD-DVD/Blu-ray、DVD、CD播放器和个人电脑只读存储(CD-ROM)驱动器的新型激光二极管驱动IC(Laser Diode Driver)——ATR0885。HD-DVD和Blu-ray作为新一代磁盘标准,能够提供远远多于现行DVD标准的存储容量。此次新型ATR0885以极小封装推出,适合于笔记本电脑应用的小型SLIM驱动器,以及台式电脑和DVD播放器中的半高驱动器。ATR0885据称是业内首款...
>>详细内容
Atmel推出无缝迁移至无线网络的ZigBee解决方案
    Atmel Corporation近日宣布,面向汽车、工业控制应用中的30000多种基于AVR的设计,该公司推出提供无缝迁移至无线网络的802.15.4/ZigBee解决方案。AVR Z-Link解决方案包括Atmel的超低功率、高灵敏性2.4GHz AT86RF230 802.15.4无线电设备、超低功率ATmega1281或ATmega 2561 AVR微控制器、以及为AVR架构优化的小型完全相容的媒体访问控制(MAC)软体。在可比运作条件下,与现今市场上任何...
>>详细内容
Atmel 推出使用内部标定的WiMAX收发器
    Atmel(R)Corporation宣布推出其专门设计用于WiMAX应用的MAX-Link(TM)系列收发器中的第三款。AT86RF525B及其前身AT86RF535B使用了一种专有的内部标定算法,因此无需外部标定电路或标定软件。MAX-Link(TM)收发器是当今市场上唯一的使用内部标定的WiMAX专用收发器。初启标定能消除会导致本振泄露降低和镜像抑制增加的失配影响。运行中温度、电源电压或频率的变化都将会导致射频性能的降...
>>详细内容
已有(
)位对此新闻感兴趣的网发发表了看法 >>更多评论
内 容:
     
 
热点新闻
一周排行
关于我们 | 服务项目 | 付款方式 | 广告服务 | 联系我们 | 友情链接 | 投诉 建议 合作 | 网站地图 | 加入收藏
Copyright © 2007-2008 WEEQOO.COM Corp.All Rights Reserved. 版权所有 经营许可证编号:浙B2-20050339 法律声明
维库电子旗下网站:维库电子市场网 | ChinaICMart | 维库电子开发网 | 维库电子人才网
总部:杭州市下城区朝晖路182号国都发展大厦1号楼80A
电话:0571-85889139-8007 QQ:303939539 | MSN:zh1226@hotmail.com |  邮箱:laz8258@163.com dzsc51@163.com