datasheet
超过460,000+ 应用技术资源下载
pdf

ARM9基础实验教程

  • 1星
  • 日期: 2014-03-05
  • 大小: 4.89MB
  • 所需积分:1分
  • 下载次数:3
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: ARM9基础实验教程

- vii - 8.1.1 实验目的 315 8.1.2 实验设备 315 8.1.3 实验内容 315 8.1.4 实验原理 315 8.1.5 实验操作步骤 318 8.1.6 实验参考程序 319 8.1.7 练习题 321- vi - 6.4 USB 接口实验 266 6.4.1  实验目的 266 6.4.2  实验设备 267 6.4.3  实验内容 267 6.4.4  实验原理 267 6.4.5  实验操作步骤 270 6.4.6  实验参考程序 272 6.4.7  实验练习题 280 6.5 SPI接口通讯实验 281 6.5.1  实验目的 281 6.5.2  实验设备 281 6.5.3  实验内容 281 6.5.4  实验原理 281 6.5.5  实验操作步骤 285 6.5.6  实验参考程序 287 6.5.7  练习题 289 6.6  红外模块控制实验 289 6.6.1  实验目的 289 6.6.2  实验设备 289 6.6.3  实验内容 289 6.6.4  实验原理 289 6.6.5  实验操作步骤 291 6.6.6  实验参考程序 291 6.6.7  练习题 296 第七章  基础应用实验 296 7.1 A/D 转换实验 296 7.1.1  实验目的 296 7.1.2  实验设备 296 7.1.3  实验内容 296 7.1.4  实验原理 296 7.1.5  实验设计 298 7.1.6  实验操作步骤 299 7.1.7  实验参考程序 300 7.1.8  练习题 301 7.2 PWM步进电机控制实验 301 7.2.1  实验目的 301 7.2.2  实验设备 301 7.2.3  实验内容 301 7.2.4  实验原理 301 7.2.5  实验操作步骤 309 7.2.6  实验参考程序 311 7.2.7  练习题 313 第八章  高级应用实验 315 8.1 GPRS模块控制实验 315 - v - 5.2 5x4键盘控制实验 219 5.2.1  实验目的 219 5.2.2  实验设备 219 5.2.3  实验内容 219 5.2.4  实验原理 219 5.2.5  实验设计 221 5.2.6  实验操作步骤 222 5.2.7  实验参考程序 223 5.2.8  练习题 224 5.3  触摸屏控制实验 224 5.3.1  实验目的 224 5.3.2  实验设备 224 5.3.3  实验内容 224 5.3.4  实验原理 224 5.3.5  实验设计 231 5.3.6  实验操作步骤 231 5.3.7  实验参考程序 232 5.3.8  练习题 233 第六章  通信与接口实验 234 6.1 IIC 串行通信实验 234 6.1.1  实验目的 234 6.1.2  实验设备 234 6.1.3  实验内容 234 6.1.4  实验原理 234 6.1.5  实验设计 238 6.1.6  实验操作步骤 241 6.1.7  实验参考程序 243 6.1.8  练习题 245 6.2 以太网通讯实验 246 6.2.1  实验目的 246 6.2.2  实验设备 246 6.2.3  实验内容 246 6.2.4  实验原理 246 6.2.5  实验操作步骤 254 6.2.6  实验参考程序 257 6.2.7  练习题 259 6.3  音频接口 IIS 实验 260 6.3.1 实验目的 260 6.3.2 实验设备 260 6.3.3 实验内容 260 6.3.4 实验原理 260 6.3.5 实验步骤 263 6.3.6实验参考程序 264 6.3.7 练习题 266 - iv - 4.4  串口通信实验 170 4.4.1  实验目的 170 4.4.2  实验设备 170 4.4.3  实验内容 170 4.4.4  实验原理 170 4.4.5  实验操作步骤 176 4.4.6  实验参考程序 177 4.4.7  练习题 178 4.5  实时时钟实验 179 4.5.1  实验目的 179 4.5.2  实验设备 179 4.5.3  实验内容 179 4.5.4  实验原理 179 4.5.5  实验设计 181 4.5.6  实验操作步骤 182 4.5.7  实验参考程序 183 4.6.8  练习题 185 4.6  数码管显示实验 186 4.6.1  实验目的 186 4.6.2  实验设备 186 4.6.3  实验内容 186 4.6.4  实验原理 186 4.6.5  实验方法与操作步骤 188 4.6.6 实验参考程序 189 4.6.7  练习题 192 4.7  看门狗实验 193 4.7.1 实验目的 193 4.7.2 实验设备 193 4.7.3 实验内容 193 4.7.4 实验原理 193 4.7.5 实验设计 195 4.7.6 实验操作步骤 196 4.7.7 实验参考程序 197 4.7.8 实验练习题 199 第五章  人机接口实验 200 5.1  液晶显示实验 200 5.1.1  实验目的 200 5.1.2  实验设备 200 5.1.3  实验内容 200 5.1.4  实验原理 200 5.1.5  实验设计 211 5.1.6  实验操作步骤 213 5.1.7  实验参考程序 214 5.1.8 练习题 219 - ii - 3.1.1 实验目的 81 3.1.2 实验设备 81 3.1.3 实验内容 81 3.1.4 实验原理 81 3.1.5 实验操作步骤 83 3.1.6 实验参考程序 87 3.1.7 练习题 88 3.2 ARM汇编指令实验二 89 3.2.1 实验目的 89 3.2.2 实验设备 89 3.2.3 实验内容 89 3.2.4 实验原理 89 3.2.5 实验操作步骤 90 3.2.6 实验参考程序 91 3.2.7 练习题 94 3.3 Thumb 汇编指令实验 94 3.3.1 实验目的 94 3.3.2 实验设备 94 3.3.3 实验内容 94 3.3.4 实验原理 94 3.3.5 实验操作步骤 96 3.3.6 实验参考程序 96 3.3.7 练习题 99 3.4 ARM处理器工作模式实验 99 3.4.1 实验目的 99 3.4.2实验设备 99 3.4.3实验内容 99 3.4.4实验原理 99 3.4.5实验操作步骤 101 3.4.6实验参考程序 102 3.4.7练习题 104 3.5 C 语言程序实验一 104 3.5.1  实验目的 104 3.5.2  实验设备 104 3.5.3  实验内容 104 3.5.4  实验原理 104 3.5.5  实验操作步骤 106 3.5.6  实验参考程序 106 3.5.7  练习题 109 3.6 C 语言程序实验二 109 3.6.1  实验目的 109 3.6.2  实验设备 109 3.6.3  实验内容 109 3.6.4  实验原理 109 - iii - 3.6.5 实验操作步骤 111 3.6.6 实验参考程序 113 3.6.7 练习题 117 3.7  汇编与 C 语言的相互调用 117 3.7.1  实验目的 117 3.7.2  实验设备 117 3.7.3  实验内容 117 3.7.4  实验原理 117 3.7.5  实验操作步骤 118 3.7.6  实验参考程序 119 3.7.7  练习题 123 3.8  综合实验 123 3.8.1  实验目的 123 3.8.2  实验设备 123 3.8.3  实验内容 123 3.8.4  实验原理 123 3.8.5  实验操作步骤 124 3.8.6 参考程序 127 3.8.7 练习题 134 第四章  基本接口实验 135 4.1  存储器实验 135 4.1.1 实验目的 135 4.1.2 实验设备 135 4.1.3 实验内容 135 4.1.4 实验原理 135 4.1.5 实验操作步骤 149 4.1.6 实验参考程序 149 4.1.7 练习题 151 4.2 IO 口实验 151 4.2.1  实验目的 151 4.2.2  实验设备 152 4.2.3  实验内容 152 4.2.4  实验原理 152 4.2.5  实验操作步骤 159 4.2.6  实验参考程序 160 4.2.7  实验练习题 161 4.3 中断实验 161 4.3.1  实验目的 161 4.3.2  实验设备 161 4.3.3  实验内容 161 4.3.4  实验原理 162 4.3.5  实验操作步骤 165 4.3.6  实验参考程序 167 4.3.7  练习题 170 目  录  I 第一章  嵌入式系统开发与应用概述 1 1.1  嵌入式系统开发与应用 1 1.2  基于 ARM的嵌入式开发环境概述 3 1.2.1  交叉开发环境 3 1.2.2  模拟开发环境 4 1.2.3  评估电路板 5 1.2.4  嵌入式操作系统 5 1.3 各种 ARM开发工具简介 5 1.3.1 ARM的 SDT 6 1.3.2 ARM的ADS 7 1.3.3 Multi 2000 8 1.3.4 Embest IDE for ARM 11 1.3.5 OPENice32-A900仿真器 12 1.3.6 Multi-ICE 仿真器 12 1.4 如何学习基于 ARM嵌入式系统开发 13 1.5 本教程相关内容介绍 14 第二章  EMBEST ARM实验教学系统 17 2.1 教学系统介绍 17 2.1.1 Embest IDE 集成开发环境 17 2.1.2 Embest JTAG  仿真器 19 2.1.3 Flash 编程器 20 2.1.4 Embest EduKit-III开发板 21 2.1.5  各种连接线与电源适配器 23 2.2  教学系统安装 23 2.3  教学系统的硬件电路 27 2.3.1  概述 27 2.3.2  功能特点 27 2.3.3  原理说明 28 2.3.4  硬件结构 41 2.3.5  硬件资源分配 44 2.4  集成开发环境使用说明 51 2.4.1 Embest IDE 主框架窗口 51 2.4.2 工程管理 52 2.4.3 工程基本配置 55 2.4.4 工程的编译链接 71 2.4.5 加载调试 72 2.4.6 Flash编程工具 80 第三章  嵌入式软件开发基础实验 81 3.1 ARM汇编指令实验一 81

ARM9 基 础 实 验 教 程 Embest EduKit-III 平台 深圳市英蓓特信息技术有限公司 Embest Info &Tech Co., Ltd. 地址: 深圳市罗湖区太宁路 85 号罗湖科技大厦 509 室(518020) Telephone: 86-755-25635626 25638952 25638953 25631365 Fax: 86-755-25616057 E-mail: sales@embedinfo.com support@embedinfo.com Website: http://www.embedinfo.com http://www.embed.com.cn 目录 目 录I 第一章 嵌入式系统开发与应用概述 1 1.1 嵌入式系统开发与应用 1 1.2 基于 ARM 的嵌入式开发环境概述 3 1.2.1 交叉开发环境 3 1.2.2 模拟开发环境 4 1.2.3 评估电路板 5 1.2.4 嵌入式操作系统 5 1.3 各种 ARM 开发工具简介 5 1.3.1 ARM 的 SDT 6 1.3.2 ARM 的 ADS 7 1.3.3 Multi 2000 8 1.3.4 Embest IDE for ARM 11 1.3.5 OPENice32-A900 仿真器12 1.3.6 Multi-ICE 仿真器 12 1.4 如何学习基于 ARM 嵌入式系统开发 13 1.5 本教程相关内容介绍 14 第二章 EMBEST ARM 实验教学系统 17 2.1 教学系统介绍 17 2.1.1 Embest IDE 集成开发环境 17 2.1.2 Embest JTAG 仿真器 19 2.1.3 Flash 编程器 20 2.1.4 Embest EduKit-III 开发板21 2.1.5 各种连接线与电源适配器 23 2.2 教学系统安装 23 2.3 教学系统的硬件电路 27 2.3.1 概述 27 2.3.2 功能特点 27 2.3.3 原理说明 28 2.3.4 硬件结构 41 2.3.5 硬件资源分配 44 2.4 集成开发环境使用说明 51 2.4.1 Embest IDE 主框架窗口 51 2.4.2 工程管理 52 2.4.3 工程基本配置 55 2.4.4 工程的编译链接 71 2.4.5 加载调试 72 2.4.6 Flash 编程工具 80 第三章 嵌入式软件开发基础实验 81 3.1 ARM 汇编指令实验一 81 -i- 3.1.1 实验目的 81 3.1.2 实验设备 81 3.1.3 实验内容 81 3.1.4 实验原理 81 3.1.5 实验操作步骤 83 3.1.6 实验参考程序 87 3.1.7 练习题 88 3.2 ARM 汇编指令实验二 89 3.2.1 实验目的 89 3.2.2 实验设备 89 3.2.3 实验内容 89 3.2.4 实验原理 89 3.2.5 实验操作步骤 90 3.2.6 实验参考程序 91 3.2.7 练习题 94 3.3 Thumb 汇编指令实验 94 3.3.1 实验目的 94 3.3.2 实验设备 94 3.3.3 实验内容 94 3.3.4 实验原理 94 3.3.5 实验操作步骤 96 3.3.6 实验参考程序 96 3.3.7 练习题 99 3.4 ARM 处理器工作模式实验 99 3.4.1 实验目的 99 3.4.2 实验设备 99 3.4.3 实验内容 99 3.4.4 实验原理 99 3.4.5 实验操作步骤 101 3.4.6 实验参考程序 102 3.4.7 练习题 104 3.5 C 语言程序实验一 104 3.5.1 实验目的 104 3.5.2 实验设备 104 3.5.3 实验内容 104 3.5.4 实验原理 104 3.5.5 实验操作步骤 106 3.5.6 实验参考程序 106 3.5.7 练习题 109 3.6 C 语言程序实验二 109 3.6.1 实验目的 109 3.6.2 实验设备 109 3.6.3 实验内容 109 3.6.4 实验原理 109 - ii - 3.6.5 实验操作步骤 111 3.6.6 实验参考程序 113 3.6.7 练习题 117 3.7 汇编与 C 语言的相互调用 117 3.7.1 实验目的 117 3.7.2 实验设备 117 3.7.3 实验内容 117 3.7.4 实验原理 117 3.7.5 实验操作步骤 118 3.7.6 实验参考程序 119 3.7.7 练习题 123 3.8 综合实验 123 3.8.1 实验目的 123 3.8.2 实验设备 123 3.8.3 实验内容 123 3.8.4 实验原理 123 3.8.5 实验操作步骤 124 3.8.6 参考程序 127 3.8.7 练习题 134 第四章 基本接口实验 135 4.1 存储器实验 135 4.1.1 实验目的 135 4.1.2 实验设备 135 4.1.3 实验内容 135 4.1.4 实验原理 135 4.1.5 实验操作步骤 149 4.1.6 实验参考程序 149 4.1.7 练习题 151 4.2 IO 口实验 151 4.2.1 实验目的 151 4.2.2 实验设备 152 4.2.3 实验内容 152 4.2.4 实验原理 152 4.2.5 实验操作步骤 159 4.2.6 实验参考程序 160 4.2.7 实验练习题 161 4.3 中断实验 161 4.3.1 实验目的 161 4.3.2 实验设备 161 4.3.3 实验内容 161 4.3.4 实验原理 162 4.3.5 实验操作步骤 165 4.3.6 实验参考程序 167 4.3.7 练习题 170 - iii - 4.4 串口通信实验 170 4.4.1 实验目的 170 4.4.2 实验设备 170 4.4.3 实验内容 170 4.4.4 实验原理 170 4.4.5 实验操作步骤 176 4.4.6 实验参考程序 177 4.4.7 练习题 178 4.5 实时时钟实验 179 4.5.1 实验目的 179 4.5.2 实验设备 179 4.5.3 实验内容 179 4.5.4 实验原理 179 4.5.5 实验设计 181 4.5.6 实验操作步骤 182 4.5.7 实验参考程序 183 4.6.8 练习题 185 4.6 数码管显示实验 186 4.6.1 实验目的 186 4.6.2 实验设备 186 4.6.3 实验内容 186 4.6.4 实验原理 186 4.6.5 实验方法与操作步骤 188 4.6.6 实验参考程序 189 4.6.7 练习题 192 4.7 看门狗实验 193 4.7.1 实验目的 193 4.7.2 实验设备 193 4.7.3 实验内容 193 4.7.4 实验原理 193 4.7.5 实验设计 195 4.7.6 实验操作步骤 196 4.7.7 实验参考程序 197 4.7.8 实验练习题 199 第五章 人机接口实验 200 5.1 液晶显示实验 200 5.1.1 实验目的 200 5.1.2 实验设备 200 5.1.3 实验内容 200 5.1.4 实验原理 200 5.1.5 实验设计 211 5.1.6 实验操作步骤 213 5.1.7 实验参考程序 214 5.1.8 练习题 219 - iv - 5.2 5x4 键盘控制实验 219 5.2.1 实验目的 219 5.2.2 实验设备 219 5.2.3 实验内容 219 5.2.4 实验原理 219 5.2.5 实验设计 221 5.2.6 实验操作步骤 222 5.2.7 实验参考程序 223 5.2.8 练习题 224 5.3 触摸屏控制实验 224 5.3.1 实验目的 224 5.3.2 实验设备 224 5.3.3 实验内容 224 5.3.4 实验原理 224 5.3.5 实验设计 231 5.3.6 实验操作步骤 231 5.3.7 实验参考程序 232 5.3.8 练习题 233 第六章 通信与接口实验 234 6.1 IIC 串行通信实验 234 6.1.1 实验目的 234 6.1.2 实验设备 234 6.1.3 实验内容 234 6.1.4 实验原理 234 6.1.5 实验设计 238 6.1.6 实验操作步骤 241 6.1.7 实验参考程序 243 6.1.8 练习题 245 6.2 以太网通讯实验 246 6.2.1 实验目的 246 6.2.2 实验设备 246 6.2.3 实验内容 246 6.2.4 实验原理 246 6.2.5 实验操作步骤 254 6.2.6 实验参考程序 257 6.2.7 练习题 259 6.3 音频接口 IIS 实验 260 6.3.1 实验目的 260 6.3.2 实验设备 260 6.3.3 实验内容 260 6.3.4 实验原理 260 6.3.5 实验步骤 263 6.3.6 实验参考程序 264 6.3.7 练习题 266 -v- 6.4 USB 接口实验 266 6.4.1 实验目的 266 6.4.2 实验设备 267 6.4.3 实验内容 267 6.4.4 实验原理 267 6.4.5 实验操作步骤 270 6.4.6 实验参考程序 272 6.4.7 实验练习题 280 6.5 SPI 接口通讯实验 281 6.5.1 实验目的 281 6.5.2 实验设备 281 6.5.3 实验内容 281 6.5.4 实验原理 281 6.5.5 实验操作步骤 285 6.5.6 实验参考程序 287 6.5.7 练习题 289 6.6 红外模块控制实验 289 6.6.1 实验目的 289 6.6.2 实验设备 289 6.6.3 实验内容 289 6.6.4 实验原理 289 6.6.5 实验操作步骤 291 6.6.6 实验参考程序 291 6.6.7 练习题 296 第七章 基础应用实验 296 7.1 A/D 转换实验 296 7.1.1 实验目的 296 7.1.2 实验设备 296 7.1.3 实验内容 296 7.1.4 实验原理 296 7.1.5 实验设计 298 7.1.6 实验操作步骤 299 7.1.7 实验参考程序 300 7.1.8 练习题 301 7.2 PWM 步进电机控制实验 301 7.2.1 实验目的 301 7.2.2 实验设备 301 7.2.3 实验内容 301 7.2.4 实验原理 301 7.2.5 实验操作步骤 309 7.2.6 实验参考程序 311 7.2.7 练习题 313 第八章 高级应用实验 315 8.1 GPRS 模块控制实验 315 - vi - 8.1.1 实验目的 315 8.1.2 实验设备 315 8.1.3 实验内容 315 8.1.4 实验原理 315 8.1.5 实验操作步骤 318 8.1.6 实验参考程序 319 8.1.7 练习题 321 深圳市英蓓特信息技术有限公司©2005 版权所有,保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本书的部分或全部,并不得 以任何形式传播。 Embest®为深圳市英蓓特信息技术有限公司的商标,不得仿冒。 由于水平有限以及时间仓促,错误和不足之处敬请读者指正,并加以改进。 Copywrite©2005 by Shenzhen Embest Info&Tech Co.,LTD. All rights reserved. No part of this document may be reproducted or transmitted in any form or by any means without prior written consent of Embest Info&Tech Co.,LTD. Embest® is registered trademarks of Embest Info&Tech Co.,LTD. - vii - 第一章 嵌入式系统开发与应用概述 1.1 嵌入式系统开发与应用 以嵌入式计算机为技术核心的嵌入式系统是继网络技术之后,又一个 IT 领域新的技术发展方 向。由于嵌入式系统具有体积小、性能强、功耗低、可靠性高以及面向行业具体应用等突出特征, 目前已经广泛地应用于军事国防、消费电子、信息家电、网络通信、工业控制等各个领域。嵌入式 的广泛应用可以说是无所不在。就我们周围的日常生活用品而言,各种电子手表、电话、手机、PDA、 洗衣机、电视机、电饭锅、微波炉、空调器都有嵌入式系统的存在,如果说我们生活在一个充满嵌 入式的世界,是毫不夸张的。据统计,一般家用汽车的嵌入式计算机在 24 个以上,豪华汽车的在 60 个以上。据推测人们在 2005 年每天接触的嵌入式计算机有望达到 600 个以上。难怪美国汽车大 亨福特公司的高级经理也曾宣称,“福特出售的‘计算能力’已超过了 IBM”,由此可见嵌入式计算机 工业的应用规模、应用深度和应用广度。 嵌入式系统组成的核心部件是各种类型的嵌入式处理器/DSP。随着嵌入式系统不断深入到人们生 活中的各个领域,嵌入式处理器也进而得到前所未有的飞速发展。目前据不完全统计,全世界嵌入式 处理器/DSP 的品种总量已经超过 1500 多种,流行体系结构也有近百个系列,现在几乎每个半导体制 造商都生产嵌入式处理器/DSP,越来越多的公司有自己的处理器/DSP 设计部门。 嵌入式微处理器技术的基础是通用计算机技术。现在许多嵌入式处理器也是从早期的 PC 机的 应用发展演化过来的,如早期 PC 诸如 TRS-80、Apple II 和所用的 Z80 和 6502 处理器,至今仍为低 端的嵌入式应用。在应用中,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。嵌 入式处理器目前主要有 Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM 等系列。 在早期实际的嵌入式应用中,芯片选择时往往以某一种微处理器内核为核心,在芯片内部集成 必要的 ROM/EPROM/Flash/EEPROM、SRAM、接口总线及总线控制逻辑、定时/计数器、WatchDog、 I/O、串行口、脉宽调制输出、A/D、D/A 等各种必要的功能和外设。为了适应不同的应用需求,一 般一个系列具有多种衍生产品,每种衍生产品的处理器内核几乎都是一样的,不同之处在于存储器 的种类、容量和外设接口模块的配置及芯片封装。这样可以最大限度地和实际的应用需求相匹配, 满足实际产品的开发需求,使得芯片功能不多不少,从而降低功耗、减少成本。 随着嵌入式系统 应用普及的日益广泛,嵌入式系统的复杂度提高,控制算法也更加冗繁,尤其是嵌入式 Internet 的 广泛应用、嵌入式操作系统的引入、触摸屏等复杂人机接口的广泛使用以及芯片设计及加工工艺的 提高,以 32 位处理器为核的 SoC 系统芯片的大范围使用,极大的推动了嵌入式 IT 技术的发展速度。 计算机应用的普及、互联网技术的使用以及纳米微电子技术的突破,也正有力地推动着未来的工业 生产、商务活动、科学实验和家庭生活等领域的自动化和信息化进程。全生产过程自动化产品制造、 大范围电子商务活动、高度协同科学实验以及现代化家庭起居,也为嵌入式产品造就了崭新而巨大 的商机。 除了信息高速公路的交换机、路由器和 Modem,构建 CIMS 所需的 DCS 和机器人以及规模较 大的家用汽车电子系统。最有量产效益和时代特征的嵌入式产品应数因特网上的信息家电,如 Web -1- 可视电话、Web 游戏机、Web PDA(俗称电子商务、商务通)、WAP 电话手机、以及多媒体产品,如 STB(电视机顶盒)、DVD 播放机、电子阅读机。 嵌入式应用领域近几年发展起来的一项概念和技术就是嵌入式 Internet 实际应用,也代表着它 是指设备通过嵌入式模块而非 PC 系统直接接入 Internet,以 Internet 为介质实现信息交互的过程, 通常又称为非 PC 的 Internet 接入。 嵌入式 Internet 将世界各地不同地方、不同种类及不同应用的设备联系起来,实现信息资源的 实时共享。嵌入式 Internet 技术的广泛应用满足了二十一世纪人们要求随时随地获取信息、处理信 息的需求。对 IT 产业发展规律进行总结,如果说前 20 年 PC 机的广泛应用是集成电路、IT 相关技 术发展的驱动器,并且极大的促进 IT 相关技术发展的话,那么后 20 年除了 PC 技术要继续高速发 展之外,主要驱动器应该是与 Internet 结合的可移动的(Mobile)、便携的(Portable)、 实时嵌入式 Internet 信息处理设备。目前嵌入式 Internet 还是局限于智能家居(家电上网)、工业控制和智能设 备的应用等。随着相关应用技术的发展,嵌入式技术必将会和许多领域的实际应用相结合,以难以 想象的应用范围和速度发展,这必然会极大拓展嵌入式应用的广度和深度,体现嵌入式更加广泛的 与实际应用密切结合的实用价值。 嵌入式 Internet 应用的核心是高性能、低功耗的各种基于网络信息处理的嵌入式系统芯片 SoC 及相关应用技术,它们是以 Internet 为介质,通过嵌入式网络处理器实现信息交互过程的非 PC Internet 设备接入。 随着 Internet 技术的成熟、带宽的运行速度的提高,ICP 和 ASP 在网上提供的信息内容日趋丰 富、应用项目也多种多样。像手机、电话座机及电冰箱、微波炉等嵌入式电子设备的功能已不再单 一,电气结构也更为复杂。为了满足应用功能的升级,系统设计技术人员一方面采用更强大的嵌入 式处理器如 32 位、64 位 RISC 芯片或信号处理器 DSP 增强处理能力;同时还采用实时多任务编程 技术和交叉开发工具技术来控制功能的复杂性,简化应用程序设计过程、保障软件质量和缩短产品 开发周期。 目前,市面上已有几千种嵌入式芯片可供选择。由于面向应用的需要,许多产品设计人员还是 根据自己产品特点设计自己的嵌入式芯片。通常设计人员首先获得嵌入式微处理器核的授权,然后 增加他们应用产品所需的专门特点的接口模块。例如,针对数码像机处理器有可能加一个电荷耦合 芯片;对网络应用产品处理则可能加一个以太网接口,而嵌入式微处理器核应用会越来越多,选用 不同的核,会使电路的性能差别很大。 ARM 系列处理器核是英国先进 RISC 机器公司(Advanced RISC Machines,ARM)的产品。ARM 公司自成立以来,一直以 IP(Intelligence Property)提供者的身份向各大半导体制造商出售知识产权, 而自己从不介入芯片的生产销售,它提供一些高性能、低功耗、低成本和高可靠性的 RISC 处理器 核、外围部件和系统级芯片的应用解决设计方案。。 ARM 处理器核具有低功耗、低成本等卓越性能和显著优点,越来越多的芯片厂商早已看好 ARM 的前景。ARM 处理器核得到了众多的半导体厂家和整机厂商的大力支持,在 32 位嵌入式应用领域 获得了巨大的成功,如 Intel、Motorola 、IBM、NS、Atmel、Philips、NEC、OKI、SONY 等世界上 几乎所有的半导体公司获得 ARM 授权,开发具有自己特色的基于 ARM 的嵌入式系统芯片。 -2- 目前非常流行的 ARM 芯核有 ARM7TDMI,ARM720T,ARM9TDMI,ARM920T,ARM940T, RM946T,ARM966T,XScale 等。ARM 公司最近在美国加利福尼亚州圣荷西市召开的嵌入式处理 器论坛上公布了四个新的 ARM11 系列微处理器内核(ARM1156T2-S 内核、ARM1156T2F-S 内核、 ARM1176JZ-S 内核和 ARM11JZF-S 内核)、应用 ARM1176JZ-S 和 ARM11JZF-S 内核系列的 PrimeXsys 平台、相关的 CoreSight 技术。此外,ARM 芯片还获得了许多实时操作系统(Real Time Operating System)供应商的支持,比较知名的有:Windows CE、uCLinux、pSOS、VxWorks 、Nucleus、 EPOC、uC/OS、BeOS、Palm OS、QNX 等。 ARM 公司具有完整的产业链,ARM 的全球合作伙伴主要为半导体和系统伙伴、操作系统伙伴、 开发工具伙伴、应用伙伴、ARM 技术共享计划 (ATAP),ARM 的紧密合作伙伴已发展为 122 家半 导体和系统合作伙伴、50 家操作系统合作伙伴,35 家技术共享合作伙伴, 并在 2002 年在上海成 立中国全资子公司。早在 1999 年,ARM 就已突破 1.5 亿个,市场份额超过了 50%,而在最新的市 场调查表明,在 2001 年度里,ARM 占据了整个 32、64 位嵌入式微处理器市场的 75%,在 2002 年 度里,占据了整个 32、64 位嵌入式微处理器市场的 79.5%,全世界已使用了 20 多亿个 ARM 核。 ARM 已经成为业界的龙头老大,“每个人口袋中装着 ARM”, 是毫不夸张的。因为几乎所有的手机、 移动设备、PDA 几乎都是用具有 ARM 核的系统芯片开发的。 1.2 基于 ARM 的嵌入式开发环境概述 ARM 技术是高性能、低功耗嵌入式芯片的代名词,在嵌入式尤其是在基于嵌入式 Internet 方面 应用广泛。因此,学习嵌入式系统的开发应用技术,应该是基于某种 ARM 核系统芯片应用平台基 础上进行,在讲述嵌入式系统开发应用之前,应该对基于 ARM 的嵌入式开发环境进行了解,本节 主要对如何构造 ARM 嵌入式开发环境等基本情况进行介绍。 1.2.1 交叉开发环境 作为嵌入式系统应用的 ARM 处理器,其应用软件的开发属跨平台开发,因此需要一个交叉开 发环境。交叉开发是指在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中进行运 行调试的开发方式。用来开发的通用计算机可以选用比较常见的 PC 机、工作站等,运行通用的 Windows 或 Unix 操作系统。开发计算机一般称宿主机,嵌入式设备称为目标机,在宿主机上编译 好的程序,下载到目标机上运行,交叉开发环境提供调试工具对目标机上运行的程序进行调试。 交叉开发环境一般由运行于宿主机上的交叉开发软件(最少必须包含编译调试模块)、宿主机到 目标机的调试通道组成。 运行于宿主机上的交叉开发软件最少必须包含编译调试模块,其编译器为交叉编译器。作为宿 主机的一般为基于 x86 体系的桌上型计算机,而编译出的代码必须在 ARM 体系结构的目标机上运 行,这就是所谓的交叉编译了。在宿主机上编译好目标代码后,通过宿主机到目标机的调试通道将 代码下载到目标机,然后由运行于宿主机的调试软件控制代码在目标机上运行调试。为了方便调试 开发,交叉开发软件一般为一个整合编辑、编译汇编链接、调试、工程管理及函数库等功能模块的 集成开发环境 IDE(Integrated Development Environment)。 组成 ARM 交叉开发环境的宿主机到目标机的调试通道一般有以下三种: 1)基于 JTAG 的 ICD(In-Circuit Debugger)。 JTAG 的 ICD 也称为 JTAG 仿真器,是通过 ARM 芯片的 JTAG 边界扫描口进行调试的设备。JTAG 仿真器通过 ARM 处理器的 JTAG 调试接口与目标机通信,通过并口或串口、网口、USB 口与宿主 -3- 机通讯。JTAG 仿真器比较便宜,连接比较方便。通过现有的 JTAG 边界扫描口与 ARM CPU 核通 信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何应用 端口。通过 JTAG 方式可以完成: 读出/写入 CPU 的寄存器,访问控制 ARM 处理器内核。 读出/写入内存,访问系统中的存储器。 访问 ASIC 系统。 访问 I/O 系统 控制程序单步执行和实时执行 实时地设置基于指令地址值或者基于数据值的断点。 基于 JTAG 仿真器的调试是目前 ARM 开发中采用最多的一种方式。 2)Angel 调试监控软件。 Angel 调试监控软件也称为驻留监控软件,是一组运行在目标板上的程序,可以接收宿主机上调试 器发送的命令,执行诸如设置断点、单步执行目标程序、读写存储器、查看或修改寄存器等操作。 宿主机上的调试软件一般通过串行端口、以太网口、并行端口等通讯端口与 Angel 调试监控软件进 行通信。与基于 JTAG 的调试不同,Angel 调试监控程序需要占用一定的系统资源,如内存、通信 端口等。驻留监控软件是一种比较低廉有效的调试方式,不需要任何其他的硬件调试和仿真设备。 Angel 调试监控程序的不便之处在于它对硬件设备的要求比较高,一般在硬件稳定之后才能进行应 用软件的开发,同时它占用目标板上的一部分资源,如内存、通信端口等,而且不能对程序的全速 运行进行完全仿真,所以对一些要求严格的情况不是很适合。 3)在线仿真器 ICE(In-Circuit Emulator)。 在线仿真器 ICE 是一种模拟 CPU 的设备,在线仿真器使用仿真头完全取代目标板上的 CPU, 可以完全仿真 ARM 芯片的行为,提供更加深入的调试功能。在和宿主机连接的接口上,在线仿真 器也是通过串行端口或并行端口、网口、USB 口通信。在线仿真器为了能够全速仿真时钟速度很高 的 ARM 处理器,通常必须采用极其复杂的设计和工艺,因而其价格比较昂贵。在线仿真器通常用 在 ARM 的硬件开发中,在软件的开发中较少使用,其价格昂贵,也是在线仿真器难以普及的因素。 1.2.2 模拟开发环境 在很多时候为保证项目进度,硬件和软件开发往往同时进行,这时作为目标机的硬件环境还没 有建立起来,软件的开发就需要一个模拟环境来进行调试。模拟开发环境建立在交叉开发环境基础 之上,是对交叉开发环境的补充。这时,除了宿主机和目标机之外,还需要提供一个在宿主机上模 拟目标机的环境,使得开发好的程序直接在这个环境里运行调试。模拟硬件环境是非常复杂的,由 于指令集模拟器与真实的硬件环境相差很大,即使用户使用指令集模拟器调试通过的程序也有可能 无法在真实的硬件环境下运行,因此软件模拟不可能完全代替真正的硬件环境,这种模拟调试只能 作为一种初步调试,主要是用作用户程序的模拟运行,用来检查语法、程序的结构等简单错误,用 户最终还必须在真实的硬件环境中实际运行调试,完成整个应用的开发。 1.2.3 评估电路板 评估电路板,也称作开发板,一般用来作为开发者学习板、实验板,可以作为应用目标板出来 之前的软件测试、硬件调试的电路板。尤其是对应用系统的功能没有完全确定、初步进行嵌入式开 发且没有相关开发经验的非常重要。开发评估电路板并不是 ARM 应用开发必须的,对于有经验的 工程师完全可以自行独立设计自己的应用电路板和根据开发需要设计实验板。好的评估电路板一般 文档齐全,对处理器的常用功能模块和主流应用都有硬件实现,并提供电路原理图和相关开发例程 -4- 与源代码供用户设计自己的应用目标板和应用程序作参考。选购合适于自己实际应用的开发板可以 加快开发进度,可以减少自行设计开发的工作量。 1.2.4 嵌入式操作系统 随着嵌入式应用的迅猛发展,以前不怎么知名的嵌入式操作系统概念开始流行起来,以至很多 初学者认为嵌入式开发必须采用嵌入式操作系统。实际上,一个嵌入式应用是否采用嵌入式操作系 统,采用哪种嵌入式操作系统完全由项目的复杂程度、实时性要求、应用软件规模、目标板硬件资 源以及产品成本等因素决定。早期的嵌入式系统并没有操作系统,只不过有一个简单的控制循环而 已,对很简单的嵌入式系统开发来说,这可能满足开发需求。随着嵌入式系统在复杂性上的增长, 一个操作系统显得重要起来,有些复杂的嵌入式系统也许是因为设计者坚持不要操作系统才使系统 开发过程非常复杂。 嵌入式操作系统一般可以提供内存管理、多任务管理、外围资源管理,给应用程序设计带来很 多好处,但嵌入式操作系统同时也会占用一定的系统资源,并且要在用户自己的目标板上运行起来, 并基于操作系统来设计自己的应用程序,也会相应地带来很多新的问题。所以对于不太复杂的应用 完全可以不用操作系统,而对于应用软件规模较大的场合,采用操作系统则可以省掉很多麻烦。嵌 入式操作系统是嵌入式开发中一个非常大的课题,目前已有专门的书籍做详细讲解,这里就不进行 讨论了。 关 于 各 种 嵌 入 式 操 作 系 统 及 其 对 ARM 处 理 器 的 支 持 情 况 , 用 户 也 可 以 访 问 网 站 www.embed.com.cn 了解,该网站对目前流行的大多数嵌入式操作系统都有介绍。 用户选用 ARM 处理器开发嵌入式系统时,建立嵌入式开发环境是非常重要的,以上对嵌入式 开发环境的基本情况作了简单介绍,一般来说一套具备最基本功能的交叉开发环境是 ARM 嵌入式 开发必不可少的,至于嵌入式实时操作系统、评估板等其他开发工具则可以根据应用软件规模和开 发计划选用。 1.3 各种 ARM 开发工具简介 用户选用 ARM 处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节省开发 成本,用户在建立自己的基于 ARM 嵌入式开发环境时,可供选择的开发工具是非常多的,目前世 界上有几十多家公司提供不同类别的 ARM 开发工具产品,根据功能的不同,分别有编译软件、汇 编软件、链接软件、调试软件、嵌入式操作系统、函数库、评估板、JTAG 仿真器、在线仿真器等。 有些工具是成套提供的,有些工具则需要组合使用。 在本节中,我们将简要介绍几种比较流行的 ARM 开发工具,包括 ARM SDT、ARM ADS、Multi 2000、Embest IDE for ARM 等集成开发环境以 及 OPENice32-A900 仿真器与 Multi-ICE 仿真器等。 1.3.1 ARM 的 SDT ARM SDT 的英文全称是 ARM Software Development Kit ,是 ARM 公司(www.arm.com)为方便 用户在 ARM 芯片上进行应用软件开发而推出的一整套集成开发工具。ARM SDT 经过 ARM 公司逐 年的维护和更新,目前的最新版本是 2.5.2,但从版本 2.5.1 开始,ARM 公司宣布推出一套新的集成 开发工具 ARM ADS 1.0,取 ARM SDT 而代之,今后将不会再看到 ARM SDT 的新版本。 ARM SDT 由于价格适中,同时经过长期的推广和普及,目前拥有最广泛的 ARM 软件开发用户群体, 也被相当多的 ARM 公司的第三方开发工具合作伙伴集成在自己的产品中,比如美国 EPI 公司的 -5- JEENI 仿真器。 ARM SDT(以下关于 ARM SDT 的描述均是以版本 2.50 为对象)可在 Windows95、98、NT 以及 Solaris 2.5/2.6、HP-UX 10 上运行,支持最高到 ARM9(含 ARM9)的所有 ARM 处理器芯片的 开发,包括 Strong ARM。 ARM SDT 包括一套完整的应用软件开发工具: ¦ armcc ARM 的 C 编译器,具有优化功能,兼容于 ANSI C。 ¦ tcc THUMB 的 C 编译器,同样具有优化功能,兼容于 ANSI C。 ¦ armasm 支持 ARM 和 THUMB 的汇编器。 ¦ armlink ARM 连接器,连接一个和多个目标文件,最终生成 ELF 格式的可执行映像文件。 ¦ armsd ARM 和 THUMB 的符号调试器。 以上工具为命令行开发工具,均被集成在 SDT 的两个 Windows 开发工具 ADW 和 APM 中,用 户无需直接使用命令行工具。 ¦ APM Application Project Manageer,ARM 工程管理器,完全图形界面,负责管理源文 件,完成编辑、编译、链接并最终生成可执行映像文件等功能,见下图。 ¦ ADW 图 1-1 APM 项目管理器窗口 Application Debugger Windows,ARM 调试工具,ADW 提供一个调试 C、C++和 汇编源文件的全窗口源代码级调试环境,在此也可以执行汇编指令级调试,同时 可以查看寄存器、存储区、栈等调试信息。 图 1-2 ADW 窗口 ARM SDT 还提供一些实用程序,如 fromELF、armprof、decaxf 等,可以将 ELF 文件转换为不同的 格式,执行程序分析以及解析 ARM 可执行文件格式等。 ARM SDT 集成快速指令集模拟器,用户可以在硬件完成以前完成一部分调试工作;ARM SDT 提供 ANSI C、C++、Embedded C 函数库,所有库均以 lib 形式提供,每个库都分为 ARM 指令集和 THUMB 指令集两种,同时在各指令集中也分为高字节结尾(big endian)和低字节结尾(little endian)两种。 用户使用 ARM SDT 开发应用程序可选择配合 Angel 驻留模块或者 JTAG 仿真器进行,目前大部分 JTAG 仿真器均支持 ARM SDT。 -6- 1.3.2 ARM 的 ADS ARM ADS 的英文全称为 ARM Developer Suite,是 ARM 公司推出的新一代 ARM 集成开发工具, 用来取代 ARM 公司以前推出的开发工具 ARM SDT,目前 ARM ADS 的最新版本为 1.2。 ARM ADS 起源于 ARM SDT,对一些 SDT 的模块进行了增强并替换了一些 SDT 的组成部分,用户 可以感受到的最强烈的变化是 ADS 使用 CodeWarrior IDE 集成开发环境替代了 SDT 的 APM,使用 AXD 替换了 ADW,现代集成开发环境的一些基本特性如源文件编辑器语法高亮,窗口驻留等功能 在 ADS 中才得以体现。 ARM ADS 支持所有 ARM 系列处理器包括最新的 ARM9E 和 ARM10,除了 ARM SDT 支持的运行 操作系统外还可以在 Windows2000/Me 以及 RedHat Linux 上运行。 ARM ADS 由六部分组成: ¦ 代码生成工具(Code Generation Tools) 代码生成工具由源程序编译、汇编、链接工具集组成。ARM 公司针对 ARM 系列每一种结 构都进行了专门的优化处理,这一点除了作为 ARM 结构的设计者的 ARM 公司,其他公 司都无法办到,ARM 公司宣称,其代码生成工具最终生成的可执行文件最多可以比其他 公司工具套件生成的文件小 20%。 ¦ 集成开发环境(CodeWarrior IDE from Metrowerks) CodeWarrior IDE 是 Metrowerks 公司一套比较有名的集成开发环境,有不少厂商将它作为 界面工具集成在自己的产品中。CodeWarrior IDE 包含工程管理器、代码生成接口、语法敏 感编辑器、源文件和类浏览器、源代码版本控制系统接口、文本搜索引擎等,其功能与 Visual Studio 相似,但界面风格比较独特。ADS 仅在其 PC 机版本中集成了该 IDE。 图 1-3 源程序窗口 ¦ 调试器(Debuggers) 调试器部分包括两个调试器:ARM 扩展调试器 AXD(ARM eXtended Debugger )、ARM 符号调试器 armsd(ARM symbolic debugger)。 AXD 基于 Windows9X/NT 风格,具有一般意义上调试器的所有功能,包括简单和复杂断 点设置、栈显示、寄存器和存储区显示、命令行接口等。 Armsd 作为一个命令行工具辅助调试或者用在其他操作系统平台上。 -7- 图 1-4 AXD 窗口 ¦ 指令集模拟器(Instruction Set Simulators) 用户使用指令集模拟器无需任何硬件即可在 PC 机上完成一部分调试工作。 ¦ ARM 开发包(ARM Firmware Suite) ARM 开发包由一些底层的例程和库组成,帮助用户快速开发基于 ARM 的应用和操作系统。 具体包括系统启动代码、串行口驱动程序、时钟例程、中断处理程序等,Angel 调试软件 也包含在其中。 ¦ ARM 应用库(ARM Applications Library) ADS 的 ARM 应用库完善和增强了 SDT 中的函数库,同时还包括一些相当有用的提供了 源代码的例程。 用户使用 ARM ADS 开发应用程序与使用 ARM SDT 完全相同,同样是选择配合 Angel 驻留模 块或者 JTAG 仿真器进行,目前大部分 JTAG 仿真器均支持 ARM ADS。 ARM ADS 的零售价为 5500 美元,如果选用不固定的许可证方式则需要 6500 美元。 1.3.3 Multi 2000 Multi 2000 是 美 国 Green Hills 软 件 公 司 (www.ghs.com) 开 发 的 集 成 开 发 环 境 , 支 持 C/C++/Embedded C++/Ada 95/Fortran 编程语言的开发和调试,可运行于 Windows 平台和 Unix 平台, 并支持各类设备的远程调试。 Multi 2000 支持 Green Hills 公司的各类编译器以及其它遵循 EABI 标准的编译器,同时 Multi 2000 支持众多流行的 16 位、32 位和 64 位处理器和 DSP,如 PowerPC、ARM、MIPS、x86、Sparc、 TriCore、SH-DSP 等,并支持多处理器调试。 Multi 2000 包含完成一个软件工程所需要的所有工具,这些工具可以单独使用,也可集成第三 方系统工具。Multi 2000 各模块相互关系以及和应用系统相互作用如下图所示: 图 1-5 MULTI2000 模块与应用系统 -8- 工程生成工具(Project Builer) 工程生成工具实现对项目源文件、目标文件、库文件以及子项目的统一管理,显示程序结 构,检测文件相互依赖关系,提供编译和链接的图形设置窗口,并可对编程语言的进行特 定环境设定。 图 1-6 项目生成工具界面 源代码调试器(Source-Level Debugger) 源代码调试器提供程序装载、执行、运行控制和监视所需要的强大的窗口调试环境,支持 各类语言的显示和调试,同时可以观察各类调试信息。 图 1-7 源码级调试器界面信息 事件分析器(Event Analyzer) 事件分析器提供用户观察和跟踪各类应用系统运行和 RTOS 事件的可配置的图形化界面, 它可移植到很多第三方工具或集成到实时操作系统中,并对以下事件提供基于时间的测 量:任务上下文切换、信号量获取/释放、中断和异常、消息发送/接受、用户定义事件。 图 1-8 事件分析器界面 性能剖析器(Performance Profiler) 性能剖析器提供对代码运行时间的剖析,可基于表格或图形显示结果,有效的帮助用户优 化代码。 -9- 图 1-9 性能剖析器界面 实时运行错误检查工具(Run-Time Error Checking) 实时运行错误检查工具提供对程序运行错误的实时检测,对程序代码大小和运行速度只有 极小影响,并具有内存泄漏检测功能。 图形化浏览器(Graphical Brower) 图形化浏览器提供对程序中的类、结构变量、全局变量等系统单元的单独显示,并可显示 静态的函数调用关系以及动态的函数调用表。 图 1-10 浏览器界面 文本编辑器(Text Editor) Multi 2000 的文本编辑器是一个具有丰富特性的用户可配置的文本图形化编辑工具,提供 关键字高亮显示、自动对齐等辅助功能。 版本控制工具(Version Control System) Multi 2000 的版本控制工具和 Multi 2000 环境紧密结合,提供对应用工程的多用户共同开 发功能。Multi 2000 的版本控制工具通过配置对支持很多流行的版本控制程序,如 Rational 公司的 ClearCase 等。 1.3.4 Embest IDE for ARM Embest IDE 英文全称是 Embest Integrated Development Environment,是深圳市英蓓特信息技术 有限公司(www.embedinfo.com)推出的一套应用于嵌入式软件开发的新一代集成开发环境。 Embest IDE 是一个高度集成的图形界面操作环境,包含编辑器、编译汇编链接器、调试器、工程管 理、Flash 编程等工具,其界面风格同 Microsoft Visual Studio(见下图)。Embest IDE for ARM 目前支 持所有基于 ARM7 和 ARM9 核的处理器。将来可通过升级软件实现对新的 ARM 核的支持。 - 10 - 图 1-11 Embest IDE for ARM 窗口 Embest IDE for ARM 运行的主机环境为 Windows/98/NT/2000/XP,支持的开发语言包括标准 C 和汇编语言。 Embest IDE for ARM 本身配 JTAG 仿真器(Embest JTAG Emulator/PowerICE/UnetICE)。 Embest IDE for ARM 主要特性: 工程管理器:图形化的工程管理工具,负责应用源程序的文件组织和管理,提供编 译、链接、库文件的设置窗口,可在一个工作区中同时管理多个应用软件和库工程。 源码编辑器:标准的文本编辑功能,支持语法关键字、关键字色彩显示等;提供 C 语言程序的函数列表及函数定位功能;IDE 同时提供了高效的 Find in Files 引擎,可 迅速查找定位指定的字符串信息。 编译工具:集成著名优秀自由软件 GNU 的 GCC 编译器,运行在 Win32 环境;同时兼容 ARM SDT2.51 编译器,可以方便 ARM SDT 及 ADS 的用户在 Embest IDE 下编译工程代 码。IDE 提供了图形化的编译器开关设置界面,用户可以简单、直观、快捷地完成工程编译选项设 置。编译信息的输出,条理清晰,可迅速定位产生语法错误的源文件行。 调试器:提供对 ARM AXD 调试器的支持,可以方便使用 Embest JTAG 仿真器调试 ARM SDT 及 ADS 环境的工程代码。源码级调试,提供了图形和命令行两种调试方式,可进行 断点设置、单步 执行、异常处理,可查看修改内存、寄存器、变量等,可查看函数栈,可进行反汇编等; 支持 ARM 指令或 Thumb 指令调试。 调试设备:Embest JTAG 仿真器,连接到主机的通讯接口可以是 DB25 的 LPT 口、USB 接 口或 Enternet 接口, 另外一端是 IDC 插头,连接到目标板的 JTAG 接口。用户可以使用 Embest IDE for ARM 配合 Embest JTAG 仿真器进行应用软件的开发,Embest IDE for ARM 同时也支持一些国内外常用的 Jtag Cable 线。 脱机调试:Embest IDE for ARM 带 ARM 指令集模拟器,用户可以在 PC 上模拟调试 ARM 应用软件。 丰富的例程:提供 ADI、Atmel、Samsung、Cirrus Logic、OKI、Philips、Sharp 等多家公司 ARM 处理器的调试程序示例和使用说明。 集成了 Flash Download、Memory Upload/Download、elf to bin、bin 文件辟分工具、 - 11 - 外围寄存器编辑器以及反汇编等常用的工具。 联机帮助:中、英文两种版本在线帮助文档。 Embest IDE for ARM(包括 Embest JTAG 仿真器)以低价格、高性能提供给基于 ARM 的嵌入 式系统的开发者。关于 Embest IDE for ARM 的详细介绍与使用参见第二章。 1.3.5 OPENice32-A900 仿真器 OPENice32-A900 仿真器是韩国 AIJI 公司(www.aijisystem.com)生产的。OPENice32-A900 是 JTAG 仿真器,支持基于 ARM7/ARM9/ARM10 核的处理器以及 Intel Xscale 处理器系列。它与 PC 之间通 过串口或 USB 口或网口连接,与 ARM 目标板之间通过 JTAG 口连接。OPENice32-A900 仿真器主 要特性如下: 支持多核处理器和多处理器目标板。 支持汇编与 C 语言调试。 提供在板(on-board)flash 编程功能。 提供存储器控制器设置 GUI。 可通过升级软件的方式支持更新的 ARM 核。 OPENice32-A900 仿真器自带宿主机调试软件 AIJI Spider,但需要使用第三方编译器。AIJI Spider 调试器支持 ELF/DWARF1/DWARF2 等调试符合信息文件格式,可以通过 OPENice32-A900 仿真器 下载 BIN 文件到目标板,控制程序在目标板上的运行并进行调试。支持单步、断点设置、查看寄存 器/变量/内存以及 Watch List 等调试功能。 OPENice32-A900 仿真器也支持一些第三方调试器,包括 Linux GDB 调试器和 EWARM、ADS/SDT 等调试工具。 1.3.6 Multi-ICE 仿真器 Multi-ICE 是 ARM 公司自己的 JTAG 在线仿真器,目前的最新版本是 2.1 版。 Multi-ICE 的 JTAG 链时钟可以设置为 5 kHz 到 10 MHz,实现 JTAG 操作的一些简单逻辑由 FPGA 实现,使得并行口的通信量最小,以提高系统的性能。Multi-ICE 硬件支持低至 1V 的电压。Multi-ICE 2.1 还可以外部供电,不需要消耗目标系统的电源,这对调试类似于手机等便携式、电池供电设备 是很重要的。 Multi-ICE 2.x 支持该公司的实时调试工具 MultiTrace,MultiTrace 包含一个处理器,因此可以跟 踪触发点前后的轨迹,并且可以在不终止后台任务的同时对前台任务进行调试,在微处理器运行时 改变存储器的内容,所有这些特性使延时降到最低。 Multi-ICE 2.x 支持 ARM7、ARM9、ARM9E、ARM 10 和 Intel Xscale 微结构系列。它通过 TAP 控制器串联,提供多个 ARM 处理器以及混合结构芯片的片上调试。它还支持低频或变频设计以及 超低压核的调试,并且支持实时调试。 Multi-ICE 提供支持 Windows NT4.0、Windows95/ 98/2000/Me、HPUX 10.20 和 Solaris V2.6/7.0 的驱动程序。 Multi-ICE 主要优点: 快速的下载和单步速度。 用户控制的输入/输出位。 可编程的 JTAG 位传送速率。 开放的接口,允许调试非 ARM 的核或 DSP。 网络连接到多个调试器。 目标板供电,或外接电源。 - 12 - 1.4 如何学习基于 ARM 嵌入式系统开发 ARM 微处理器因其卓越的低功耗、高性能在 32 位嵌入式应用中已位居世界第一,是高性能、 低功耗嵌入式处理器的代名词,为了顺应当今世界技术革新的潮流,了解、学习和掌握嵌入式技术, 就必然要学习和掌握以 ARM 微处理器为核心的嵌入式开发环境和开发平台,这对于研究和开发高 性能微处理器、DSP 以及开发基于微处理器的 SoC 芯片设计及应用系统开发是非常必要的。 那么究竟如何学习嵌入式的开发和应用?技术基础是关键。技术基础决定了一个人学习知识、 掌握技能的能力。嵌入式技术融合具体应用系统技术、嵌入式微处理器/DSP 技术、系统芯片 SoC 设计制造技术、应用电子技术和嵌入式操作系统及应用软件技术,具有极高的系统集成性,可以满 足不断增长的信息处理技术对嵌入式系统设计的要求。因此学习嵌入式系统首先是基础知识学习, 主要是相关的基本硬件知识,如一般处理器及接口电路(Flash/ SRAM/SDRAM /Cache, UART,Timer, GPIO, Watchdog、USB、IIC 等...)等硬件知识,至少了解一种 CPU 的体系结构;至少了解一种操 作系统(中断,优先级,任务间通信,同步...)。对于应用编程,要掌握 C、C++及汇编语言程序设 计(至少会 C),对处理器的体系结构、组织结构、指令系统、编程模式、一般对应用编程要有一定 的了解。在此基础上必须在实际工程实践中掌握一定的实际项目开发技能。 其次对于嵌入式系统开发的学习,必须要有一个较好的嵌入式开发教学平台。功能全面的开发 平台一方面为学习提供了良好的开发环境,另一方面开发平台本身也是一般的典型实际应用系统。 在教学平台上开发一些基础例程和典型实际应用例程,对于初学者和进行实际工程应用也是非常必 要的。 嵌入式系统的学习必须对基本内容有深入的了解。在处理器指令系统、应用编程学习的基础上, 重要的是加强外围功能接口应用的学习,主要是人机接口、通讯接口,如 USB 接口、A/D 转换、 GPIO、以太网、IIC 串行数据通信、音频接口、触摸屏等知识的掌握。 嵌入式操作系统也是嵌入式系统学习重要的一部分,在此基础上才能进行各种设备驱动应用程 序的开发。 1.5 本教程相关内容介绍 学习基于 ARM 的嵌入式技术的读者根据专业类型划分为两种:一种是从事集成电路设计的专 业人员,他们是从事芯片设计的,偏重于 ARM 体系结构、组织结构和实现电路的功能和性能以及 基于 ARM 核(包括处理器核和 CPU 核)的 SoC 系统芯片设计时的外围接口逻辑设计验证;另一种 是从事基于 ARM 核的各种 SoC 系统芯片的工程应用开发,由于获得基于 ARM 核许可的芯片厂商 几乎囊括了全行业,各种 SoC 系统芯片种类繁多,但应用工程师只能面对实际应用选择使用有限的 种类,他们偏重于选取已有的芯片,根据自身的工程应用开发应用系统。 由于几乎所有的半导体公司获得 ARM 的授权,世界上几乎所有的半导体厂商都从 ARM 公司 购买 ARM ISA 许可,开发出不同的应用 SOC 系统芯片。目前基于 ARM 系列芯片已经被广泛的应 用于移动电话、手持式计算机以及各种各样的嵌入式应用领域,成为世界上销量最大的 32 位微处 理器,ARM 都取得了极大的成功。 半导体公司在基于 ARM 核的芯片设计开发时是针对不同实际应用的,因此内部功能配置组合 是千变万化的。因此,一本书要讲全所有的基于 ARM 的嵌入式技术是不太现实的,如何兼容很多 实际应用,满足一般应用开发也是不太容易的事情。对于初步进入 ARM 开发,现有的 ARM 书籍 只是 ARM 知识的入门,而涉及到实际工程应用开发实例的内容更少,由于没有很好的和某些基于 ARM 的芯片实际工程应用相结合,没有实际应用的例子,这对于初学者掌握 ARM 技术,尤其是想 - 13 - 通过短期学习、掌握嵌入式实际应用工程项目开发是很困难的。 我国是 IT 产业的制造大国、应用大国,但决不是技术强国。与实际应用密切结合且技术高度分 散的嵌入式技术,为我国 IT 技术的发展提供了机遇。因此,一方面必须在学生中进行基于 ARM 的 嵌入式教学;另一方面现有的工程技术人员对于嵌入式开发与应用的学习也非常迫切。编写一本嵌 入式教程,既要面向嵌入式基础教育和培训,也要结合实际工程应用实例,就显得非常必要了。 分析学习基于 ARM 的嵌入式技术的读者群,已从高新技术的工程技术人员逐步的扩大到各个 层次的教学单位,我国的一般嵌入式教学仍然还是在 80 年代初单片机教学的水平。总结近二十多 年来的以单片机为核心的教学情况,由于受传统的教学体系影响,我们的教学方法、教材编写和教 学手段严重地和这门课程以实际应用为主的这一基本特征脱节。学生学习完这门课程,只能进行一 般的基于基本指令基础上的简单编程,而不能进行基本的应用系统设计和在此基础上的应用程序设 计,要独立进行一般的开发工作就有难度,这和国外的这一技术的教学距离较大,和实际工程应用 脱节更大,使得应用企业承担了繁重的工程应用再教育的任务,严重的制约了我国相关技术的发展。 基于国内嵌入式技术的现状和教学、技术及相关产业发展的需求,在国内开展以 ARM 为核心 的嵌入式系统的技术的教学,就要总结以往的以 51 为核心的嵌入式教学经验,结合 ARM 技术的自 身特点,结合国内的实际情况。我们确定的以 ARM 为核心的嵌入式系统的应用开发教程按教学情 况分为教程和实验教程,本实用实验教程的内容主要是嵌入式系统开发应用的实践环节。 用户学习和选用 ARM 处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节 省开发成本。目前世界上有几十多家公司提供不同类别的 ARM 开发工具和产品。一般来说一套具 备最基本功能的嵌入式集成开发环境 IDE 是嵌入式开发必不可少的,深圳市英蓓特信息技术有限公 司(简称英蓓特,英文简称 Embest)是一家为全球嵌入式系统开发人员提供软硬件开发工具和嵌入 式系统完整解决方案及技术信息服务的高科技企业,提出了“让高端处理器的开发像 8051 一样容 易,让高端处理器的开发像 8051 一样便宜”的经营理念,以尽快提升中国高科技嵌入式系统开发 应用水平为己任,专门服务于对专业性技术和服务要求极高的嵌入式在线 CPU/MCU 开发工具( IDE & ICD)、实时多任务操作系统(RTOS)、嵌入式控制板(Embedded Board)等应用领域。公司主要 从事相关嵌入式开发,项目和产品有: Embest IDE for ARM 嵌入式软件集成开发环境; Embest JTAG ARM 仿真器; 各种 ARM 实验板; ARM 教学系统; TERN Controller 系列嵌入式控制板; Uc-os/II、ucLinux、Embedded Linux 等嵌入式操作系统的技术服务; 嵌入开发领域综合性门户网站:嵌入开发网(www.embed.com.cn); 承接嵌入式领域各种项目开发工程; 嵌入式技术培训 公司已同ARM、Atmel、Samsung、Cirrus Logic、OKI、Hynix、TERN、华邦、上海华虹、…… 等国内外多家企业及北京大学、西安交通大学、北京航空航天大学、西北工业大学、西北大学、北 方交通大学等多所大专院校建立了密切的合作关系,并成为ARM Connected Community Membership - 14 - (参见http://www.convergencepromotions.com/ARM/catalog_04/Embest.htm)。 SAMSUNG 公司 S3C44B0 芯片是在国内流行比较广的基于 ARM7TDMI 核的 ARM 芯片,英蓓 特开发的基于 S3C44B0 芯片应用的 Embest S3CEV40-II 教学系统,是以较低的价格为用户提供了全 面嵌入式开发与学习平台。本书是《嵌入式开发与应用实用教程》一书结合 Embest S3CEV40-II 教 学实验系统编写的嵌入式开发学习的实验教程,该实验教程为学习嵌入式系统的读者提供了丰富的 学习基于 ARM 嵌入式开发与应用的一系列实验例程实例。 本书的第一章是关于嵌入式系统基本情况、嵌入式开发环境、ARM 嵌入式开发工具和基于 ARM 学习情况以及本书的基本内容介绍。第二章是关于 Embest IDE for ARM 集成开发环境、Embest S3CEV40-II 教学系统 和 Embest JTAG 仿真器的详细介绍与使用介绍。通过以上两章使读者对嵌入 式开发与应用的基本情况、嵌入式开发工具和教材对应的基本教学平台 Embest S3CEV40-II 的基本 构成有个全面了解。总体介绍 Embest S3CEV40-II 实验系统的组成、安装、硬件资源以及开发环境 Embest IDE for ARM 的使用。 嵌入式系统由嵌入式处理器、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件等部分组成, 因此本书在对嵌入式概念、开发环境及开发平台有个基本的了解基础上,安排了大量的实验例程, 这些例程充分的考虑了嵌入式知识的完整性。 书的第三章内容是围绕嵌入式处理器 ARM 技术、嵌入式软件开发知识的基础实验,包含基本 的指令和程序设计,主要是 ARM 的基本指令系统、THUMB 指令系统实验、汇编语言程序设计、 ARM 处理器工作模式实验、C 语言嵌入式编程、C 语言和汇编语言混合编程、综合性编程。通过基 本的程序设计,掌握嵌入式基本程序设计、IDE 调试环境的使用。这也是 S3CEV40 实验系统中最基 本的实验。 书的第四章是嵌入式外围的基本接口进行。主要是存储器实验、I/O 接口程序设计实验、中断 实验、串口通信实验、实时时钟实验和简单的数码管接口实验。 书的第五章是关于嵌入式外围的复杂的人机接口实验。这些实验是用户在熟练掌握 S3CEV40 基础实验和 Embest IDE for ARM 的使用后进行的应用实验。主要包括液晶显示实验、用户键盘实验 和触摸屏控制实验。 书的第六章实验要求用户已经比较熟练掌握基于 ARM 核处理器的软件技术开发,实验完成后 可以使软件应用设计和硬件设计都有一定程度的提高。主要包括 IIC 串行接口总线通讯实验、以太 网通讯实验和 IIS 音频接口总线通讯实验。 通过对第四、五和第六章的学习,使读者掌握嵌入式的外围接口设备的开发、应用编程知识, - 15 - 能够熟练进行嵌入式常用外围接口模块的开发。 书的第七章主要介绍实时操作系统 uCOS-II 在 Embest S3CEV40-II 实验系统上的应用,着重介 绍 uCOS-II 操作系统及其在 ARM 核处理器上的移植。同时介绍 Embest IDE for ARM 集成开发环境 下的实验程序。 书的附录是指令集速查表及基于 ARM 嵌入式系统开发常遇到的问题解答。问题解答是对实际 开发存在问题的归纳总结。这些问题从处理器评估板选型、开发环境介绍、软件编程中库的使用、 编译链接、软件调试固化到嵌入式操作系统等,几乎包含开发中存在的所有问题的完整解答,这些 问题都是开发中存在的实际问题,答案也是经过实际调试通过的。 因此本书是一本实践性和实用性较强的面向工程应用的教程,实验教程以教学系统中的应用软 件程序开发为主,全面详细地介绍基于教学系统各个实验的实验原理、软件设计和硬件设计。本书 包含大量软件和硬件资源,也可以作为基于 ARM 核嵌入式开发的技术参考手册。 嵌入式应用开发涉及到软、硬件及操作系统等复杂的知识。因此它的教学工作、尤其是面向实 际开发应用的教学工作,是一项非常复杂的系统工程。由于本人对嵌入式知识体系把握的限制、对 嵌入式教学经验的不足、与学生和实际工程技术人员交流的欠缺以及因时间仓促等众多客观条件的 制约,本希望实验教程能满足不同层次开发人员的需求,但这显然是不可能的。书中难免存在一些 错误和不足,敬请读者谅解,并欢迎读者提出宝贵的意见和建议。希望教育界、科研界、产业界携 手并进,抓住嵌入式为我国 IT 发展提供难得的历史机遇,促进我国嵌入式技术快速、稳定、健康的 发展。 - 16 - 第二章 Embest ARM 实验教学系统 2.1 教学系统介绍 Embest ARM 教学系统包括 Embest IDE 集成开发环境,Embest JTAG 仿真器,Flash 编程器, Embest EduKit-III 开发板、各种连接线、电源适配器以及实验指导书等。基本实验模型示意 图如 2-1 所示: 图 2-1 实验模型示意图 2.1.1 Embest IDE 集成开发环境 1)Embest IDE 是一套应用于嵌入式软件开发的新一代集成开发环境。它提供高效明晰的 图形化的嵌入式应用软件开发平台,包括一整套完备的面向嵌入式系统的开发和调试工具:编辑器、 编译器、连接器、调试器、工程管理器等。Embest IDE 集成开发环境界面风格同 Microsoft Vis ual Studio,是一套良好的嵌入式软件可视化开发环境。用户可以很方便的在 Embest IDE 集成 开发环境中创建和打开工程,建立、打开和编辑文件,编译、连接、运行、调试各种嵌入式应用程 序。Embest IDE 开发环境界面如图 2-2 所示 - 17 - 图 2-2 Embest IDE 开发环境软件界面 2)Embest IDE 主要特征 Embest IDE 可在 Windows 98、2000、NT 及 XP 等操作系统上运行,主要支持 ARM 系列 处理器。对于 ARM 系列处理器,Embest IDE 目前支持 ARM7 以及 ARM9 系列。Embest IDE for ARM 于 2001 年正式发行,目前的版本为 Embest IDE Pro for ARM 2004。 Embest IDE for ARM 主要特性如下: 支持开发语言:C 和汇编。 界面友好,使用方便:类似 MS Visual Studio 的用户界面。 工程管理器:图形化的工程管理工具,负责应用源程序的文件组织和管理,提供编译、链 接、库文件的设置窗口,可在一个工作区中同时管理多个应用软件和库工程。 源码编辑器:标准的文本编辑功能,支持语法关键字、关键字色彩显示等。IDE 同时提供 了高效的 Find in Files 引擎,可迅速查找定位指定的字符串信息。 编译工具:集成著名优秀自由软件 GNU 的 GCC 编译器,并经过优化和严格测试,运行在 Win32 环境;同时兼容 ARM SDT2.51 编译器,可以方便 ARM SDT 及 ADS 的用户在 E mbest IDE 下编译工程代码。IDE 提供了图形化的编译器开关设置界面,用户可以简单、 直观、快捷地完成工程编译选项设置。编译信息的输出,条理清晰,可迅速定位产生语法 错误的源文件行。 调试器:提供对 ARM AXD 调试器的支持,可以方便使用 Embest JTAG 仿真器调试 AR M SDT 及 ADS 环境的工程代码。源码级调试,提供了图形和命令行两种调试方式,可 进行断点设置、单步执行、异常处理,可查看修改内存、寄存器、变量等,可查看函数栈, 可进行反汇编等。支持 ARM/Thumb 指令调试。 - 18 - 调试设备:Embest JTAG 仿真器,连接到主机的通信接口可以是 DB25 的 LPT 口、USB 接口或 Ethernet 接口,另外一端是 IDC 插头,连接到目标板的 JTAG 接口。用户可以使用 Embest IDE 配合 Embest JTAG 仿真器进行应用软件的开发,Embest IDE 同时也支 持一些国内外常用的 Jtag Cable 线。 脱机调试:Embest IDE for ARM 带 ARM 指令集模拟器,用户可以在 PC 上模拟调试 A RM 应用软件。 丰富的例程:提供 ADI、Atmel、Samsung、Cirrus Logic、OKI、Philips、Sharp 等多 家公司 ARM 处理器的调试程序示例和使用说明。 联机帮助:中、英文两种版本的在线帮助文档。 在嵌入式软件开发时,完成设计和编码后,即开始调试程序,这是软件开发的第三步。一个几 千行的程序,其编译可达到没有一个警告,然而在运行时却可能达不到正常的设计需求、甚至系统 无法运行起来而崩溃,更为难以查找的是系统运行只是在偶然的情况下出现问题或崩溃。当程序不 能顺利运行,而又不能简单、直观的分析、知道问题的症结所在时,就该使用调试器来监视此程序 的运行了。Embest IDE 调试器提供程序装载、执行、运行控制和监视所需要的强大的窗口调试环 境,支持源码显示和调试,同时可以观察各类调试信息。Embest IDE 的调试功能包括: 断点功能:断点设置、断点屏蔽、断点取消、条件断点、查看断点列表。 程序的单步执行。 变量监视功能:随程序运行同步更新变量,变量值即时修改。 寄存器即时查看与修改。 提供外围寄存器编辑器,可查看编辑 ARM 处理器的外围寄存器定义 存储器查看与修改,存储器内容显示格式定制。 堆栈显示。 同时提供图形界面操作和命令行操作方式。 支持被调试代码的多种显示模式,能以源码的形式、汇编的形式、混合的形式来显示程序。 提供外围寄存器细节属性窗口,调试过程中可动态修改外围寄存器单元的配置 具有与 MS Visual Studio 类似的调试菜单功能:Go,Stop,Reset,Step into,Ste p over,Step out,Run to Cursor 等。 程序的上载和下载。 2.1.2 Embest JTAG 仿真器 JTAG 仿真器也称为 JTAG 调试器,是通过 ARM 芯片的 JTAG 边界扫描口进行调试的设备。J TAG 仿真器连接比较方便,通过现有的 JTAG 边界扫描口与 ARM CPU 核通信,属于完全非插入 式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控 软件所必需的。 另外,由于 JTAG 调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接 口问题,如高频操作限制、AC 和 DC 参数不匹配,电线长度的限制等被最小化了。使用集成开发 环境配合 JTAG 仿真器进行开发是目前采用最多的一种调试方式。Embest JTAG 仿真器如下图所 示。 - 19 - (a)Embest Emulator for ARM (b)Embest PowerICE for ARM (c)Embest UnetICE for ARM 图 2-3 Embest JTAG 仿真器图 Embest JTAG 仿真器目前分为三种类型,包括标准型(Embest Emulator for ARM),增强型 (Embest PowerICE for ARM)和通用型(Embest UnetICE for ARM),主要区别在于下载调试的速 度不同。其中 Embest Emulator for ARM,Embest PowerICE for ARM 根据采用打印机并口(LPTx) 与主机通讯,即仿真器一端是一个 DB25 的接口,用于连接计算机的并行口,另外一端是 20 针的 IDC 插头,用于连接目标板。Embest UnetICE for ARM 则可以使用 USB 接口或 Ethernet RJ45 接口与主 机通讯,分别使用 USB 线或交叉网线与主机 USB 或 RJ45 接口相连。Embest JTAG 仿真器面板上 面都有三只指示灯,对当前的工作状态做出指示。 2.1.3 Flash 编程器 当用户程序编写完之后,需要把程序生成的二进制执行文件烧写到开发板的 Flash 存储器中观 察实际运行结果。英蓓特公司提供了一套完善的 Flash 编程器,用户可以直接使用该编程器对开发 板上的 Flash 进行读写(使用时需要配合前面提到的 Embest JTAG 仿真器)。其运行界面如图 2-4 所示: - 20 - Flash 编程器的主要特征: 图 2-4 Flash 编程器界面 支持所有基于 ARM7 和 ARM9 核的处理器, 如 ATMEL 公司 AT91 系列, CIRRUS 公司 EP73 系列,SAMSUNG 公司 S3C 系列,Philips LPC 系列等。用户也可以通过选择自定 义(USER ->DEFINE),来定义编程使用的 CPU 类型。 支持大多数厂家生产的 FLASH 芯片, 如 AMD 公司 AM29 系列,INTEL 公司 28 系列, SST 公司 29\39\49 系列。英蓓特公司可免费提供新 Flash 芯片型号支持。 支持对 FLASH 进行空白检查、擦除、编程、文件校验、计算校验和、保护、上载。 支持指定扇区范围操作,不影响其它扇区内容。 支持 8 位、16 位和 32 位读写访问宽度。 支持 1 片、2 片及 4 片 FLASH 编程,编程文件无需劈分。 支持 Windows 98、2000、NT 及 XP 操作系统。 2.1.4 Embest EduKit-III 开发板 Embest EduKit-III 开发板是实验系统的主要硬件平台,它是英蓓特公司开发的一款全功能 A RM 开发板,基于 Samsung 公司的 S3C44B0X 处理器(ARM7TDMI),资源丰富。硬件系统包含 了嵌入式系统开发应用所需的大部分设备,如串口、以太网口、USB 口、音频输出、LCD 及 TSP 触摸屏、5*4 的小键盘、固态硬盘、大容量的 Flash 和 SDRAM 等等。用户不仅可以在该硬件平台 上完成实验系统提供的实验例子,还可以参考该平台设计自己的目标系统。 - 21 - 该硬件平台如下图所示: 图 2-5 实验系统硬件平台 Embest Arm EduKit II 开发板的基本资源如下: 电源:外部 5V 电源供电或者由 USB 接 PC 供电,电源指示 LED 以及 500mA 保险丝 1M×16bit Flash 4×1M×16bit SDRAM 4Kbit IIC BUS 的串行 EEPROM 2 个串口,其中一个为简单接口,一个为全接线接口,可跳接 RS232 MODEM 复位开关 两个中断按钮,两个 LED 外部 IDE 硬盘接口 LCD 及 TSP 触摸屏接口 20 针 JTAG 接口 USB 连接器 4×4 键盘接口 4 个 2×20PIN CPU 扩展接口 10M 以太网接口 8 段数码管 MICROPHONE 输入口 - 22 - IIS 音频信号输出口,可接双声道 SPEAKER 固态硬盘 16M×8bit 320*240 带触摸功能的显示屏 2.1.5 各种连接线与电源适配器 实验系统除了提供以上的组件以外,还提供了各种连接时候需要的电缆线。包括直通网线,U SB 线,串口线,并口线和两根 JTAG 线(分别是 20 针和 14 针接口)。实验系统还提供一个 5V 电源适配器(Embest Arm EduKit II 实验板用) 2.2 教学系统安装 Embest ARM 教学系统包括 Embest IDE 集成开发环境, Flash 编程器,Embest JTAG 仿真器, Embest EduKit-III 开发板、各种连接线及电源适配器。其中 Embest IDE 和 Flash 编程器是属 软件平台部分,其余属于硬件平台部分。 本章主要介绍如何安装实验系统的软件平台、如何搭建和如何进行软件平台与硬件平台的连 接。软件平台的搭建包括两个部分 1) Embest IDE 集成开发环境的安装 2) Embest Flash 编程器的安装 Embest IDE 集成开发环境安装(请首先阅读软件使用许可协议) 将 Embest IDE Pro for ARM 2004 version 光盘放入电脑光驱,系统自动弹出安装界面, 用户可以从弹出的界面安装软件;或打开光盘目录运行安装程序。如图 2-6 所示: 图 2-6 Embest IDE 安装界面首页图 选择安装相应语言版本软件,系统显示如图 2-7 所示: - 23 - 图 2-7 安装软件选择图 首先安装 Embest IDE Pro for ARM 2004,点击软件名运行安装程序,如下图: 选择软件安装类型: 图 2-8 安装程序启动图 - 24 - 图 2-9 定制安装界面 程序安装完之后,系统提示是否重新启动计算机,为了完成整个安装过程,建议重新启动计算 机。 启动计算机后,点击 Embest IDE 的图标 ARM 时,系统弹出注册窗口,如图 2-10 所示: 运行 Embest IDE。第一次使用 Embest IDE for 图 2-10 注册信息输入窗 用户如实填写注册信息,然后点击 Generate Key 的按钮,系统会在安装目录下的 Licenses 子目 录生成一个 key.dat 文件,把该文件通过 Email 或传真方式发送到 Licenses@embedinfo.com,用户将 会接收到返回的 License 文件,把附件中的 Licenses.dat 文件复制到安装目录的 Licenses 目录下,软 件即可正常工作。 Flash 编程器安装 参考图 2-7,选择 Embest Online Flash Programmer 运行安装程序,如下图: - 25 - 图 2-11 Flash 编程器安装界面图 用户按照安装步骤可正确安装 Flash 编程器。 软件安装完毕后,请详细阅读相关软件说明及软件使用手册。 下面介绍如何进行软件平台和硬件平台的连接。 实验软件平台和硬件平台的连接 如下图所示,PC 端与仿真器通过实验系统提供的并口线连接,仿真器和开发板通过一根 20 针 的 JTAG 线连接。 图 2-12 实验平台连接图 其中需要注意: 1) 开发板使用 5V DC 电源供电,建议使用实验系统提供的变压器 2) 仿真器侧面的 Jtag 跳线拨到 20 位置 3) 硬件平台最好预先参照 Embest EduKit-III 用户手册(在 Embest ARM 教学系统光盘中) 进行基本硬件检测 - 26 - 2.3 教学系统的硬件电路 2.3.1 概述 Embest EduKit-III 教学实验平台是一款功能强大的 32 位的嵌入式开发板,里面采用了 SAMSUNG 公司的以 ARM7TDMI-S 为内核的处理器 S3C44B0X,同时可以兼容 S3C2410,具有 JTAG 调试等功能。板上提供了一些键盘、LED 和串口等一些常用的功能模块,并且具有 IDE 硬件接口, CF 存储卡接口、以太网接口和 SD 卡接口等等,对用户在 32 位 ARM 嵌入式领域进行开发实验非 常方便。 2.3.2 功能特点 使用 CPU 扩展接口,可以使用 SAMSUNG 公司的 S3C44B0X 和 S3C2410; 系统核心板包括 SDRAM、CPU、核心电压模块、实时时钟、系统跳线、系统时钟、 核心板接口等; SDRAM 用量与 CPU 有关,2410 采用 64M,44B0 采用 8/16M 兼容芯片为 HY57V561620 或 HY57V641620; 完全自主设计的软硬件系统,可以支持 JTAG 仿真技术,支持 ADS、STD 和 IDE 等集成环境开发; 具有 2/4M 兼容的 Nor Flash 和 8/16/32/64/128M 兼容的 Nand Flash; 两个以太网口,一个为 44B0 和 4510 专用,另外一个为 MII 接口的 CPU 专用, 用到的芯片分别是 CS8900A 和 RTL8201; 具有 USB 接口电路; 具有串行口 2 个,可以跟上位机进行通讯; 内部包含采用 UDA1341TS 芯片的音频电路模块,方便进行音频调试实验; 内部包含 IIC 器件,采用支持 IIC 的 EEPROM—AT24C08; 显示部分包括 STN/TFT 兼容接口的彩色 LCD、LED 指示灯和 6 个数码管; 采用变阻器形式的 ADC 数据采集电路; 提供实时时钟控制实验; 提供触摸屏接口电路; 5×4 键盘,可以扩展至 64 键,使用芯片 SD7218; 用 PWM 控制的蜂鸣器电路,可以发出不同频率的声音; 提供用 I/O 控制的跑马灯实验; 提供由 MAX485 控制的 RS422 和 RS485 接口电路; 提供 CAN 接口电路,方便组装现场总线; 具有 IDE 硬盘接口、CF 存储卡接口、SD 卡接口和 PS2 接口; WDT 控制电路,提供 SPI 接口; - 27 - 包含红外线接口模块; 包含直流电机、步进电机模块; 具有采用扩展子板形式的 GPRS 模块电路和 GPS 模块电路; Embest EduKit-III 教学实验平台主要功能模块如下: IDE PCI 以 CPLD 调试接口 CF CARD接口 太 接 接口 口 网 CAN USB 接 口 接口 接口 接 CPLD NAND FLASH 口 BUFFER RTC POWER 8-SEG数码管 LCD SD CARD PS2 TSP 接 口 S3C44B0/S3C2410 直流 步进 接 电机 电机 口 接 口 AIN BUZZER 复位 LED Interrupt输入 输 入 JTAG 接 口 RS232 驱动器 RS422驱动 器 RS485驱动 器 IIS 控 调 试 电 源 UART接口 RS422接口 RS485接口 制 器 接 口 电 源 开 关 ADC 键 盘 接 口 接 口 IrDA 图 2-13 ARM 开发板功能模块 2.3.3 原理说明 1. 电源电路 电压设计采用 5V 输入主板,经电压稳压,提供 I/O 端口需要的电压 3.3V,在核心板上采用稳 压块供 CPU 内核电压 2.5V 或 1.8V。 具体电路如图所示: 图 2-14 3.3V 电源电路 - 28 - 图 2-15 2.5V 电源电路 2. 系统复位电路 为了提供性能优越的电源监视性能,我们选取了专门的系统监视复位芯片 IMP811S,该芯片性 能优良,可以通过手动控制系统的复位,同时还可以实时监控系统的电源,一旦系统电源低于系统 复位的阀值(2.9V),IMP811S 将会起作用,对系统进行复位。 电路图如下所示: 图 2-16 系统复位电路 3. 系统时钟电路 系统时钟源直接采用外部晶振,内部 PLL 电路,可以调整系统时钟,使系统运行速度更快。 图 2-17 S3C2410 中系统时钟电路 4. JTAG 接口电路 采用 ARM 公司提供的标准 20 脚 JTAG 仿真调试接口电路,芯片内部有 JTAG CORE,因此, 可以通过外部的 JTAG 调试电缆或仿真器和开发系统连接调试。 - 29 - JTAG 接口电路图如下: 图 2-18 JTAG 接口电路 5. 串口电路 系统带有两个串行接口,分别是 UART0 和 UART1,其中 UART1 复用为支持 RS485 和 RS422 的接口,另外还将其复用为 IRDA 红外模块。 串口电路图如下: 图 2-19 串口电路 6. 按键电路 我们在开发板上设计了 2 路按键电路,通过 2 个 CPU 的 GPIO 管脚各被 1 个 10k 的电阻上拉, 在一般情况下,该 GPIO 的管脚电平为高,一旦按键按下,GPIO 的管脚电平将为低,可以通过程序 轮询的模式或者中断的模式来获取 GPIO 的管脚电平的变化。电路原理图如下: - 30 - 图 2-20 按键电路 7. 5×4 键盘及 LED 显示电路 电路采用支持 IIC 总线协议的芯片 SD7218,该芯片能驱动 8 个 LED 数码管及扩展 64 位键盘。 电路图如下: 图 2-21 键盘及 LED 显示电路 - 31 - 8. 蜂鸣器电路及其 PWM 电路 新教学系统开发板提供的了能够通过 PWM 推动、可以发出不同频率声音的蜂鸣器。 电路图如下: 图 2-22 蜂鸣器电路 9. IIC 电路 支持一个多主控的 IIC 总线串行接口。一根串行数据线 SDA 和一根串行时钟线在总线 MASTER 和 SLAVE 设备间传递信息。SDA 和 SCL 都是双向信号线。在新教学系统开发板中,作 为 IIC MASTER 控制 AT2402 的读写。 IIC 电路图如下: 图 2-23 IIC 电路 10. FLASH 电路 采用 AMD 公司的 nor flash,容量 2/4M 兼容。舍弃原来的 INTEL strata flash。原因一是价格贵, 二是因为已经有一大容量的 NAND FLASH。 电路原理图: 图 2-24 nor flash 电路 - 32 - 11. 以太网接口电路 S3C44B0、S3C2410 等 CPU 本身并没有网络接口,但是,通过扩展网络接口的模式,我们提供 一个 cs8900a10M 的网络接口。为兼容其他 CPU 型号,主板上还设计了一个与 MII 接口对接的网络 芯片 RTL8201,为 10M/100M 兼容。电路原理图如下: 图 2-25 以太网接口电路 12. PS2 接口电路 为了有效支持数据输入的功能,新教学系统开发板通过 2 个 PS2 接口支持 PS2 键盘鼠标输入, 具体是采用一个 I/O 口与一个中断口。电路原理图: 图 2-26 PS2 电路 13.直流电机、步进电机电路 新教学系统提供了直流电机和步进电机控制功能。电路原理图: - 33 - 图 2-27 直流电机电路 图 2-28 步进电机电路 14. USB 接口电路 在 S3C2410 芯片里面集成 USB 模块,所以使用 S3C2410 的时候,可以直接利用其里面的 USB 模块。但是 S3C44B0 里面不包含 USB 模块,必须采用外接器件,开发板采用的 USB 接口器件是 USBN9603,该 USB 控制器由 NS 公司生产,支持 USB1.0、USB1.1 通信协议,带并行总线。它有 3 种工作模式即 Non-multiplexed parallel interface mode、Multiplexed parallel interface mode、 MICROWIRE interface mode,模式选择由管脚 MODE1、MODE0 决定。设计时把 MODE1,MODE0 接地,因此接口模式定义为无复用并口模式,在该模式中由于 DMA 没有使用,因此把 DACK 接高 电平。MCU 通过译码器生成的片选信号 USB_CS 对 USB 控制器进行选通,USBN9603 通过 USB_INT 对 MCU 发出中断请求。电路图如下: - 34 - 图 2-29 USB 信号处理电路 图 2-30 USB 接口电路 15. CF 卡接口电路 目前,CF 卡接口在 PDA 和各种手持设备中广泛应用,按照 CF 卡的规范,通用 CF 卡接口将 支持 3 种接口模式:IO 模式、MEMORY 模式和 TRUE IDE 模式。为了使得 ARM 开发板能够具 备读写 CF 卡的功能,新教学系统独立研发了支持上述全部 CF 卡接口模式的接口,新教学系统开 发板采用了 CPLD 来实现这些功能。电路原理图如下: - 35 - 图 2-31 CF 卡接口电路 16. Nand Flash NAND FLASH 芯片的出现,使得移动存储设备层出不穷,但是,由于目前市面 NAND FLASH 芯片缺货且价格高昂,新教学系统采用了 NAND FLASH 芯片来替代 SM 卡,本质上,两者的电路 是一致的。 具体电路原理图如下: 图 2-32 Nand Flash 接口电路 17. SD 卡接口电路 Security Digital 卡是目前应用越来越广泛的一类卡,为了支持该类卡的读写,新教学系统开发 板专门设计了一个接口电路。其中 S3C2410 里面集成了 SD 模块,但 S3C44B0X 却不提供。具体电 路参见下面电路原理图: - 36 - 图 2-33 SD 卡电路 18. 实时时钟 为了保持系统的状态数据,必须在系统断电后,通过备用电池供电,具体电路如下: 图 2-34 备用电池电路 19. IDE 接口电路 IDE 是 Integrated Device Electronics 的简称,即集成设备电子部件,是一种硬盘的传输接口。它 是由 Compaq 开发并由 Western Digital 公司生产的控制器接口。早期的 IDE 接口有两种传输模式, 一个是 PIO(Programming I/O)模式,另一个是 DMA(Direct Memory Access)。虽然 DMA 模式系 统资源占用少,但需要额外的驱动程序或设置,因此被接受的程度比较低。后来在对速度要求愈来 愈高的情况下,DMA 模式由于执行效率较好,操作系统开始直接支持,而且厂商更推出了愈来愈 快的 DMA 模式传输速度标准。IDE 采用了 40 线的单组电缆连接,在 IDE 的接口中,除了对 AT 总线 上的信号作必要的控制之外,基本上原封不动地送往硬盘驱动器。电路图如下: 图 2-35 IDE 电路 - 37 - 20. TSP 触摸屏控制电路 TSP 包括两个面电阻,即 X 轴面电阻,Y 轴面电阻,TSP 于是就有 4 个终端口,其接线如图。 在系统处于休眠状态时,Q1、Q2、Q3 处于截止,Q4 为导通;当触摸屏受到接触时,X 轴面电阻与 Y 轴面电阻在接触处导通,由于电阻值很小(几百欧左右),使在 EXINT2 处分压得低电平,产生中 断;MCU 通过对 I/O 口的控制使 Q1、Q4 导通 Q2、Q3 截止,AIN0 读取 X 轴坐标然后关闭 Q1、 Q4,使 Q2、Q3 导通,AEN1 读取 Y 轴坐标。系统得到坐标值后,关闭 Q1、Q2、Q3 打开 Q4,回 到初始状态,等待下一次接触。 S3C44B0X 采用外部中断 TSP_INT,以及 4 个通用 I/O 口,2 路 ADC 口来实现。而 S3C2410X 芯片已经集成这部分模块。 图 2-36 TSP 触摸屏控制电路 21. IIS 音频接口电路 IIS 即音频数据接口,它是 SONY、PHILIPS 等电子巨头共同推出的接口标准。IIS 接口电路如 下图所示,本系统把 IIS 接口与 PHILIPS 的 UDA1341TS 音频数字信号编译码器相连接,得到 MICROPHONE 音频输入通道和 SPEADER 音频输出通道。UDA1341TS 可把立体声模拟信号转化为 数字信号,同样也能把数字信号转换成模拟信号,并可用 PGA(可编程增益控制),AGC(自动增益 控制)对模拟信号进行处理;对于数字信号,该芯片提供了 DSP(数字音频处理)功能。在实际中, UDA1341TS 可广泛应用于 MD、CD、NoteBook、PC 和数码摄相机等。S3C44B0X 的 IIS 口可与 UDA1341TS 的 BCK、WS、DATAI、SYSCLK 相连。对于 UDA1341TS 的 L3 总线,它是该芯片工 作于微控制器输入模式时使用的,它包括 L3DATA、L3MODE、L3CLOCK 共三根接线,它们分别 表示为微处理器接口数据线、微处理器接口模式线,微处理器接口时钟线。通过这个接口,微处理 器能够对 UDA1341TS 中的数字音频处理参数和系统控制参数进行配置。但是 S3C44B0X 中没有设 该专用接口,可通过通用 I/O 口进行扩展。 图 2-37 IIS 音频接口电路 - 38 - 22. CAN 接口电路 采用芯片 SJA1000 扩展。 图 2-38 CAN 接口电路 23. RS422 与 RS485 将 UART1 复用为支持 RS485 和 RS422 的接口,RS232、RS422 和 RS485 是关于通讯的一个机 械和电气接口标准。RS422 至少分别有一个差分发送口和差分接收口,两节点通讯时,一方的发送 口与另一方的接收口相连、需两线、RS422 不能直接用于三电以上的直接互连,当然不能直接用总 线连接。RS485 的差分发送口与自身的差分接收口同相并连,多点间通过 RS485 只需一对线。RS422 的发送口如与其接收口同相并连,就变成 RS485,所以它们的电气参数必然完全相同。 图 2-39 RS422 与 RS485 电路 - 39 - 24. ADC 电路 S3C44BO 里面有 8 路 10 位的 ADC 转换器,其参考电压 2.5V,在开发板上提供了两路直流电 压测量电路,如下图,可调电阻 R1204 和 R1206 用于调整输入电压,AIN4 和 AIN2 是模拟电压输 入端口。 图 2-40 ADC 电路 25. CPLD 电路 系统中用 CPLD 器件扩展了 I/O,I/O 扩展方法是采用 8 根数据总线,片选信号线,锁存器,由 片选信号提供 I/O 口地址,锁存器保持从数据总线过来的值,形成 8 位寄存器。本系统共扩展了 16 个输入口,16 个输出口。 图 2-41 CPLD 电路 - 40 - 2.3.4 硬件结构 1. 元件布局图 Embest EduKit-III 教学实验平台元件布局图如下所示: 图 2-43 元件布局图 2. 跳线说明 Embest EduKit-III 教学实验平台跳线分布如下图: - 41 - 图 2-44 跳线分布图 Embest EduKit-III 教学实验平台跳线说明表如下: 表 1-1 系统跳线说明 标号 跳线器 1 2 3 SW402 nFWE WE CPLD_NFWE SW403 nFRE RE CPLD_NFRE SW501 RS232TXD0 TXD0 RS422TXD SW502 RS232RXD0 RXD0 RS422RXD SW503 RS232TXD1 TXD1 RS485_TXD SW504 RS232RXD1 RXD1 RS485_RXD SW505 RS232RTS1 RTS1 RS485_RTS SW506 TXD1 IrDA_TXD1 --- SW601 D+ U SP1 SW603 D- U DN1 SW602 U U U SW604 U U U SW605 U USB_EN --- SW606 U VDD33 --- BACKLIGHT SW1202 LCD 背光选择 步进电机选择 SW1203 直流电机选择 注: 表中符号“U”表示未定义,符号“---”表示不存在 3. 连接器说明 Embest EduKit-III 教学实验平台连接器如下图: 使用 S3C2410A 子 板 1.2 短接 1.2 短接 使用 S3C44b0x 子板 2.3 短接 2.3 短接 1.2 短接 1.2 短接 1.2 短接 1.2 短接 2.3 短接 断开 跳线短接 短接 短接选择 短接选择 1.2 短接 1.2 短接 2.3 短接 断开 跳线短接 短接 短接选择 短接选择 - 42 - 图 2-45 系统连接器分布图 EMBEST ARM EDVKIT Ⅱ教学实验平台接线器说明如下表所列: 连接器 J301 J401 J501 J502 J503 J504 J505 J506 J603 说明 PACK 接口 SD 卡接口 RS422 接口 RS485 接口 CAN1 接口 CAN2 接口 UART0 接口 UART1 接口 ADC 接口 表 1-2 系统连接器说明 备注 可以连接 S3C44B0_PACK 和 S3C2410_pack SD 模式 RS232 电平 RS232 电平(复用) - 43 - J604 USB 接口 J605 USB 接口 J607 PS2 接口 J609 JTAG 接口 J610、J611 IIS 接口 J701 以太网接口 J801 CPLD 调试接口 J901 IDE 接口 J902 CF 卡接口 J903 PCI 接口 J1201 电源插座 USB HOST USB DEVICE 用于仿真调试 包括 IIS IN 和 IIS OUT 10M 接口 CPLDPRG 10 针接口 普通 40 针接口 非标准 PCI 接口(系统总线扩展) 直流电源输入(5V) 2.3.5 硬件资源分配 1. 外围器件地址分配 片选信号 NGCS0 表 1-3 外围器件地址分配表 选择的接口或器 片选控制寄存 件 器 FLASH BANKC ON0 S3C44B0 地址范围 0X0000_0000~0X01BF_F FFF NGCS6 nGCS1 A22 A21 A20 0 0 0 0 0 1 0 1 0 0 1 1 SDRAM USB_CS CAN_CS CF_CS0 CF_CS1 BANKCON6 0X0C00_0000~0X0DF_FFFF BANKCON1 0X0200_0000~0X020F_FFFF 0X0210_0000~0X021F_FFFF 0X0220_0000~0X022F_FFFF 0X0230_0000~0X023F_FFFF - 44 - 1 0 0 1 0 1 保留 LCD_CD 0X0250_0000~0X025F_F FFF 1 1 0 1 1 1 A22 A21 A20 扩展输出寄存器 0 0 0 1 0X0400_0000~0X040F_F FFF 扩展输入寄存器 0 0 1 1 扩展输入寄存器 0 1 0 2 0X0410_0000~0X041F_FFFF 0X0420_0000~0X042F_FFFF nGCS2 0 1 1 CF_MMRD/WR BANKCON2 0X0430_0000~0X043F_FFFF 1 0 0 CF_IORD/WR 0X0440_0000~0X044F_FFFF 1 0 1 NO USE 0X0800_0000~0X09FF_F FFF 1 1 0 NO USE 0X0A00_0000~0X0BFF_FFFF 1 1 1 NO USE 0X0E00_0000~0X1FFF_FFFF NGCS3 2. 中断分配 ETHERNET BANKCON3 0X0600_0000~0X07FF_FFFF 表 1-4 中断分配表 EINT0 S3C2410A S3C44B0X BUT_INT1 按钮或外部扩展槽 EINT0 通过 CPLD 器件扩展出 8 个中断 CAN_INT/PS2_INT2/TSP_INT/IDE_I NT/CF_INT,其余保留 - 45 - EINT1 KEY_INT 键盘 EINT1 USB_INT USB 专用 EINT2 通过 CPLD 器件扩展出 8 个中断 CAN_INT/PS2_INT2/TSP_INT/I DE_INT/CF_INT,其余保留 EINT2 KEY_INT 键盘 EINT3 PS2_INT1 PS2 鼠标 EINT3 NET_INT 网络 EINT9 NET_INT 网络 EINT4 PS2_INT1 PS2 鼠标 EINT16 CPLD 保留 EINT5 CPLD 保留 EINT17 CPLD 保留 EINT6 BUT_INT1 按钮或外部扩展槽 EINT18 SD_CD SD 卡专用 EINT7 BUT_INT2 按钮或外部扩展槽 EINT11 BUT_INT2 按钮或外部扩展槽 如上,本系统通过 CPLD 器件将一个 CPU 中断扩展为 8 个中断,原理是:将 8 个输入 I/O 一 方面经过一与门,另一方面分别接到 CPLD 扩展寄存器的 8 个位上,与门输出接到 CPU 的一外部 中断口,当 8 个输入 I/O 由一个跳为“0”时,CPU 的外部中断口收到中断请求,CPU 响应请求并 读外部扩展寄存器的值,判断是哪一根线被拉低。 3. I/O 口分配 ●S3C44B0X I/O 口分配 表 2-3 I/O 端口 A 端口 A 管脚功能 端口 A PA0 ADDR0 PA4 PA1 ADDR16 PA5 PA2 ADDR17 PA6 PA3 ADDR18 PA7 PCONA 寄存器地址:0X01D20000 PDATA 寄存器地址:0X01D20004 PCONA 复位默认值:0X1FF 管脚功能 ADDR19 ADDR20 ADDR21 ADDR22 端口 A PA8 PA9 管脚功能 ADDR23 ADDR24 端口 B PB0 管脚功能 SCKE 表 1-6 端口 B I/O 分配表 端口 B PB4 管脚功能 OUT(ALE) 端口 B PB8 管脚功能 NGCS3 - 46 - PB1 SCLE PB5 PB2 nSCAS PB6 PB3 nSRAS PB7 PCONB 寄存器地址:0X01D20008 PDATB 寄存器地址:0X01D2000C PCONB 复位默认值:0X7FF OUT(CLE) nGCS1 NGCS2 PB9 PB10 OUTPUT (NFCE) CAN_CS 表 1-7 端口 C I/O 分配表 端口 C 管脚功能 端口 C PC0 OUT (XMON) PC6 PC1 OUT (YPON) PC7 PC2 OUT (XMON) PC8 PC3 OUT (YPON) PC9 PC4 VD7 PC10 PC5 VD6 PC11 PCONC 寄存器地址:0X01D20010 PDATC 寄存器地址:0X01D20014 PUPC 寄存器地址: 0X01D20018 PCONC 复位默认值:0X0FF0FFFF 管脚功能 VD5 VD4 OUTPUT (LED1) OUTPUT (LED2) RTS1 CTS1 端口 C PC12 PC13 PC14 PC15 管脚功能 TXD1 RXD1 RTS0 CTS0 表 1-8 端口 D I/O 分配表 端口 D 管脚功能 端口 D PD0 VD0 PD3 PD1 VD1 PD4 PD2 VD2 PD5 PCOND 寄存器地址:0X01D2001C PDATD 寄存器地址:0X01D20020 PUPD 寄存器地址:0X01D20024 PCOND 复位默认值:0X0AAAA 管脚功能 VD3 VCLK VLINE 端口 D PD6 PD7 管脚功能 VM VFRAME 端口 E PE0 PE1 管脚功能 OUT (PS2_IO) TXD0 表 1-9 端口 E I/O 分配表 端口 E 管脚功能 端口 E 管脚功能 PE3 PE4 OUT (PWM1) OUT (PWM2) PE6 PE7 OUT (L3DATA) OUT (L3MODE) - 47 - PE2 RXD0 PE5 PCONE 寄存器地址:0X01D20028 PDATE 寄存器地址:0X01D2002C PUPE 寄存器地址:0X01D20030 PCONE 复位默认值:0X25529 OUT (L3CLK) PE8 表 1-10 端口 F I/O 分配表 端口 F 管脚功能 端口 F PF0 IICSCL PF3 PF1 IICSDA PF4 PF2 nWAIT PF5 PCONF 寄存器地址:0X01D20034 PDATF 寄存器地址:0X01D20038 PUPF 寄存器地址:0X01D2003C PCONF 复位默认值:0X00252A 管脚功能 OUT (LED4) OUT (LED3) IISLRCLK 端口 F PF6 PF7 PF8 表 1-11 端口 G I/O 分配表 端口 G 管脚功能 端口 G PG0 EXINT0 PG3 PG1 EXINT1 PG4 PG2 EXINT2 PG5 PCONG 寄存器地址:0X01D20040 PDATG 寄存器地址:0X01D20044 PUPG 寄存器地址: 0X01D20048 PCONG 复位默认值:0X0FFFF 管脚功能 EXINT3 EXINT4 EXINT5 端口 G PG6 PG7 ●S3C2410A I/O 口分配 端口 A PA0 PA1 PA2 PA3 PA4 管脚功能 ADDR0 ADDR16 ADDR17 ADDR18 ADDR19 表 1-12 端口 A I/O 分配表 端口 A 管脚功能 端口 A PA8 PA9 PA10 PA11 PA12 ADDR23 ADDR24 ADDR25 ADDR26 nGCS1 PA16 PA17 PA18 PA19 PA20 CODECLK 管脚功能 IISSDO IISSDI IISSCLK 管脚功能 EXINT6 EXINT7 管脚功能 NGCS5 CLE ALE nFWE nFRE - 48 - PA5 ADDR20 PA13 PA6 ADDR21 PA14 PA7 ADDR22 PA15 PCONA 寄存器地址:0x56000000 PDATA 寄存器地址:0x56000004 PCONA 复位默认值: 0x7FFFFF nGCS2 nGCS3 NGCS4 PA21 PA22 表 1-13 端口 B I/O 分配表 端口 B 管脚功能 端口 B 管脚功能 端口 B PB0 TOUT0 (PWM1) PB4 PB1 TOUT1 (PWM2) PB5 PB2 OUT (L3MODE) PB6 PB3 OUT (L3DATA) PB7 PCONB 寄存器地址:0x56000010 PDATB 寄存器地址:0x56000014 PCONB 复位默认值:0x0: OUT (L3CLK) OUT (D.OFF) RESERVE RESERVE PB8 PB9 PB10 表 1-14 端口 C I/O 分配表 端口 C 管脚功能 端口 C 管脚功能 端口 C PC0 LEND PC6 PC1 VCLK PC7 PC2 VLINE PC8 PC3 VFRAME PC9 PC4 VM PC10 PC5 LCDVF0 PC11 PCONC 寄存器地址:0x56000020 PDATC 寄存器地址:0x56000024 PUPC 寄存器地址:0x56000028 PCONC 复位默认值: 0x0 LCDVF1 LCDVF2 VD0 VD1 VD2 VD3 PC12 PC13 PC14 PC15 端口 D PD0 管脚功能 VD8 表 1-15 端口 D I/O 分配表 端口 D PD6 管脚功能 VD14 端口 D PD12 nRSTOUT nFCE 管脚功能 RESERVE nXDACK0 nXDREQ0 管脚功能 VD4 VD5 VD6 VD7 管脚功能 VD20 - 49 - PD1 VD9 PD7 PD2 VD10 PD8 PD3 VD11 PD9 PD4 VD12 PD10 PD5 VD13 PD11 PCOND 寄存器地址:0x56000030 PDATD 寄存器地址:0x56000034 PUPD 寄存器地址:0x56000038 PCOND 复位默认值: 0x0 VD15 VD16 VD17 VD18 VD19 PD13 PD14 PD15 表 1-16 端口 E I/O 分配表 端口 E 管脚功能 端口 E PE0 I2SLRCK PE6 PE1 I2SSCLK PE7 PE2 CDCLK PE8 PE3 I2SSDI PE9 PE4 I2SSDO PE10 PE5 SDCLK PE11 PCONE 寄存器地址:0x56000040 PDATE 寄存器地址:0x56000044 PUPE 寄存器地址:0x56000048 PCONE 复位默认值: 0x0 管脚功能 SDCMD SDDAT0 SDDAT1 SDDAT2 SDDAT3 SPIMISO0 端口 E PE12 PE13 PE14 PE15 表 1-17 端口 F I/O 分配表 端口 F 管脚功能 端口 F 管脚功能 端口 F PF0 EINT0 PF3 EINT3 PF6 PF1 EINT1 PF4 OUT (LED1) PF7 PF2 EINT2 PF5 PCONF 寄存器地址:0x56000050 PDATF 寄存器地址:0x56000054 PUPF 寄存器地址:0x56000058 PCONF 复位默认值:0x0 OUT (LED2) 表 1-18 端口 G I/O 分配表 VD21 VD22 VD23 管脚功能 SPIMOSI0 SPICLK0 IICSCL IICSDA 管脚功能 OUT (LED3) OUT (LED4) - 50 - 端口 G 管脚功能 端口 G PG0 RESERVE PG6 PG1 EXINT9 PG7 PG2 nSS0 PG8 PG3 EXINT11 PG9 PG4 LCD_PWREN PG10 PG5 SPIMISO1 PG11 PCONG 寄存器地址:0x56000060 PDATG 寄存器地址:0x56000064 PUPG 寄存器地址:0x56000068 PCONG 复位默认值: 0x0 管脚功能 SPIMOSI1 SPICLK1 EINT16 EINT17 EINT18 OUTPUT 端口 G PG12 PG13 PG14 PG15 表 1-19 端口 H I/O 分配表 端口 H 管脚功能 端口 H PH0 nCTS0 PG4 PH1 nRTS0 PG5 PH2 TXD0 PG6 PH3 RXD0 PG7 PCONH 寄存器地址:0x56000070 PDATH 寄存器地址:0x56000074 PUPH 寄存器地址:0x56000078 PCONH 复位默认值: 0x0 管脚功能 TXD1 RXD1 nRTS1 nCTS1 端口 H PG8 PG9 PG10 管脚功能 XMON nXPON YMON nYPON 管脚功能 OUTPUT CLKOUT0 RESERVE 2.4 集成开发环境使用说明 2.4.1 Embest IDE 主框架窗口 在 Windows 98/NT/2000/XP 环境中运行 Embest IDE for ARM(主应用程序为 EmbestIDE.exe) 后,即进入 Embest IDE 集成开发环境。Embest IDE 集成开发环境主界面见下图。 - 51 - 图 2-27 Embest IDE 主界面图 Embest IDE 集成开发环境的主框架窗口由标题栏、菜单条、工具条、工程管理窗口、源文件窗 口、输出窗口和状态条等组成。标题栏显示当前打开的文件名。工程管理窗口用于显示当前打开工 程的有关信息,包括工程的文件组成等内容。源文件窗口用于文本编辑器进行 C、汇编等源文件的 编辑以及调试时的源代码执行跟踪。输出窗口输出编译信息、调试信息、命令行输入输出和输出一 些查询结果信息等。主框架窗口的最底端为状态栏,用于显示关于菜单条、工具条等的简单说明信 息以及文本编辑器中当前光标所在的行列号等。用户可以通过鼠标拖动,将菜单条、工具条、工程 管理窗口、源文件窗口和输出窗口等随意更换顺序和位置,也可以隐藏其中的某些窗口。在调试过 程中,可以根据需要打开和关闭寄存器窗口、函数栈窗口、变量窗口、存储器窗口、数据观察窗口 以及反汇编窗。 2.4.2 工程管理 1. 工程管理介绍 在 Embest IDE 集成开发环境中,工程是一个非常重要的概念,它是用户组织一个应用的所有源 文件、设置编译链接选项、生成调试信息文件和最终的目标 Bin 文件的一个基本结构。一个工程管 理一个应用的所有源文件、库文件、其它输入文件,并根据实际情况进行相应的编译链接设置,一 个工程须生成一个相对应的目录,以进行文件管理。 Embest IDE 工程管理提供以下功能: 将所有源文件组成一个有机整体,实现一个具体的应用。在工程管理窗口中可方便地 管理组成工程的所有源文件(见下图)。 - 52 - 图 2-28 工程管理窗及右键菜单 以工程为单位定义设置应用程序的各选项,包括目标处理器和调试设备的选择与设 置,调试相关信息的配置,以及编译、汇编、链接等选项的设置等。系统提供一个专 门的对话框来设置这些选项。 提供 build 菜单和工具按钮,让用户轻松进行工程的编译、链接。编译、链接信息输 出到输出窗口中的 Build 标签窗中(见下图),编译链接出现的错误,通过鼠标左键双击 错误信息提示行来定位相应的源文件行。 图 2-29 编译链接输出子窗口 一个应用工程编译链接后根据编译器的设置生成相应格式的调试信息文件,调试通过 的程序转换成二进制格式的可执行文件后最终在目标板上运行。 2. 工程的创建 工程是置于工作区之中进行管理的,因此在创建一个工程的同时,会创建一个工作区。操作过 程: 1) 点击菜单项 File > New Workspace,系统弹出一个对话框,如下图所示。 - 53 - 图 2-30 创建一个新工程 2) 在 Project name 框中输入新建工程名,Location 框中输入该工程要保存的目录路径,或点击 选择要保存的目录路径。 3) 点击 OK 按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作 区窗口将打开该工作区和工程。 也可在一个打开的工作区窗口中,利用右键菜单中的“Add New Project to Workspace…”来创 建一个新工程,其操作同以上操作相同,只是创建的工程也将加入当前工作区。 3. 建立一个新的源文件 点击菜单项 File > New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第 一行,用户即可编辑输入源文件代码。 默认情况下,在用户编辑输入时,按 C 语法来进行颜色加 亮显示。编辑完后,保存该文件。 4. 工程中文件的加入 选择 Project 菜单中 Add To Project>Files 命令,或单击工程管理窗口中的相应右键菜单命令, 弹出文件选择对话框,在工程目录下使用 CTRL 键同时选择要加入的源文件: 图 2-31 加入源文件到工程中 5. 设置活动工程 在一个工作区中可以存在几个同时打开的工程,但只有一个工程处于活动状态,处于活动状态 的工程才可以作为调试工程。在工作区窗口中,处于活动状态的工程,其工程图标将显示为加亮彩 色。如图 2-32 所示。 - 54 - 图 2-32 彩色图标及右键菜单设置活动工程 在工作区窗口中,选中要设置为活动状态的工程,点击鼠标右键,弹出右键菜单,选择 Save as Active Project 项,可将该工程设置为活动状态,如图 2-32 所示;或选中要设置为活动状态的工程, 点击菜单项 Project > Set Active Project,选择工程名即可将相应工程设置为活动状态。 2.4.3 工程基本配置 1. 处理器配置 选择菜单项 Project > Settings…或快捷键 Alt+F7,弹出工程设置对话框。在工程设置对话框中, 选择 Processor 设置对话框,如下图,可进行目标板所用处理器的配置。 图 2-33 处理器配置对话框 用户选择对应的工程文件名进行相应的配置。图中各项设置定义如下: - 55 - 处理器模块(CPU Module)选择当前所使用的处理器模块,不同的处理器模块将支持不同的 处理器系列,目前 Embest IDE for ARM 支持 ARM7、ARM9 核系列处理器。 处理器系列(CPU Family)选择用户使用的处理器所属处理器系列。 处理器成员(CPU Member)设置处理器系列中具体的处理器成员。 字节排列方式(Endian)设置该处理器当前所支持的存储区字节排列方式是大字节结尾(Big Endian)还是小字节结尾方式(Little Endian)。 处理器制造商(Peripheral Maker)选择处理器生产厂家,如果找不到正在使用的处理器的生 产厂家,可以不选择,不影响任何调试功能。 处理器型号(Peripheral Chip)选择相应的处理器型号,如果找不到正在使用的处理器型号, 可以不选择,不影响任何调试功能。 编译工具(Build Tools)设置该处理器对应的编译链接器,目前 Embest IDE 支持 GNU 编译链 接工具,同时也兼容 ARM SDT 2.51 编译链接工具。 Embest IDE for ARM 支持 ARM 核系列处理器。开发 ARM7 核系列处理器,按照图 2-33 中设 置;开发 ARM9 核系列处理器,可依照图 2-33 设置作相应的改变。 2. 仿真器配置 选择菜单项 Project>Settings…,弹出工程设置对话框。在工程设置对话框中,选择 Remote 设 置对话框,如下图,可进行仿真器的连接配置。 图 2-34 仿真器的连接配置 在该对话框中,有两项设置: 远程连接设备(Remote device)设置连接的调试设备,例如 Embest IDE for ARM 支持英蓓特 公司的 Embest Emulator for ARM、Embest PowerICE for ARM 和 Embest UnetICE for ARM。使用 Embest Emulator for ARM 调试 ARM7 核系列处理器,该处设置成“jtagarm7”仿真器;调试 ARM9 核系列的处理器,该处设置成“jtagarm9”仿真器;Embest PowerICE for ARM 调试 ARM7 核系列处 理 器 , 该 处 设 置 成 “ PowerICEARM7 ” 仿 真 器 ; 调 试 ARM9 核 系 列 的 处 理 器 , 该 处 设 置 成 “PowerICEARM9”仿真器;使用 Embest UnetICE for ARM 调试 ARM7 或 ARM9 核系列处理器时, 只需选择 UnetICE 即可,仿真器自动识别目标 CPU 是 ARM7 还是 ARM9 处理器;如果使用 Embest IDE 软件仿真器调试 ARM7 核系列处理器则该处设置成“simarm7”。相应地在下面的信息框中将显 示相应的仿真器信息,如图 2-34 所示。 - 56 - 调试下载速度(Speed)设置仿真器的下载调试速度。该设置只有仿真器支持调试下载速度可 选时有效。目前 Embest JTAG 仿真器都支持对下载调试速度进行调节,一般情况下配置为低速(Low Speed)时的下载速度大概为 25Kbyte/s;而全速(Full Speed)选项则是对应仿真器的最高下载调试 速度,如果 Embest PowerICE for ARM 约为 120Kbyte/s,Embest UnetICE for ARM 下载调试速度约 为 600Kbyte/(s 实验室)。根据仿真器的不同,提供的下载调试速度可选级别也不同,可选为全速(Full Speed)、高速(High Speed)、中速(Medium Speed)、低速(Low Speed)如图 2-35 所示: 图 2-35 Embest PowerICE for ARM 仿真器支持下载速度可选 通讯类型(Communication type)设置该仿真器与主机使用的连接方式和连接到的主机通讯口, 例如 Embest Emulator for ARM 使用并口连接,所以此处设置为“PARALLEL”。 通讯口(Parallel Port)按实际连接到主机通讯方式进行设置。 3. 调试设置 软件调试相关设置在工程项目的 Setting 对话框窗中调试属性页完成。调试设置有三个类别选择 页,分别为调试常规(General)信息配置页、下载(Download)信息配置页和内存映像(Memory Map) 配置页。 图 2-36 为调试常规信息配置页界面: - 57 - 图 2-36 常规调试属性配置页 符号文件栏(Symbol file)用于输入待调试的符号文件名字及其目录。符号文件含有调试信息 内容,常见的有 Elf 格式、Coff 格式,提供调试所需要调试信息。本文件空缺时,用户只能进行汇 编级调试。 系统连接目标后的行为(Action after connected)有三种方式可以选择: 无任何行为(None)表示连接后系统无任何行为。 自动下载可选项(Auto download)用于设置在连接目标后是否自动下载设定的下载文件,当 设置选取时,将在连接目标后自动下载设定的下载文件。 命令脚本可选项(Command script)用于选取在系统连结目标板后自动完成一系列命令的命令 脚本文件,可辅助完成自动化调试。 图 2-37 为下载信息配置页界面: - 58 - 图 2-37 下载信息属性配置页 下载文件栏(Download file)用于输入下载到目标系统上的可执行文件及其目录,此文件为在 目标系统上执行的文件,文件格式可以是 ELF 格式或者是 Binary 格式,系统会自动将 ELF 格式文 件转换为 Binary 格式后下载。 下载校验可选项(Download verify)用于设置下载文件下载时候是否自动校验下载是否正确, 当设置选取时,将自动比较下载后的内存文件是否和原文件一致。 下载文件地址栏(Download address)用于输入下载文件在目标系统上的起始存储地址,下载 的文件将从该地址开始顺序存储。 程序执行起始点(Execute program from)有三种方式可以选择: 不关注(Don’t care)表示系统在完成下载后会不会修改 PC 值。 下载地址可选项(Download address)用于设置下载文件后系统是否将 PC 值设置到程序下载 的起始地址,若设置,系统在完成下载后会自动将 PC 值设置到程序下载的起始地址。 程序入口点可选项(Program entry point)用于设置下载文件后系统是否将 PC 值设置到程序 运行入口地址,若设置,系统在完成下载后会自动将 PC 值设置到程序运行入口地址。 执行至符号输入栏(Execute until)用于设置下载文件后目标系统需要自动运行到的符号处。 图 2-38 为内存映像文件配置页界面: - 59 - 图 2-38 内存映像文件配置页页 使用内存映像文件单(Use map file)用于设置在调试过程中使用内存映像文件来控制内存读写, 若选取则在调试过程中读写内存均依据内存映像文件内设定的内存范围和属性。 4. 目录配置 选择工程配置(Project Settings)对话框的目录(Directory)页面进行目录配置。如果希望跟 踪驱动函数库和部件函数库中的程序,可以在此添加其源文件目录,如下图: 图 2-39 工程配置对话框目录页面 - 60 - 5. 编译配置 GNU Tools for ARM 编译器的 Compiler 属性页如图 1-40 所示,该属性页中的命令行开关选项用 于 C 编译器和 C++编译器,用户的所有设置显示在 Compile Options 的编辑框中,工程在选定相应 的 Build Tools 时,系统提供缺省设置。命令开关选项格式如下: [Opt-1] [Opt-2] … $(SOURCE_FILE) … [Opt-n] … –o[Path]$(OBJ_FILE) 用户可以手工输入、修改开关选项,但必须注意保留每个 Option 之间的空格,并且不得改变和 删除$(SOURCE_FILE)和$(OBJ_FILE)宏,它们分别代表源文件和目标文件名称。系统在执行编译命 令行时,将自动替换这两个宏。命令行开关选项中所涉及的所有相对目录,都是相对工程文件(pjf 文件)所在的目录,该约定,也适合汇编器和链接器的命令行开关选项设置。 编译设置有五个类别选择页,分别为编译常规信息配置页(General)、警告信息配置页(Warning Options)、输出调试符号文件格式配置页(Debug/Optimisation)、与目标板相关的配置页(Target Specific Options)和代码生成选项配置页(Code Generation Options)。 图 2-40 为工程编译 General 选项设置属性页。 Include Directories:指明头文件搜索路径。 Object file location:指明编译器编译源文件后,目标文件所在位置如果该目录不存在,编译器 运行时,系统将创建该目录,目录中不能包含空格字符。 Preprocessor Definitions:进行预编译宏的定义,每个宏之间用逗号分割,宏的名称不能包含空 格字符。 图 2-40 工程编译 General 选项设置属性页 图 2-41 为工程编译 Warning Options 选项设置属性页。 Suppress Warnings:-w 选项,编译源文件时,禁止所有警告信息的输出提示。 A variable is unused:-Wunused 选项,当变量被定义但未被使用时,报警告。 Unqualified pointer cast:-Wcast-qual 选项,当有未加限制的指针转化,报警告。 Incompatible func cast:-Wbad-function-cast 选项,当发生不兼容的函数赋值时,报警告。 Confusing type conversions:-Wconversion 选项,类型转换发生歧义时警告。 Inlined function cannot be inlined:-Winline 选项,当内联函数不能实现内联时警告。 - 61 - One local variable shadows another:-Wshadow 选项,当一个局部变量与另一个局部变量发生 混淆时,报警告。 Automatic variables are uninitialized:-Wuninitialized 选项,当出现未初始化的变量时,报警告。 Alignment increased when pointer cast:-Wcast-align 选项,当出现字节不能对齐的赋值时,报 警告。 Trigraphs encountered:-Wtrigraphs 选项,当源代码(不包括注释)中出现 trigraphs 时,报警 告。 Missing Declarations:-Wmissing-declarations 选项,当出现为被声明的全局函数时,报警告。 ANSI C extension:-pedantic 选项,输出所有在严格兼容 ANSI C 时出现的警告。 图 2-41 工程编译 Warning Options 选项设置属性页 图 2-42 工程编译 Debug/Optimisation 选项设置属性页。 Generate default debug format output:-g 选项。 Generate DWARF-1 format debug output:-gdwarf 选项。 Generate DWARF-2 debug output:-gdwarf-2 选项。 Generate extended DWARF-1 format debug output:-gdwarf+ 选项。 Optimization Options:优化选项,分五个档次。 - 62 - 图 2-42 工程编译 Debug/Optimisation 选项设置属性页 图 2-43 为工程编译 Target Specific Options 选项设置属性页。 ARM only(Default):编译器缺省编译模式,生成 ARM 指令集的目标代码。 ARM interworking:-mthumb-interwork 选项,生成 ARM 指令集的目标代码,支持两种指令之 间的函数调用。 Thumb only:-mthumb 选项,生成 THUMB 指令集的目标代码。 Thumb interwork:-mthumb –mthumb-interwork 组合选项,生成 THUMB 指令集的目标代码, 支持两种指令之间的函数调用。 Little endian mode(Default):-mlittle-endian 选项,编译器缺省编译模式,生成 Little Endian 模式的目标码。 Big endian mode:-mbig-endian 选项,生成 Big Endian 模式的目标码。 Hardware FP instructions:-mhard-float 选项,使用硬件浮点指令。 Lib call for FP operations;-msoft-float 选项,调用函数库来执行浮点运算。 Use the 26bit version of APCS:-mapcs-26 选项,使用 26bit 的 APCS(ARM Procedure Calling Standard)。 Generate APCS conformant stack frames:-mapcs-frame 选项,使用 APCS 标准构造堆栈。 Specify the name of the target CPU:给编译器指定特定的 ARM 处理器。 - 63 - 图 2-43 工程编译 Target Specific Options 选项设置属性页 图 2-44 为工程编译 Code Generation Options 选项设置属性页。 Compile just for ANSI C: -ansi 选项,只编译 ANSI C 格式的源文件。 Use the same size for double as for float:-fshort-double 选项,分配给 double 变量和 float 变量的 长度相同。 Use the smallist fitting integer to hold enums:-fshort-enums 选项,使用最短字节的整型数表示 枚举值。 Pretend that host and target use the same FP format:-fpretend-float 选项,默认主机和目标几使 用同样的浮点格式。 Do not recognise any builtin functions:-fno-builtin 选项,忽略编译器内置的函数。 Do not search the system include directories:-nostdinc 选项,搜索头文件时,忽略系统头文件 目录。 Do not put uninitialized globals in the common section:-fcommon 选项,不将未经初始化的全 局变量放在公共数据段。 - 64 - 图 2-44 工程编译 Code Generation Options 选项设置属性页 6. 汇编选项设置 GNU Tools for ARM 编译器的 Assembler 属性页如图 1-45 所示,该属性页中的命令行开关选项 用于汇编器,用户的所有设置显示在 Assemble Options 的编辑框中,工程在选定相应的 Build Tools 时,系统提供缺省设置。命令开关选项格式如下: [Opt-1] [Opt-2] … $(SOURCE_FILE) … [Opt-n] … –o[Path]$(OBJ_FILE) 用户可以手工输入、修改开关选项,但必须注意保留每个 Option 之间的空格,并且不得改变和 删除$(SOURCE_FILE)和$(OBJ_FILE)宏,它们分别代表源文件和目标文件名称。系统在执行汇编命 令行时,将自动替换这两个宏。 汇编设置有四个类别选择页,分别为常规信息配置页(General)、代码生成选项配置页(Code Generation Options)、与目标板相关的配置页(Target Specific Options)和警告信息配置页(Warning Options)。 图 2-45 为工程汇编 General 选项设置属性页。 Include Directories:-I 选项,指明头文件搜索路径。 Object file location:目标文件生成位置,指明编译器编译源文件后,目标文件所在位置,如果 该目录不存在,编译器运行时,系统将创建该目录,目录中不能包含空格字符。 Preprocessor Definitions:预编译宏的定义,每个宏之间用逗号分割,宏的名称不能包含空格字 符。 - 65 - 图 2-45 工程汇编 General 选项设置属性页 图 2-46 为工程汇编 Code Generation 选项设置属性页。 Generate DWARF-2 debugging information:-gdwarf2 选项。 Generate listing file:-a 选项,输出源文件。 Keep local symbols:-L 选项,保留局部符号。 Assemble in MRI compatibility:-M 选项,在兼容 MRI 模式下编译源文件。 Strip local absolute symbols:--strip-local-absolute 选项。 图 2-46 工程汇编 Code Generation 选项设置属性页 - 66 - 图 2-47 为工程汇编 Target Specific Optionsl 选项设置属性页。 Allow any instruction(Default):编译器缺省编译模式,可编译 ARM 指令集和 THUMB 指令 集的汇编源文件。 Only allow thumb instructions:-mthumb 选项,只编译 THUMB 指令集的汇编源文件。 Make the assembled code as support interworking:-mthumb-interwork 选项,生成的目标代码, 支持两种指令之间的函数调用。 Little endian mode(Default):-EL 选项,编译器缺省编译模式,生成 Little Endian 模式的目标 码。 Big endian mode:-EB 选项,生成 Big Endian 模式的目标码。 Use the 32bit APCS:-mapcs-4 选项,使用 32bit 的 APCS(ARM Procedure Calling Standard)。 Use the 26bit APCS:-mapcs-26 选项,使用 26bit 的 APCS。 Fpa10 FP architecture:-mfpa10 选项。 Fpa11 FP architecture:-mfpa11 选项。 No FP multiple instructions:-mfpe-old 选项,不使用浮点乘法运算指令。 No FP instructions:-mno-fpu 选项,不使用任何浮点运算指令。 The code is position independent or reentrant:-mapcs-reentrant 选项。 图 2-47 工程汇编 Target Specific Optionsl 选项设置属性页 图 2-48 工程汇编 Warning Options 选项设置属性页。 Suppress Warnings:-W 选项,编译源文件时,禁止所有警告信息的输出提示。 Do not warn about signed overflow:-J 选项,对有符号数的溢出不报警告信息。 Warn when differences altered for long displacements:-K 选项。 - 67 - 图 2-48 工程汇编 Warning Options 选项设置属性页 7. 链接选项设置 GNU Tools for ARM 链接器的 Linker 属性页如图 2-49 所示,该属性页中的命令行开关选项用于 链接器,用户的所有设置显示在 Link Options 的编辑框中,工程在选定相应的 Build Tools 时,工程 缺省链接输出的目标文件为执行文件。输出目标文件为执行文件时,命令开关选项格式如下: [Opt-1] … –o[Path]$(TARGET_NAME) $(OBJ_FILES) [Lib-1] … 其中$(TARGET_NAME)为链接器输出的执行文件名称,$(OBJ_FILES)是链接的目标文件集合。 当工程链接输出的目标文件为库文件时,命令开关选项的格式如下: [Opt-1] … $(TARGET_NAME) $(OBJ_FILES) [Lib-1] … 其中$(TARGET_NAME)为链接器输出的库文件名称,$(OBJ_FILES)是链接的目标文件集合。 用户可以手工输入、修改开关选项,但必须注意保留每个 Option 之间的空格,并且不得改变和删除 $(OBJ_FILES)宏,不得删除$(TARGET_NAME),它们分别代表源文件和目标文件名称,系统在执 行汇编命令行时,将自动替换宏。$(TARGET_NAME)缺省为工程名称加上扩展名.elf(可执行文件) 或.lib(库文件)组成。在链接器链接目标文件时,如果没有设置入口点参数(-e 开关选项),目标 文件集合中的第一个目标文件的第一个执行指令,被链接器认为是可执行文件的入口点。因此,用 户需要指定第一个目标文件,宏$(OBJ_FILES)中的 entry.o 就被指定为链接命令行中的第一 个目标文件。见图 2-49。 链接设置有五个类别选择页,分别为常规信息配置页(General)、程序入口点配置页(Image Entry Options)、代码生成选项配置页(Code Generation Options)、链接库配置页(Include Object and Library Modules)和库搜索目录配置页(Add Library Searching Path)。 图 2-49 为工程链接 General 选项设置属性页。 Executable file:生成可执行的目标文件。 Library:生成库文件。 Linker script file:链接定位信息描述脚本,只在选择了“Executable file”时才需设置。 Output file name:带路径或不带路径的目标文件名称,缺省为工程名称加上扩展名.elf(可执 行文件)或.lib(库文件), 当前工程文件(pjf 文件)所在位置被默认为是当前路径。 - 68 - 图 2-49 工程链接 General 选项设置属性页 图 2-50 为工程链接 Image Entry Options 选项设置属性页。Image Entry Options 选项族,只在生 成可执行的目标文件时需要设置,生成库文件时不需设置。 Select entry file:在该选项下的列表框中,列出了当前工程的所有可链接的目标文件,选择一 个目标文件,作为链接命令行中排列的第一个目标文件,当 Image entry point 参数被设置的情况下, 不必设置该选项。 Image entry point:-e
选项,设置可执行程序的入口点。 图 2-50 工程链接 Image Entry Options 选项设置属性页 - 69 - 图 2-51 为工程链接 Code Generation Options 选项设置属性页。Code Generation Options 选项族, 只在生成可执行的目标文件时需要设置,生成库文件时不需设置。 Generate relocateable output:-r 选项,生成需要重定位的目标文件。 Optimize output file:-O 选项,链接时,执行优化功能。 Do not link against shared libraries:-static 选项,不链接共享库。 Output lots of information during link:-verbose 选项,链接时输出详细信息。 Warn about common symbols:--warn-common 选项,通用符号重复时,报警告。 Warn only once per undefined symbol:--warn-once 选项,对未定义的符号,只报一次警告。 Link little-endian object:-EL 选项,只链接 Little Endian 模式的目标文件。 Link big-endian object:-EB 选项,只链接 Big Endian 模式的目标文件。 Strip all symbols:-s 选项,链接时,忽略目标文件中的所有符号信息。 Strip debugging symbols:-S 选项,链接时,忽略目标文件中的调试信息。 Discard all local symbols:-x 选项,链接时,忽略目标文件中的局部符号信息。 图 2-51 工程链接 Code Generation Options 选项设置属性页 图 2-52 为工程链接 Include Object and LibraryModules 选项设置属性页。 Library or Object Modules:设置链接当前工程时,所需的库文件。库文件的搜索路径包括当 前工程路径,以及由-L选项设置的路径。 - 70 - 图 2-52 工程链接 Include Object and LibraryModules 选项设置属性页 图 2-53 工程链接 Add Library Searching Path 选项设置属性页。Add Library Searching Path 选项 族,只在生成可执行的目标文件时需要设置,生成库文件时不需设置。 Library Searching Directories:-L选项,设置库文件搜索路径。 图 2-53 工程链接 Add Library Searching Path 选项设置属性页 2.4.4 工程的编译链接 完成工程的设置后,就可以对工程进行编译链接了。用户可以通过选择主窗口 Build 菜单项或 Build 工具条按钮,编译相应的文件或工程,同时将在输出窗的 Build 子窗口中输出有关信息。如果 在编译链接过程中,出现任何错误,包括源文件语法错误和其它错误时,编译链接操作立刻终止, - 71 - 并在输出窗的 Build 子窗口中提示错误,如果是语法错误,用户可以通过鼠标左键双击错误提示行, 来定位引起错误的源文件行。 图 2-54 工程 build 菜单和工具条 2.4.5 加载调试 Embest IDE for ARM 包含 ARM 模拟器,支持脱离目标板的 ARM 应用模拟调试,是开发人员 进行在线调试前的开发辅助工具。 在线调试时,首先将集成环境与 JTAG 仿真器连接,点击 Debug > Remote Connect 菜单项可激 活连接,然后点击 Download 菜单将目标文件下载到目标系统的指定存储区中。如果在工程设置对 话框调试选项中设置了自动下载选项,Embest IDE 中的调试器会在与仿真器连接后自动进行下载, 文件下载后即可进行在线仿真调试。 1. 断点和单步 调试器可以控制目标程序的运行和停止,并反汇编正在调试的二进制代码,同时可通过设置断 点来控制程序的运行,辅助用户更快的调试目标程序。Embest IDE 的调试器可以在源程序、反汇编 程序、以及源程序汇编程序混合模式窗口中设置和删除断点。 设置断点的有以下几种方法: 1. 将鼠标指向源程序行左边需设定断点处,鼠标形状会变成手形指针,然后单击鼠标左键,这时, 程序行左边会出现红色圆形含黄色条的断点标志。 2. 将光标设置在需要设置断点的代码行处,按 F9 快捷键。 3. 将光标设置在需要设置断点的代码行处,点击 Debug 菜单,选取 Toggle Breakpoint 菜单项。 第一次设置的断点均为有效断点,设置了有效断点的源程序界面如图 2-55 所示,青色圈处为有 效断点标志: - 72 - 图 2-55 有效断点标志 在源程序窗,若在一条非执行语句设断点,Embest IDE 不会做出任何响应。 断点状态分为有效和无效状态,程序不会在无效状态的断点停止。无效断点的源程序界面如图 2-56 所示,青色圈处为无效断点标志: 图 2-56 无效断点标志 当程序运行到有效断点处时,会停止在有效断点处,其界面如图 2-57 所示: 图 2-57 停止在断点处的程序界面 用户可使用断点列表来查询所有断点信息和状态。点击 Debug 菜单,选取“Breakpoint…”菜 单项,即可弹出断点列表对话框,断点列表对话框如图 2-58 所示: - 73 - 图 2-58 断点列表对话框界面 在断点列表对话框点击 Delete 按钮将会删除当前选择的断点,点击 Delete ALL 按钮将删除当前 列表中所有断点,点击 View Code 按钮将显示当前所选择断点对应的源文件,如果是汇编断点并且 不对应任何源文件,点击 View Code 按钮将没有任何反应,双击某一断点行或者点击 Modify 按钮, 将可修改断点信息,修改界面如图 2-59 所示: 图 2-59 断点信息修改界面 若要设置断点条件属性,点击断点信息修改窗口的 Advanced 按钮,将下拉出另一附加窗口, 界面如图 2-60 所示,“When”输入栏用于输入断点条件表达式,“Command”输入栏用于输入程序 到达断点时候系统自动执行的命令。 图 2-60 条件断点信息修改界面 - 74 - 2. 反汇编窗 反汇编窗用于显示反汇编二进制代码后得到的汇编级代码,可以混合源代码显示,也可以混合 二进制代码显示。反汇编窗可以设置和清除汇编级别断点,并可按照 ARM 或 THUMB 格式的反汇 编二进制代码。 图 2-61 源文件与反汇编指令交叉显示窗口界面 3. 寄存器窗 点击菜单项 View>debug windows>Variables 可以打开和关闭寄存器窗口。 寄存器窗用于显示和 修改目标系统中处理器内核寄存器及其外围接口寄存器值。寄存器名称和数目依赖于目标系统处理 器类型,当调试不同目标系统的时候,显示的内容会不一样。寄存器值可以按照十进制、十六进制 或者二进制格式显示,并可自动刷新或者根据需要由用户手动刷新显示。寄存器显示按照寄存器组 方式,每组寄存器都可以分别设置不同的显示格式。 注:如果在工程配置的 Processor 设置对话框没有选择相应的处理器厂家及芯片型号,Peripheral 窗口将显示空白 寄存器窗的界面如图 2-62 所示: 图 2-62 寄存器窗界面 - 75 - 点击某一个寄存器,该寄存器的名字和值会显示在寄存器窗上部的输入栏中,在输入栏可以改 变该寄存器的值,输入栏如图 2-63 所示: 图 2-63 寄存器值修改输入栏 当寄存器的值被修改后会以红色显示该值,如图 2-64 所示: 图 2-64 寄存器值被修改的寄存器窗界面 4. 存储区窗 存储区窗用于显示和修改目标系统中存储区的内容。存储区窗显示从输入的起始地址开始存储 的存储区内容,显示长度根据存储区窗大小而自动匹配。存储区内容可以按照字节、半字或字长度 显示,并同时以十六进制数和对应的 ASCII 字符显示存储区内容。当存储区窗显示范围内的存储区 数据有变化的时候,会以红色显示这些数据。IDE 同时提供了两个内存显示窗口 Memory1 窗和 Memory2 窗(功能同 Memory1 窗)。 按照字节长度显示的存储区窗的界面如图 2-65 所示: - 76 - 图 2-65 存储区窗界面 用户可以在窗口上部的存储区起始地址栏修改显示起始地址,修改后存储区窗会自动从新的地 址开始显示存储区内容;地址输入栏可以记录用户最近查看的 10 个起始地址值,用户可从下拉菜 单中选择想要查看的起始地址。存储区起始地址栏如图 2-66 所示: 图 2-66 存储区起始地址输入栏 若要修改存储区内容,可在十六进制数据栏或者 ASCII 字符数据栏直接修改,修改的数据会立 刻写到对应的存储区中,并以红色显示改变了的数据。 5. watch 窗 点击菜单项 View > Debug Windows >Watch 可以打开和关闭数据观察窗(watch)。数据观察窗用 于显示用户想要观察的变量或表达式值,用户可以随时增加或删除观察数据。观察数据值可以按照 十进制或者十六进制格式显示。观察数据值会跟随用户的每一步操作而自动重新计算和显示。数据 观察窗有两个页面:“Watch 1”和“Watch 2”,每个页面可以单独输入不同的数据。观察数据名会 跟随工程自动存储,当下一次打开同一个工程的时候,会自动调入原先存在的观察数据名。 数据观察窗缺省显示为十六进制,其界面如图 2-67 所示: - 77 - 图 2-67 数据观察窗界面 用户可以使用以下两种方法增加观察数据: 1. 双击数据观察窗最后的空行的名字栏,数据观察会在此处出现一个输入框,输入数据回车或 者点击其它行,调试器将计算数据值,并显示在对应的值栏目。 2. 在数据观察窗在点击鼠标右键,在数据观察窗菜单中选取”Add”菜单项,将弹出输入对话框, 在其中输入想要观察的数据或者表达式。 6. 变量窗 点击菜单项 View > Debug Windows > Variables 可以打开和关闭变量窗。变量窗用于显示全局以 及局部变量信息,并可修改变量值。变量窗有两个页面:“Global”和“Local”,分别用于显示全局 变量和函数局部变量。变量值可以按照十进制或者十六进制格式显示。变量值以及局部变量名会跟 随用户的每一步操作而自动重新计算和显示。当变量窗中变量值有变化的时候,变量窗会变红显示 这些数据值。 变量窗缺省显示为十六进制,其界面如图 2-68 所示: - 78 - 图 2-68 变量窗界面 用户可以察看变量的属性,其中包括变量名字、变量值和变量类型。用户可以修改变量值,方 法是双击要修改的变量值栏,在显示的输入框中输入新值。当输入的数据为合法数据时候,调试器 会修改目标系统中对应变量的值,并变红显示修改后的数据。 7. 函数栈窗 点击菜单项 View > Debug Windows > Call Stack 可以打开和关闭函数栈窗。函数栈窗用于显示 函数运行调用关系,函数参数值可以按照十六进制或者十进制格式显示。最后调用的函数(即当前 运行函数)在窗口最上部的第一行,按照调用关系依次往下排列,起始函数在窗口末的最后一行。 函数栈窗的界面如图 2-69 所示(设置所有函数参数属性显示): 图 2-69 函数栈窗界面 函数参数的名字、类型或值都可以单独设置是否显示。如果关闭所有函数参数显示,将只显示 函数名字和返回类型。双击函数栈窗的某一函数所在行,源文件窗会显示出该函数调用函数栈中上 一函数返回后将要执行的下一句代码,并在该源代码行前面放置一蓝色向右箭头标志(见下图的青 色圆圈包围处),函数栈窗同时会高亮显示该函数栈函数信息行。双击后调试器界面变化如图 2-70 所示: 图 2-70 双击函数行后的调试器界面 - 79 - 2.4.6 Flash 编程工具 Embest IDE for ARM 提供了 Flash 编程工具,可以在板(on board)檫除 Falsh 或将文件烧写到 Flash 中。软件界面如图 2-71 所示。 Flash Programmer 主要特征及性能: 支持所有基于 ARM7 和 ARM9 核的处理器,如 ATMEL 公司 AT91R40807、Cirrus Logic 公司 EP7312、SAMSUNG 公司 S3C4510、S3C2410 等。 在 CPU 项选择 USER >DEFINE,可以自定义初始化要烧录的处理器配置(扩展已有 CPU 列表)。 支持绝大多数厂家生产的 FLASH 芯片,如 AMD 公司 AM29 系列,Intel 公司 28 系列,SST 公司 29\39\49 系列。 支持对 FLASH 进行空白检查、擦除、编程、校验文件、计算校验和、保护、上载操作。 所有 FLASH 操作可指定扇区范围,不影响其他扇区内容。 支持 8 位、16 位和 32 位 FLASH 访问宽度。 支持 1 片、2 片及 4 片 FLASH 编程,编程文件无需劈分。 Flash Programmer 其他特点: 编程配置数据的保存和载入。 编程前的寄存器读取动能和目标测试功能。 FLASH 扇区地址指示功能。 简单直接的处理器寄存器设置界面。 图 2-71 Flash Programmer 软件界面 - 80 - 第三章 嵌入式软件开发基础实验 3.1 ARM 汇编指令实验一 3.1.1 实验目的 初步学会使用 Embest IDE for ARM 开发环境及 ARM 软件模拟器; 通过实验掌握简单 ARM 汇编指令的使用方法。 3.1.2 实验设备 硬件:PC 机 软件:Embest IDE Pro 2004 集成开发环境,Windows 98/2000/NT/XP。 3.1.3 实验内容 熟悉开发环境的使用并使用 ldr/str,mov 等指令访问寄存器或存储单元。 使用 add/sub/lsl/lsr/and/orr 等指令,完成基本数学/逻辑运算。 3.1.4 实验原理 ARM 处理器共有 37 个寄存器: 31 个通用寄存器,包括程序计数器(PC)。这些寄存器都是 32 位的。 6 个状态寄存器。这些寄存器也是 32 位的,但是只是使用了其中的 12 位。 这里简要介绍通用寄存器,关于状态寄存器的介绍,请参照下一节。 1. ARM 通用寄存器 通用寄存器(R0~R15)可分为 3 类: o 不分组寄存器 R0~R7; o 分组寄存器 R8~R14; o 程序计数器 R15; 1) 不分组寄存器 R0~R7; R0~R7 是不分组寄存器。这意味着在所有处理器模式下,它们每一个都访问一样的 32 位寄存 器。它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。 2) 分组寄存器 R8~R14 R8~R14 是分组寄存器。它们每一个访问的物理寄存器取决于当前的处理器模式。若要访问特定的 物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。 寄存器 R8~R12 各有两组物理寄存器:一组为 FIQ 模式,另一组为除了 FIQ 以外的所有模式。 寄存器 R8~R12 没有任何指定的特殊用途。只是使用 R8~R14 来简单地处理中断。寄存器 R13,R14 各有 6 个分组的物理寄存器。1 个用于用户模式和系统模式,其它 5 个分别用于 5 种异常模式。寄 存器 R13 通常用做堆栈指针,称为 SP。每种异常模式都有自己的 R13。寄存器 R14 用作子程序链 接寄存器,也称为 LR。 3) 程序计数器 R15 寄存器 R15 用做程序计数器 (PC)。 在本实验中,我们认为 ARM 核工作在用户模式 ,R0~R15 可用。 2. 存储器格式 ARM 体系结构将存储器看作是从零地址开始的字节的线性组合。字节零到字节三放置第一个 字(WORD),字节四到字节七存储第二个字,以此类推。 ARM 体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。 1) 大端格式 - 81 - 在这种格式中,字数据的高位字节存储在低地址中,而字数据的低位字节则存放在高地址中, 如下图所示。 高地址 低地址 31 23 22 16 15 8 7 0 字地址 8 9 10 11 8 4 5 6 7 4 0 1 2 3 0 2) 小端格式 在这种格式中,字数据的高位字节存储在高地址中,而字数据的低位字节则存放在低地址中, 如下图所示。 高地址 低地址 31 23 22 16 15 8 7 11 10 9 8 7 6 5 4 3 2 1 0 0 字地址 8 4 0 3. GNU 基础知识 Embest IDE 集成了 GNU 汇编器 as,编译器 gcc,链接器 ld。因此,我们写程序要符合 GNU 的语法和规则。关于 as、gcc 和 ld 的具体使用,请参照 Embest IDE 所带的电子文档 ProgRef.chm, 在此不再赘述。这里简单介绍几点基本知识: 1) 程序默认入口点为“_start”,代码段默认起始地址为 0x8000 2) as 常用伪操作符 .equ .equ 伪操作为数字常量、基于寄存器的值和程序中的标号定义一个字符名称。 语法格式 .equ symbol, expr 其中,expr 为基于寄存器的地址值、程序中的标号,32 位的地址常量或者 32 位的常量。 Symbol 为.equ 伪操作为 expr 定义的字符名称。 示例 .equ Version, "0.1" .global 及.globl .global 声明一个符号可以被其他文件引用。相当于声明了一个全局变量,.globl 与.global 相同。 语法格式 .global symbol 其中,symbol 为声明的符号的名称。它是区分大小写的。 示例 .global MyAsmFunc .text - 82 - .text 伪操作将操作符开始的代码编译到代码段或代码段子段(subsection) 语法格式 .text {subsection} 示例 .text .end 标记汇编文件的结束行,即标号后的代码不作处理。 语法格式 .end 3.1.5 实验操作步骤 1. 实验 A 1) 新建工程: 运行 Embest IDE 集成开发环境,选择菜单项 File → New Workspace,系统弹出一个对话框, 按照图 3-1 所示输入相关内容。 图 3-1 新建工作区 点击 OK 按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗 口将打开该工作区和工程。 2) 建立源文件: 点击菜单项 File → New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中 第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件 asm1_a.s。 3) 添加源文件: 选择 Project → Add To Project → Files 命令,或单击工程管理窗口中的相应右键菜单命令, 弹出文件选择对话框,在工程目录下选择刚才建立的源文件 asm1_a.s。 4) 基本配置: 选择菜单项 Project → Settings…或快捷键 Alt+F7,弹出工程设置对话框。在工程设置对话框中, 选择 Processor 设置对话框,按照图 3-2 所示,进行目标板所用处理器的配置。 - 83 - 图 3-2 新的工作区处理器配置 5) 生成目标代码: 选择菜单项 Build → Build asm_a 或快捷键 F7,生成目标代码。 图 3-3 Embest IDE 编译按钮面板 6) 调试设置: 选择菜单项 Project → Settings…或快捷键 Alt+F7,弹出工程设置对话框。在工程设置对话框中, 选择 Remote 设置对话框,按照图 3-4 所示对调试设备模块进行设置。 - 84 - 图 3-4 新工作区仿真器配置 选择 Debug 设置对话框,按照下面各图进行调试模块配置。 (a)连接相关配置 - 85 - (b)下载相关配置 图 3-5 新工作区调试器配置 注意: Symbol file 与 Download file 设置应该相同,用户可以从 Linker 页面拷贝系统默认的输出 文件配置;且该实验输入下载地址为 0x8000,即为 AS 默认的代码段起始地址。由于汇编和链接选 项在本实验中没有进行配置,完全使用其默认选项,所以,代码段是从 0x8000 开始的,下载地址 应该与它保持一致。 7) 选择 Debug 菜单 Remote Connect 进行连接软件仿真器,执行 Download 命令下载程序,并 打开寄存器窗口。打开 memory 窗口,观察地址 0x8000~0x801f 的内容,与地址 0xff0~0xfff 的内容。 8) 单步执行程序并观察和记录寄存器与 memory 的值变化。 9) 结合实验内容和相关资料,观察程序运行,通过实验加深理解 ARM 指令的使用。 10)理解和掌握实验后,完成实验练习题。 2. 实验 B 1) 在工作区窗口工作区名称上击右键鼠标,在弹出的快捷菜单中(见图 3-6)选择“Add New Project to Workspace…”。 图 3-6 Embest IDE 工作区右键菜单 2) 参照实验 A 及相应的实验参考程序,建立工程 asm1_b。 - 86 - 3) 参照实验 A 的步骤完成目标代码的生成与调试。 4) 理解和掌握实验后,完成实验练习题。 3.1.6 实验参考程序 1. 实验 A 参考程序: /********************************************************************************************* # NAME: asm1_a.s * # Author: Embest * # Desc: ARM instruction examples * # History: shw.He 2005.02.22 * /********************************************************************************************* /*----------------------------------------------------------------------------------------------------------*/ /* constant define */ /*----------------------------------------------------------------------------------------------------------*/ .equ x, 45 /* x=45 */ .equ y, 64 /* y=64 */ .equ stack_top, 0x1000 /* define the top address for stacks */ .global _start /*-----------------------------------------------------------------------------------------------------------*/ /* code */ /*-----------------------------------------------------------------------------------------------------------*/ .text _start: /* code start */ mov sp, #stack_top mov r0, #x /* put x value into R0 */ str r0, [sp] /* save the value of R0 into stacks */ mov r0, #y /* put y value into R0 */ ldr r1, [sp] /* read the data from stack,and put it into R1 */ add r0, r0, r1 str r0, [sp] stop: b stop /* end the code ,cycling */ .end 2. 实验 B 参考程序: #********************************************************************************************* # NAME: asm1_a.s * # Author: Embest * # Desc: ARM instruction examples * # History: shw.He 2005.02.22 * - 87 - #********************************************************************************************* /*-----------------------------------------------------------------------------------------------------------*/ /* constant define */ /*----------------------------------------------------------------------------------------------------------*/ .equ x, 45 /* x=45 */ .equ y, 64 /* y=64 */ .equ z, 87 /* z=87 */ .equ stack_top, 0x1000 /* define the top address for stacks */ .global _start /*-----------------------------------------------------------------------------------------------------------*/ /* code */ /*------------------------------------------------------------------------------------------------------------*/ .text _start: /* code start */ mov r0, #x /* put x value into R0 */ mov r0, r0, lsl #8 /* R0 = R0 << 8 */ mov r1, #y /* put y value into R1 */ add r2, r0, r1, lsr #1 /* R2 = (R1>>1) + R0 */ mov sp, #0x1000 str r2, [sp] mov r0, #z and r0, r0, #0xFF mov r1, #y add r2, r0, r1, lsr #1 /* put z value into R0 */ /* get low 8 bit from R0 */ * put y value into R1 */ /* R2 = (R1>>1) + R0 */ ldr r0, [sp] mov r1, #0x01 orr r0, r0, r1 mov r1, R2 add r2, r0, r1, lsr #1 /* put y value into R1 */ /* put y value into R1 */ /* R2 = (R1>>1) + R0 */ stop: b stop .end /* end the code ,cycling*/ 3.1.7 练习题 1. 编写程序循环对 R4~R11 进行累加 8 次赋值,R4~R11 起始值为 1~8,每次加操作后把 R4~R11 的内容放入 SP 栈中,SP 初始设置为 0x800。最后把 R4~R11 用 LDMFD 指令清空赋值为 0。 2. 更改实验 A、B 中 x、y 的值,观察执行结果。 - 88 - 3.2 ARM 汇编指令实验二 3.2.1 实验目的 通过实验掌握使用 ldm/stm,b,bl 等指令完成较为复杂的存储区访问和程序分支,学习使用条 件码,加强对 CPSR 的认识。 3.2.2 实验设备 硬件:PC 机。 软件:Embest IDE Pro 2004 集成开发环境,Windows 98/2000/NT/XP。 3.2.3 实验内容 熟悉开发环境的使用并完成一块存储区的拷贝。 完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。 3.2.4 实验原理 1. ARM 程序状态寄存器 在所有处理器模式下都可以访问当前的程序状态寄存器 CPSR。CPSR 包含条件码标志,中断禁 止位,当前处理器模式以及其它状态和控制信息。每种异常模式都有一个程序状态保存寄存器 SPSR。 当异常出现时,SPSR 用于保存 CPSR 的状态。 CPSR 和 SPSR 的格式如下: 31 30 29 28 27 26 87 6 5 4 3 21 0 NZ CVQ DNM(RAZ) I F T M M M M M 1) 条件码标志 : N,Z,C,V 大多数指令可以检测这些条件码标志以决定程序指令如何执行 2) 控制位 : 最低 8 位 I,F,T 和 M 位用做控制位。当异常出现时改变控制位。当处理器在特权模式下也 可以由软件改变。 中断禁止位:I 置 1 则禁止 IRQ 中断;F 置 1 则禁止 FIQ 中断。 T 位:T=0 指示 ARM 执行;T=1 指示 Thumb 执行。 在这些体系结构系统中,可自由地使用能在 ARM 和 Thumb 状态之间切换的指令。 模式位:M0, M1, M2, M3 和 M4 (M[4:0]) 是模式位.这些位决定处理器的工作模式.如表 3-1 所示。 表 3-1 ARM 工作模式 M[4:0] M[4:0] 模式 可访问的寄存器 0b10000 用户 PC, R14~R0,CPSR 0b10001 FIQ PC, R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq 0b10010 0b10011 IRQ 管理 PC, R14_irq~R8_fiq,R12~R0,CPSR,SPSR_irq PC, R14_svc~R8_svc,R12~R0,CPSR,SPSR_svc 0b10111 0b11011 中止 未定义 PC, R14_abt~R8_abt,R12~R0,CPSR,SPSR_abt PC, R14_und~R8_und,R12~R0,CPSR,SPSR_und 0b11111 系统 PC, R14~R0,CPSR 3 ) 其他位 程序状态寄存器的其他位保留,用作以后的扩展。 - 89 - 2. 本实验涉及到的 as 语法及规则 1) 标号的使用 标号由一个符号后跟一个冒号组成,它表示程序中当前的指令或者数据地址。如果在程序中出现两 个相同的标号,汇编器会产生一个警告,同时,只有第一个标号有效。 2) 几个伪指令 (1) ldr ldr 伪指令将一个 32 位的常数或者一个地址值读取到寄存器中。当需要读取到寄存器中的数据超过 了 mov 或者 mnv 指令可以操作的范围时,可以使用 ldr 伪指令将该数据读取到寄存器中。在汇编编 译器处理源程序时,如果该常数没有超过 mov 或者 mnv 可以操作的范围,则 ldr 指令被这两条指令 中的一条所替代,否则,该常数将被放在最近的一个文字池内(literal pool),同时,本指令被一条 基于 PC 的 ldr 指令替代。 语法格式 ldr , = 其中,expression 为需要读取的 32 位常数。 register 为目标寄存器。 示例 ldr r1,=0xff ldr r0,=0xfff00000 (2) adr adr 指令将基于 PC 的地址值或者基于寄存器的地址值读取到寄存器中。在汇编编译器处理源程 序时,adr 伪指令被编译器替换成一条合适的指令。通常,编译器用一条 add 指令或者 sub 指令来实 现该伪指令的功能。如果标号超出范围或者标号在同一文件(和同一段)内没有定义,则会产生一 个错误。该指令不使用文字池(literal pool)。 语法格式 adr
更多简介内容

评论


个人中心

意见反馈

求资源

回顶部

下载专区


TI 参考设计资源库

工业电子 汽车电子 个人电子
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })