第一篇:《嵌入式系统设计》教案
嵌入式系统设计教案
课程总学时: 32 讲课学时: 24 实验学时: 8 授 课 人: 杨词慧
南昌航空大学信息工程学院
目录 嵌入式系统概述.......................................................................................................................1 1.1 嵌入式系统的基本概念...............................................................................................1 1.2 嵌入式系统的发展历史...............................................................................................2 1.3 嵌入式系统的体系结构...............................................................................................2 1.4 嵌入式处理器...............................................................................................................3 1.5 嵌入式操作系统...........................................................................................................4 1.6 嵌入式系统的应用及发展趋势...................................................................................7 ARM体系结构.........................................................................................................................8 2.1 ARM设计思想.............................................................................................................8 2.2 ARM体系结构分析.....................................................................................................9 2.3 ARM处理器系列.......................................................................................................11 2.4 ARM处理器模式.......................................................................................................15 2.5 ARM体系的异常处理...............................................................................................16 2.6 ARM内部寄存器.......................................................................................................18 2.7 ARM体系的存储系统...............................................................................................19 ARM指令系统及程序设计基础...........................................................................................21 3.1 ARM寻址方式...........................................................................................................21 3.2 ARM指令集...............................................................................................................24 3.3 Thumb指令集............................................................................................................33 3.4............................................................................................................................................35 3.5............................................................................................................................................35 3.6 嵌入式系统设计与开发过程.....................................................................................36 STM32微控制器...................................................................................................................37 4.1 STM32微控制器的性能指标....................................................................................37 2 3 4
I 嵌入式系统概述
教学目的:使学生对嵌入式系统的基本概念和体系结构、嵌入式处理器、嵌入式操作系统、嵌入式系统的历史、应用及发展趋势有一定的了解。
教学重点:嵌入式系统的基本概念、嵌入式处理器和嵌入式操作系统。教学难点:嵌入式系统的体系结构、嵌入式处理器。教学方法与教学手段:课堂讲授,多媒体教学。教学时间:2课时。教学内容
1.1 嵌入式系统的基本概念
(1)嵌入式系统的定义
先举例说明生活中的各种嵌入式系统设备,如iPhone、小米手机、洗衣机、电压力锅等。IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是用于控制、监视或者辅助操作机器和设备的装置(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
微机学会的定义:嵌入式系统是以嵌入式应用为目的的计算机系统,可分为系统级、板级和片级。a)系统级:各种类型的工控机、PC104等模块。b)板级:各种类型的带CPU的主板或OEM产品。c)片级:各种以单片机、DSP、微处理器为核心的产品。
一般定义:嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统。
(2)嵌入式系统的特点 a)专用、软硬件可剪裁配置。b)低功耗、高可靠性、高稳定性。c)软件代码矮小精悍。d)代码可固化。e)实时性。f)弱交互性。
g)软件开发通常需要专门的开发工具、环境和方法。h)要求开发、设计人员具有较高的技能。i)具有较长的生命周期。(3)嵌入式系统的分类
按嵌入式微处理器的位数可分为:4位、8位、16位、32位和64位。按实时性能可分为:非实时系统和实时系统。
按软件结构可分为:嵌入式单线程系统和嵌入式事件驱动系统。
按应用领域可分为:信息家电类、消费电子类、医疗电子类、移动终端类、通信类、汽车电子类、工业控制类、航空电子类、军事电子类等。
1.2 嵌入式系统的发展历史
(1)以单芯片为核心的可编程控制器形成的系统
1971年11月,Intel推出Intel 4004。随后出现Intel 8080/8085、8086、Motorola的6800、68000,Zilog的Z80、Z8000。
以微处理器为核心构成的系统
单板机:Intel的iSBC系列、Zilog的MCB等
将计算机做在一个芯片上,大部分应用于专业性强的工业控制系统中,没有操作系统的支持,系统结构和功能相对单一,处理效率较低,存储容量较小。
(2)以嵌入式CPU为基础、以简单操作系统为核心的嵌入式系统
CPU种类繁多,通用性较弱;系统开销小,效率高;操作系统达到一定的兼容性和扩展性;应用软件较专业化,用户界面不够友好。
(3)以嵌入式操作系统为标志的嵌入式系统
嵌入式操作系统可运行于各种不同类型的微处理器上,兼容性好;操作系统内核小,效率高;具备文件和目录管理,支持多任务、网络应用,具备图形窗口和用户界面;有大量的应用程序接口API。
(4)以Internet为标志的嵌入式系统 嵌入式设备与Internet的结合。
1.3 嵌入式系统的体系结构
(1)体系结构
(2)硬件层
嵌入式处理器:ARM、DSP、FPGA 存储器系统:ROM、FLASH、SDRAM 中断控制器、DMAC、定时器/计数器、UART、USB控制器、LCD控制器等 I/O接口:USB、I2C、SPI、CAN等
(3)中间层
硬件抽象层(Hardware Abstraction Layer, HAL)。位于操作系统内核与硬件电路之间的接口层,隐藏硬件接口细节。
板级支持包(Board Support Package, BSP)。为上层的驱动程序提供访问硬件设备寄存器的函数包。 设备驱动程序
1.4 嵌入式处理器
(1)嵌入式处理器的分类
中高端的嵌入式微处理器(Embedded Micro-Processor Unit, EMPU)低端的微控制器(Microcontroller Unit, MCU)DSP处理器(Digital Signal Processor, DSP)高度集成的片上系统(System on Chip, SoC)(2)嵌入式微处理器
由通用计算机中的CPU演变而来,只保留与嵌入式应用紧密相关的功能硬件,在工作温度、抗电磁干扰、可靠性、功耗等方面做了各种增强。
主要的嵌入式处理器类型:ARM、MIPS、PowerPC、68000系列等。特点
a)在设计中考虑低功耗。
b)采用可扩展的处理器结构。处理器内部留有很多扩展接口。c)具有很强的存储区保护功能。d)提供丰富的调试功能。
e)对实时任务具有很强的支持能力。(3)微控制器
俗称单片机,将整个计算机系统集成到一块芯片中。
WatchWatchdogdogGPIO/计数GPIOUARTUART定时定时/计数A/DA/DD/A器D/A器2CCANCANII2CSPISPIUSBUSBCPUCPUSRAMSRAM核心部分FlashFlash8位单片机示意图以一种微处理器为核心,芯片内部集成Flash、RAM、总线逻辑、定时器/计数器、I/O口、串行口、PWM、A/D、D/A等。
最早的单片机: 1976年,Intel的8048,Motorola的68HC05、Zilog公司的Z80.(4)DSP处理器
对系统结构和指令进行了特殊设计,使其适合DSP算法 高效乘累加运算、超标量操作、指令流水线 高效数据存取、硬件重复循环 确定性操作(程序执行时间可预测)应用场合:音视频编解码、数字滤波、FFT等(5)片上系统
将整个系统做在一个芯片上 优点
a)通过改变内部工作电压,降低芯片功耗 b)减少芯片对外的引脚数,简化制造过程
c)减少外围驱动接口单元及电路板之间的信号传递,加快微处理器数据处理的速度 d)内嵌线路可避免信号传递时所造成的系统杂讯 联发科推出28nm双核处理器MT6572 a)代号武松,基于Cortex-A7架构 b)主频为1.2GHz c)处理器上整合了Wi-Fi、FM收音机、GPS以及蓝牙四种功能 d)支持500万像素摄像头(6)嵌入式处理器的发展趋势 a)内部结构
SoC设计,与DSP、Flash、FPGA融合;性能更强,集成更多的功能部件;双核或多核结构 b)功耗更低 c)可靠性更高 d)支持ISP、ISD 1.5 嵌入式操作系统
(1)操作系统的概念及功能
操作系统。是一组计算机程序的集合,用来有效地控制和管理计算机的硬件和软件资源,并为用户提供方便的应用接口。
功能:处理器管理;存储器管理;设备管理;文件管理;用户接口(2)操作系统的分类 按程序调度的方法分为
顺序操作系统。只含一个运行程序,独占CPU时间,顺序执行。如DOS系统。 分时操作系统。系统内同时有多道程序运行。如Unix系统。 实时操作系统。
从应用角度,嵌入式操作系统可分为 面向低端信息家电
面向高端信息家电 面向个人通信终端 面向通信设备 面向汽车电子 面向工业控制
从实时性的角度,嵌入式操作系统可分为 具有强实时特点的嵌入式操作系统 具有弱实时特点的嵌入式操作系统 没有实时特点的嵌入式操作系统(3)实时操作系统(RTOS)
是具有实时性且能支持实时控制系统工作的操作系统,首要任务是调度一切可利用的资源来完成控制任务。
对现场不停监测,一旦有事件发生能立即处理。与通用OS的区别:实时性,代码尺寸小。一般包括以下几个重要组成部分:
实时内核:任务管理、定时器管理、存储器管理、任务间通信与同步等。 网络组件 文件系统 图形用户界面
IEEE的Unix委员会规定了实时操作系统须具备以下几个特点: 支持异步事件的响应。 中断和调度任务的优先机制。 支持指令性计划占式调度。 支持同步。
(4)常见的嵌入式操作系统 嵌入式Linux 实时的嵌入式Linux:如RT-Linux、KURT-Linux等。RT-Linux将通常的Linux任务优先级设为最低。
一般的嵌入式Linux:如μCLinux。 开源,内核小、效率高,可定制 μC/OS和μC/OS-II μC/OS-II(MicroController Operating System)是由Jean J.Labrosse开发的实时操作系统内核。
已被移植到Intel、ARM、Motorola等公司的81种不同的处理器上。
Labrosse用一年时间开发了μC/OS实时操作系统; 1992年在《Embedded System Programming》上 发表介绍文章,并公布源代码;1993年写了《μC/OS, The Real-Time Kernel》;书及源码推动了μC/OS-II的发展。
μC/OS-II只是一个实时操作系统的内核,全部核心代码只有8.3 KB。 只包含进程调度、时钟管理、内存管理和进程间的通信与同步等基本功能。Windows CE 多线程、完整优先权、多任务的32位嵌入式操作系统。 基本内核大小至少为200KB。VxWorks 美国WindRiver公司于1983年设计
是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统。 拥有良好的持续发展能力和高性能的内核及友好的用户开发环境。
支持多种处理器,如ARM、x86、i960、SunSparc、MIPS RX000、PowerPC、StrongARM等。 以良好的可靠性和实时性,广泛应用在通信、军事、航空、航天等领域。
应用案例:美国F-
16、FA-18战斗机,B-2隐形轰炸机,“爱国者”导弹,1997年4月在火星登陆的火星探测器。Palm OS 32位嵌入式操作系统,由3Com公司的Palm Computing部门开发。
在掌上电脑和PDA市场上占有很大的市场份额,曾占据90%的PDA市场份额。 2010年04月29日惠普12亿美元收购Palm QNX 一个实时、可扩充的操作系统。
部分遵循POSIX(可移植操作系统接口)相关标准。
内核仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理。 内核非常小巧(QNX4.X约为12KB),运行速度极快。iOS 苹果推出,基于Darwin 最新:iOS8 Android Google开发的基于Linux平台的开源手机操作系统 Delta OS 是电子科技大学实时系统教研室和北京科银京成技术有限公司联合研制并开发的全中文嵌入式操作系统。
绝大部分代码由C语言编写。
已成功应用于通信、网络、信息家电等多个应用领域。pSOS ISI公司研发的产品。
模块化、高性能、完全可扩展。
1.6 嵌入式系统的应用及发展趋势
(1)嵌入式系统的应用领域 消费电子领域 通信网络领域
工业控制领域、机器人领域 交通管理与汽车电子领域 国防与航空航天领域 医疗仪器领域
(2)嵌入式系统的发展趋势
小型化、智能化、网络化、可视化 多核技术的应用 低功耗、绿色环保
云计算、可重构、虚拟化等技术被进一步应用到嵌入式系统中 嵌入式系统软件将逐渐PC化 融合趋势
微控制器MCU与SoC的结合 微控制器MCU与DSP的结合 ARM与DSP的结合
微控制器MCU与CPLD/FPGA的结合 安全性 ARM体系结构
教学目的:使学生对ARM设计思想、ARM处理器系列、ARM体系结构、ARM处理器模式、ARM内部寄存器、ARM体系的存储系统有一定的了解。
教学重点:ARM设计思想、ARM体系结构、ARM处理器模式、ARM内部寄存器。教学难点:ARM处理器模式、ARM内部寄存器。教学方法与教学手段:课堂讲授,多媒体教学。教学时间:4课时。教学内容
2.1 ARM设计思想
(1)RISC 传统的CISC(Complex Instruction Set Computing)指令集中,约20%指令占整个程序代码的80%。RISC(Reduced Instruction Set Computing)是一种设计思想,其目标是设计出一套能在高时钟频率下单周期执行、简单而有效的指令集。
RISC设计重点在于降低硬件执行指令的复杂度,而传统的CISC更侧重于硬件执行指令的功能性,使CISC指令变得复杂。
(2)RISC设计思想的实现
指令集。减少了指令种类,指令只实现简单的功能,指令长度固定。
流水线。指令的处理过程被拆分成几个更小的、能够被流水线并行执行的单元。
寄存器。更多通用寄存器,可存数据和地址,可为所有数据操作提供快速的局部存储访问。 load-store结构。处理器只处理寄存器中数据,用load和store指令完成寄存器和外存间的数据传送
(3)ARM的设计思想 较小的核。降低功耗
高的代码密度。考虑成本和物理尺寸限制
较小的处理器内核管芯(Die)面积。留给外设电路的空间较大 硬件调试技术(4)ARM微处理器的特点
体积小,功耗低,成本低,性能高; 支持Thumb/ARM指令集,兼容8/16位器件;
大量使用寄存器,指令执行速度更快; 大多数数据操作都在寄存器中完成; 寻址方式灵活简单,执行效率高; 指令长度固定。
2.2 ARM体系结构分析
(1)包含典型 的RISC 体系结构特征
统一寄存器文件加载/存储体系结构,数据处理操作只针对寄存器内容; 简单寻址模式,所有加载/存储地址只通过寄存器内容和指令字段确定。 指令长度固定,简化了指令译码。(2)还提供
可组合使用转换与算术或逻辑运算指令 自动递增和自动递减寻址模式,可优化程序循环 加载存储多个指令以最大化数据吞吐量 几乎所有指令都采取条件执行的方式(3)普林斯顿结构和哈佛结构
普林斯顿结构:也称冯·诺伊曼结构,它将程序指令存储器和数据存储器合并在一起的存储结构。ARM7系列基于普林斯顿结构。
哈佛结构:将程序指令存储和数据存储分开的存储结构。ARM9系列之后都基于哈佛结构。
(4)流水线
ARM7的三级流水线在执行单元完成了大量的工作,执行单元的工作往往占用多个时钟周期,从而成为系统性能的瓶颈。
ARM9采用哈佛架构,避免了数据访问了取指的总路线冲突,采用五级流水线设计。
五级流水线技术把三级流水线中的执行单元进一步细化,减少了在每个时钟周期内必须完成的工
作量,进而允许使用较高的时钟频率。
无论三级流水线还是五级流水线,在以下情况下都会发生阻塞: 多周期指令、跳转分支指令 中断发生
相邻指令之间的寄存器冲突:如果当前指令(A)的目的操作数寄存器和下一条指令(B)的源操作数寄存器一致,B指令就需要等A回写之后才能译码。
(5)ARM体系结构的版本
2.3 ARM处理器系列
(1)ARM处理器系列
经典ARM处理器:ARM7、ARM9、ARM10、ARM11 Cortex-A系列处理器:Cortex-A15、Cortex-A9、Cortex-A8、Cortex-A7、Cortex-A5 Cortex-R系列处理器:Cortex-R7、Cortex-R5、Cortex-R4 Cortex-M系列处理器:Cortex-M4、Cortex-M3、Cortex-M1、Cortex-M0+、Cortex-M0、CMSDK、CMSIS SecurCore处理器(2)ARM内核版本命名规则
(3)ARM7系列微处理器 a)主要特点
最高主频:130MIPS(Million Instructions Per Second); 功耗低;
代码密度高,兼容16位的微处理器; 可得到广泛的操作系统和实时操作系统支持; 众多的开发工具,优秀的调试机制; 采用3级流水线结构;
提供0.25μm、0.18μm和0.13μm的生产工艺。b)冯·诺伊曼结构:数据和指令使用同一条总线。
c)包括ARM7TDMI、ARM7TDMI-S、ARM7EJ-S和ARM720T四种类型,适用于不同的市场要求 d)ARM7TDMI ARM公司最早为业界普遍认可并广泛应用的处理器核。 T:Thumb;D:Debug;M:Multiplier;I:Embedded ICE logic。e)ARM7TDMI-S 是ARM7TDMI的可综合(synthesizable)版本(软核)。
ARM以“软”核的方式把ARM7TDMI核授权给处理器厂商,处理器厂商可进行修改和综合。这就是ARM7TDMI-S。
综合出的整个核比“硬”核大50%,电源效率降低50%。f)ARM7EJ-S 是可综合的、带有增强型DSP(E变种)和Java加速功能(J变种)的32位RISC嵌入式处理器。
主要用于数字音频播放器、带Java功能的无线手持设备、喷墨打印机、数码相机和PDA等方面。
g)ARM720T 专为使用Windows CE、Symbian OS操作系统平台设计。 主要用于数字音频播放器、喷墨打印机和数码相机等。(4)ARM9系列微处理器 a)主要特点
5级整数流水线;
单一的32位AMBA(Advanced Microcontroller Bus Architecture)总线接口; MMU支持Windows CE、Symbian OS、Linux等; 支持实时操作系统,包括VxWorks; 统一的数据Cache和指令Cache;
提供0.25μm、0.18μm和0.13μm的生产工艺。
b)包括ARM9TDMI、ARM920T、ARM940T和ARM9E四种类型。后三种含有Cache。
c)采用Harvard体系结构
指令与数据分开存储。 采用指令快存 和数据快存。
d)在相同工艺条件下,ARM9TDMI的处理能力是ARM7TDMI的两倍。e)ARM920T
Motorola MC9328MX1和Samsung S3C2410X处理器都采用ARM920T 核心。 主要应用于通信终端、3G基带和应用处理器、基于OS的平台设备、数码相机、音频/视频解码和机顶盒等。
f)ARM940T 与ARM920T相比,实现了一个更小的D-Cache、I-Cache和MPU。适于不需运行操作系统的平台。
g)ARM9E 使用单一的处理器核,提供微控制器、DSP、Java应用系统的解决方案; DSP指令集;
在0.13μm工艺下,主频可达300MIPS的性能; 集成实时跟踪调试功能; 可选的VFP9浮点处理协处理器;
高性能的AHB(Advanced High performance Bus)。(5)ARM10系列微处理器 a)主要特点
6级流水线;
在典型的0.13μm工艺下,主频可达400MIPS的性能; 单一的32位AMBA 总线接口;
MMU支持Windows CE、Symbian OS、Linux等; 统一的数据Cache和指令Cache;
提供0.25μm、0.18μm和0.13μm的生产工艺; 并行读取/写入部件。
b)包括:ARM1020、ARM10200、ARM1020E、ARM1022E、ARM1026EJ-S。c)使用ARM10TDMI处理器核,采用ARMv5T结构。d)ARM10TDMI 在相同工艺条件下,处理能力是ARM9TDMI的两倍;
采用提高时钟频率、6级流水线、转移预测逻辑、64位存储器和无阻塞的存/取逻辑等措施提升性能。
e)ARM10E。新节能模式,64位Load/Store体系,与ARM10TDMI相比具有的特点
DSP指令集;
可选的VFP10浮点处理协处理器;
在实时控制和三维图像处理时,主频可达650MFLPS(百万次浮点运算每秒)。
(6)ARM11系列微处理器
ARM1156T2-S内核、ARM1156T2F-S内核、ARM1176JZ-S内核和ARM11JZF-S内核 ARM1156T2-S内核和 ARM1156T2F-S内核 基于ARM v6指令集体系结构;
是首批含有ARM Thumb-2内核技术的产品。(7)Cortex-A系列微处理器
适于高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域。 支持传统 ARM、Thumb指令集和新的高性能紧凑型 Thumb-2 指令集。 移动互联网的支持
低功率设计,支持 Adobe Flash 10.1 高性能 NEON 引擎,广泛支持媒体编解码器 高性能
Cortex-A15:为新一代移动基础结构应用和无线基础结构应用提供高性能的解决方案。
Cortex-A9。800 MHz1 GHz 的频率下,提供的性能超过 2000 DMIPS。
Cortex-A5 低成本实现,在 400-800 MHz 的频率下,提供的性能超过 1200 DMIPS,是尺寸最小、功耗最低的 ARM 多核处理器。
多核技术:Cortex-A15、Cortex-A5和Cortex-A9 处理器都支持 ARM 第二代多核技术。 高级扩展
Thumb-2,提供最佳代码大小和性能。 TrustZone,安全扩展,提供可信计算。
Jazelle 技术,提高执行环境(如 Java、.Net、MSIL、Python 和 Perl)速度。
(8)Cortex-R系列微处理器
为具有严格的实时响应限制的深层嵌入式系统提供高性能计算解决方案。
快速。以高时钟频率获得高处理性能。
确定性。处理在所有场合都必须符合硬实时限制。 安全。系统必须可靠且可信。
成本效益。在处理器及其内存系统中都具有竞争力的成本和功耗。 应用领域
智能手机
企业系统:硬盘驱动器、联网和打印 消费电子:机顶盒、数字电视和播放器 医疗行业、工业和汽车行业的可靠系统 功能集
(9)Cortex-M系列微处理器
向上兼容的高能效、易于使用的处理器
针对成本和功耗敏感的 MCU 和终端应用的混合信号设备进行过优化。 更低的功耗,更长的电池寿命。
高密度指令集,更小的代码,更低的硅成本。
RISC 处理器内核高性能32 位CPU具有确定性的运算低延迟3 阶段管道Thumb-2 技术16/32 位指令的最佳混合小于8 位设备3 倍的代码大小对性能没有负面影响低功耗模式集成的睡眠状态支持多电源域基于架构的软件控制嵌套矢量中断控制器(NVIC)低延迟、低抖动中断响应不需要汇编编程以纯C 语言编写的中断服务例程工具和RTOS 支持广泛的第三方工具支持Cortex 微控制器软件接口标准(CMSIS)最大限度地增加软件成果重用CoreSight调试和跟踪JTAG 或2 针串行线调试(SWD)连接支持多处理器支持实时跟踪(10)SecurCore系列微处理器
为安全要求较高应用设计。智能卡
SIM、ID、银行业、付费电视、公共交通、电子政务
2.4 ARM处理器模式
(1)32位ARM处理器工作状态
32位ARM处理器有三种工作状态 ARM状态。对应32位ARM指令集 Thumb状态。对应16位Thumb指令集 Jazelle状态。对应8位的Jazelle指令集
用于在处理器指令层次对JAVA加速
只有进入特定的状态,相应的指令集才有效。CPSR的J(Jazelle)和T(Thumb)位反映程序的状态。Thumb-2 与现有 ARM 和 Thumb 解决方案向后兼容,同时扩展了 Thumb 指令集的可用功能; 使用少于 31% 的内存以降低系统成本; 提供比现有高密度代码高出 38% 的性能。(2)64位ARM处理器工作状态
ARMv8架构
两种主要执行状态:AArch64, AArch32 AArch64:引入了一套新的指令集“A64”专门用于64位处理 AArch32:兼容现有的32位ARM指令集 ARMv8架构支持三个主要指令集
A32(或 ARM):32 位固定长度指令集
T32(Thumb):以 16 位固定长度指令集的形式引入,在引入 Thumb-2 技术时增强为 16 位和 32 位混合长度
A64:提供与 ARM 和 Thumb 指令集类似功能的64位固定长度指令集(3)ARM处理器运行模式
用户模式(usr):ARM处理器正常的程序执行状态。 快速中断模式(fiq):用于高速数据传输或通道处理 外部中断模式(irq):用于通用的中断处理。 管理模式(svc):操作系统使用的保护模式。
数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
系统模式(sys):运行具有特权的操作系统任务。
未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
运行模式可通过软件改变,也可通过外部中断或异常处理改变。用户模式之外的模式称为非用户模式或特权模式。除用户模式和系统模式之外的5种称为异常模式,常用于处理中断和异常、访问受保护的系统资源等情况。
2.5 ARM体系的异常处理
(1)ARM体系中3种控制程序执行流程的方式: 顺序执行 跳转分支指令
异常中断:处理器暂时中断当前数据流的现象。(2)对异常的响应。ARM处理器执行完当前指令后: 进入与特定的异常相应的操作模式;
将引起异常指令的下一条指令的地址保存到新模式的R14中;
将CSPR原值保存到新模式的SPSR中;
通过设置CSPR的第7位来禁止IRQ。如果为FIQ中断,则还要设置CSPR的第6位来禁止FIQ;
给PC强制赋向量地址值。(3)中断向量表
指定了异常中断及其处理程序的对应关系,它通常存放在存储地址的低端。
大小为32字节,其中每个异常中断占据4字节空间,用于存放一个跳转指令或者一个向PC寄存器中赋值的指令。
(4)异常优先级:当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断。(5)从异常返回
将连接寄存器LR的值减去相应偏移量后送到PC中; 将SPSR复制回CPSR中;
若在进入异常处理时设置了中断禁止位,则要清除。通过普通指令控制PC返回
软件中断的返回指令 MOVS R15, R14;将链接寄存器内容移入PC并转换模式 IRQ,FIQ和预取异常终止中断的返回指令 SUBS R15, R14, #4 数据终止异常的返回指令 SUBS R15, R14, #8;异常在导致异常的指令的下一条指令后产生
2.6 ARM内部寄存器
(1)寄存器结构
32位ARM有31个32位通用寄存器,6个状态寄存器。通用寄存器可用来保存数据和地址信息,用R为前缀加寄存器序号表示
15个通用寄存器(R0~R14)、一个或两个状态寄存器及程序计数器可在任意时间和处理器模式下被访问,有些处理器模式拥有自身独立的寄存器
(2)通用寄存器
分成三类:
R0~R7:未分组寄存器。每个未分组寄存器在所有的处理器模式下都表示同一个物理寄存器。R8~R14:分组寄存器。每个分组寄存器与一个用户模式的寄存器对应。R15:程序计数器PC。
分组寄存器R8~R14可分为两组:
R8~R12:每个寄存器对应两组不同的物理寄存器,一组是FIQ模式下的,记为R8_fiq~R12_fiq, 另一组是除FIQ模式外的:R8_usr~R12_usr。
R13~R14:分别对应6个不同的物理寄存器。用户模式和系统模式共用一个寄存器,另外5个对应其余5种。
R13 _
R13:被称为堆栈指针SP,但没有任何指令强制性使用R13作为堆栈指针
R14又被称为链接寄存器LR(Link Register)。当调用子程序时,返回地址被自动保存到R14。由于ARM采用了多级流水线技术,所以当正常读取PC值时,该值为当前指令地址值加8,或是加12。
2.7 ARM体系的存储系统
(1)地址空间
将存储器看作是从零地址开始的字节的线性组合 0-3字节:第1个存储的字数据 4-7字节:第1个存储的字数据 依次排列(2)存储器格式 大端格式
小端格式
(3)存储器访问对准
无论取指还是内存访问都以字、半字或字节对准访问 a)非对齐的指令预取操作
ARM状态:将一个非对齐地址写入PC,数据的第0位和第1位被忽略,PC的bit[1:0]为0 Thumb状态:数据的第0位被忽略,PC的bit[0]为0 b)非对齐地址内存的访问操作(LOAD/STORE操作)
执行结果不可预知
忽略字单元地址低两位的值,半字单元最低位的值(分别对应访问字和半字)
在LDR和SWP指令中,对存储器访问忽略造成地址不对齐的低地址位,然后使用这些低地址位控制装载数据的循环 ARM指令系统及程序设计基础
教学目的:使学生对ARM指令系统及程序设计的基础知识有一定的了解。教学重点:ARM指令系统。
教学难点:ARM程序设计的基础知识。教学方法与教学手段:课堂讲授,多媒体教学。教学时间:4课时。教学内容
3.1 ARM寻址方式
(1)寻址方式
处理器根据指令中给出的地址信息寻找物理地址的方式。寻找操作数或操作数地址的方式。
(2)立即寻址
也叫立即数寻址,操作数本身在指令中给出,该操作数被称为立即数。例如: ADD R0, R0, #1;R0R0+1 立即数须以“#”为前缀,对于十六进制表示的立即数,还需在“#”后加上“0x”或“&”。(3)寄存器寻址
操作数存在寄存器中。例如: ADD R0, R1, R2;R0R1+R2(4)寄存器间接寻址
以寄存器的值作为操作数地址。例如: ADD R0, R1, [R2]
;R0 R1+[R2](5)基址变址寻址
a)基址加偏移的寻址方式
将寄存器内容与指令中给出的地址偏移量相加,得到操作数的有效地址。如: LDR R0, [R1, #4];R0 [R1+4]
前变址:基址加变址作为操作数地址。
后变址:基址作为操作数的地址,传送后自动更新基址寄存器的值。
b)基址加索引的寻址方式
将基址寄存器的值与索引寄存器的值相加,形成操作数的有效地址。例如: LDR R0, [R1, R2]
;R0 [R1+R2] c)多寄存器寻址
一条指令可完成多个(最多16个)寄存器值的传送。例如:
LDMIA R0, {R1, R2, R4};R1 [R0] 22
;R2 [R0+4];R4 [R0+8](6)寄存器移位寻址
操作数为寄存器中数做相应的移位而得到 例如:
ARM中的移位或循环移位操作: LSL:逻辑左移(Logical Shift Left) LSR:逻辑右移(Logical Shift Right)ADD
R0, R1, R2, LSL #3;R0R1+8×R2 ASR:算术右移(Arithmetic Shift Right)。移位过程中保持符号位不变,若源操作数为正数,则字的高端空出的位补0。若源操作数为负数,则字的高端空出的位补1。
ROR:循环右移(Rotate Right)。从字的最低端移出的位依次填入字的高端空出的位。 RRX:扩展的循环右移(Rotate Right Extended)。操作数向右移一位,左侧空位由状态寄存器C位填充。当移位的类型为RRX时,无需指定移位的位数,其它的则须指定移位的位数。(7)相对寻址
以PC当前值作为基地址,指令中的地址标号作为位移量,两者相加后得到操作数的有效地址。例如:
BL
NEXT
MOV „„
PC, LR
;从子程序返回 NEXT
;跳转至子程序 NEXT „„
(8)堆栈寻址
a)堆栈:按先进后出(FILO)的方式工作,使用堆栈指针(Stack Pointer, SP)指示当前操作位置。b)根据栈指针的指向位置可将堆栈分为
满堆栈:SP指向最后压入堆栈的数据。 空堆栈:SP指向下个将放入数据空位置
c)根据堆栈的生成方式可将堆栈分为
递增堆栈(Ascending Stack):堆栈由低地址向高地址生成。
递减堆栈(Descending Stack):由高地址向低地址生成。d)ARM支持四种类型堆栈工作方式
满递增堆栈:SP指向最后压入的数据,且由低地址向高地址生成。满递减堆栈:SP指向最后压入的数据,且由高地址向低地址生产。
空递增堆栈:SP指向下个将放入数据的空位置,且由低地址向高地址生成。空递减堆栈:SP指向下个将要放入数据的空位置,且由高地址向低地址生成。
3.2 ARM指令集
(1)ARM指令集分类 加载/存储指令
数据处理指令 分支指令
状态寄存器访问指令 异常/中断指令 协处理器指令(2)ARM指令的特点 所有指令都是32bit;
大多数指令都在单周期内完成; 所有指令都可以条件执行; load/store体系结构;
指令集可以通过协处理器扩展。(3)ARM指令的格式
(4)ARM指令的条件执行
所有ARM指令都可包含一个可选的条件码,只有当CPSR中条件标志位满足指定条件时,指令才会被执行。否则以NOP指令通过流水线。
(5)加载/存储指令
Load:将内存中数据装载到寄存器 Store:将寄存器中的数据存入内存 a)单寄存器传输指令
LABEL:相对PC的寻址方式。编译器在汇编时,会将标号LABEL汇编成PC的偏移量存入该指令的立即数字段。
B: Byte;S: Sign;H: Half LDR/STR:读/写一个32bit字到/从一个32位寄存器,要求读/写地址字对齐。LDRB:内存8bit字节32bit寄存器;不要求地址对齐,寄存器高24位清零。STRB:寄存器低8位内存的某个地址;不要求地址对齐。
LDRH:16bit半字 32bit寄存器;要求地址半字对齐,寄存器的高16bit清零。STRH:寄存器低16bit内存;要求地址半字对齐。
LDRSH:有符号16bit半字32bit寄存器中;要求地址半字对齐,寄存器高16bit根据符号位扩展。
LDRSB:有符号8bit字节32bit寄存器中;不要求地址对齐,寄存器高24bit根据符号位扩展。
“数据”一列指的是这条指令所访问的存储单元
“基址寄存器”一列的内容是指执行指令之后“基址寄存器”的内容 b)多寄存器传输指令
!:表示执行完操作后将变化之后的地址值写入基址寄存器
^:对于LDM操作,如恢复的寄存器中含有PC(R15)寄存器,则指令执行的同时CPU自动将SPSR拷贝到CPSR中,例如:
LDMFD {R0-R12, LR, PC}^ 数据的传送发生在User用户模式下的寄存器,而非当前模式寄存器,例如:
LDMDB SP, {R0-LR}^ 例如:
STMIA R0!, {R1-R5};以R0为地址指针,将R1-R5保存到内存,指针向上移动
c)交换指令
SWP {B} {
SWP R1, R2, [R3];R1[R3] ,[R3] R2 SWP R1, R1, [R2];R1与[R2]内容互换(6)数据处理指令
a)数据传送指令
MOV {cond} {S} Rd, Operand 例如: MOV R1, R0 MOVEQ PC, R14
;将R14值传到PC b)数据取反传送指令 MVN {cond} {S} Rd, Operand 例如:
MVN R1, #2;将立即数2取反送至R1 c)算术运算指令
ADD、ADC ADD|ADC {cond} {S} Rd, Oper1, Oper2 例如: ADDS ADCS ADCS ADC R0, R4, R8 R1, R5, R9;加低端的字;带进位加第二字
R2, R6, R10;带进位加第三字 R3, R7, R11;带进位加第四字
可实现 128位加法 SUB:减法指令
SUB {cond} {S} Rd, Oper1, Oper2 SBC:带借位减法指令
SBC {cond} {S} Rd, Oper1, Oper2 例:SBCS R0, R1, R2;R0=R1–R2–C RSB:反向减法指令
RSB {cond} {S} Rd, Oper1, Oper2 操作数2减去操作数1,例如: RSB R0, R1, R2;R0 = R2 – R1 RSC:带借位的逆向减法指令 RSC {cond} {S} Rd, Oper1, Oper2 d)逻辑运算指令 AND:与
AND {cond} {S} Rd, Oper1, Oper2 ORR:或
ORR {cond} {S} Rd, Oper1, Oper2 EOR:异或
EOR {cond} {S} Rd, Oper1, Oper2 e)比较指令 CMP CMP {cond} Operand1, Operand2 CMN:反值比较 CMN {cond} Operand1, Operand2 将第一个数与第二个数的反值进行比较,相当于完成两个数相加。例如: CMN R1, R0;R1+R0,并设置CPSR f)测试指令 TST TST {cond} Operand1, Operand2
把两个操作数按位进行与运算,根据结果更新CPSR。
TEQ TEQ {cond} Operand1, Operand2 把两个操作数按位进行异或运算,根据结果更新CPSR g)乘法指令 MUL MUL {cond} {S} Rd, Oper1, Oper2 RdOperand1×Operand2。例如: MUL
R0, R1, R2 MLA MLA {cond} {S} Rd,Oper1,Oper2,Oper3 RdOperand1×Operand2+Operand3 例如:
MLA R0, R1, R2, R3;R0 = R1×R2+R3;R0 =R1×R2 UMULL:64位无符号数乘法指令 UMULL {cond} {S} Rd_L, Rd_H, Operand1, Operand2 Rd_H:Rd_L Operand1×Operand2 例如: UMULL R0, R1, R2, R3;R0 =(R2×R3)的低32位;R1 =(R2×R3)的高32位 UMLAL: 64位无符号数乘加指令 UMLAL {cond} {S} Rd_L, Rd_H, Operand1, Operand2 Rd_H:Rd_L+= Operand1×Operand2 例如:
UMLAL
R0, R1, R2, R3;R0 =(R2×R3)的低32位+R0;R1 =(R2×R3)的高32位+R1 SMULL:64位有符号数乘法指令 SMULL {cond} {S} Rn_L, Rn_H, Operand1, Operand2 Rd_H:Rd_L Operand1×Operand2 SMLAL: 64位有符号数乘加指令 SMLAL {cond} {S} Rn_L, Rn_H, Operand1, Operand2 Rd_H:Rd_L+= Operand1×Operand2(7)分支指令
a)B(分支指令)和 BL(带链接分支指令)B {cond} LABEL BL {cond} LABEL
允许向前或向后跳转最高32MB。
BL:带返回的分支指令,用于调用一个将其返回地址存入链接寄存器的函数。例如:
SUBPRG BL …… SUBPRG „„;<子程序代码> MOV PC, LR;返回
b)BX(分支并可选地交换指令集)和BLX(带链接分支并可选地交换指令集)BX {cond} Rm BLX {cond} LABEL | Rm Rm:转移地址,bit[0]为0时,目标地址处为ARM指令,否则为Thumb指令。BX 和 BLX是唯一可使用的切换指令集的方法。
BX 和 BLX指令执行与B和BL指令相同的分支操作,并可从ARM指令集切换到THUMB指令集。
c)长跳转
通过向PC寄存器中写目标地址值,可实现在4GB地址空间中进行任意跳转。例如: MOV MOV LR, PC;保存返回地址
R15, #0x00110000;无条件转向0x110000(8)状态寄存器访问指令 a)MRS MRS {
R3, CPSR;CPSRR3
x:扩展域,即PSR[15:8] s:状态域,即PSR[23:16] f:标志域,即
;设置所有标志位
(9)异常/中断指令(续)a)SWI SWI {
SWI 0x01
;调用编号为01的系统例程
b)BKPT BKPT <16位立即数> 产生软件断点中断,可用于程序调试。例如 BKPT 0xF010(10)协处理器指令 a)CDP CDP {
CDP P6, 2, C5, C10, C3, 16
;激活协处理器P6的操作,操作码1和操作码2值分别为2和16,目标寄存器为C5,源操作数寄存器为C10和C3 b)MRC和MRC MRC | MCR {
STC:存储器协处理器寄存器 前变址格式
LDC | STC {
LDC | STC {
(1)Thumb指令集的特点
是ARM指令集压缩形式的子集,所有Thumb指令均有对应的ARM指令。 采用16位二进制编码,代码密度小。
执行Thumb指令时,先动态解压缩,然后作为标准的ARM指令执行。 如何区分指令流取决于CPSR的位T。 大多Thumb数据处理指令采用2地址格式。 移位操作变成单独指令。
没有协处理器指令、单寄存器交换指令、乘加指令、64位乘法指令及程序寄存器处理指令。 仅分支指令B有条件执行功能。
(2)Thumb状态切换
a)ARM状态进入Thumb状态 执行带状态切换的转移指令BX。例如: BX R0;若R0最低位为1,则转Thumb状态
异常返回。通常用于返回到进入异常前所执行的指令流,而不是特地用于切换到Thumb模式。适用于异常前执行的是Thumb指令。
b)Thumb 状态进入ARM状态 执行BX指令。
利用异常进入ARM指令流。(3)Thumb指令寄存器的使用 对R0~R7具有全部访问权限。
R8~R12的访问受到限制,只能通过MOV、ADD和CMP访问。
在每一种特权模式下都有一组SP、LR和SPSR,分别对应ARM状态的R13、R14和R15。(4)Thumb指令与ARM指令的相似点 Load/Store结构。
支持8位字节、16位半字和32位字数据类型。 半字以2字节边界对准,字以4字节边界对准。(5)Thumb指令与ARM指令差异点
跳转指令:条件跳转在范围上有更多的限制,转向子程序只具有无条件转移。
数据处理指令:对通用寄存器进行操作,操作结果需放入其中一个操作数寄存器。因此,许多Thumb指令采用2地址格式,ARM数据处理指令大多采用3地址格式。 单寄存器加载和存储指令:只能访问R0~R7。
PUSH和POP指令使用堆栈指针R13作为基址实现满递减堆栈,除R0~R7外,PUSH指令还可存储R14,POP指令可加载程序指令PC。
大多数Thumb指令是无条件执行的,所有ARM指令都是条件执行的。 由于采用高密度编码,Thumb指令格式没有ARM指令格式规则。(6)Thumb分支指令
a)B 指令——目标为Thumb代码 B <条件码>
B指令是Thumb指令集中唯一可条件执行的指令。PC = PC +(SignExtend(signed_immed_8)<< 1)B
3.4 3.5 35
3.6 嵌入式系统设计与开发过程
(1)嵌入式软件开发的特点 a)需要交叉开发环境
交叉开发环境:实现编译、链接和调试应用程序代码的环境,它分散在有通信连接的宿主机与目标环境之中。
宿主机(Host)是一台通用计算机,一般是PC机。
目标机(Target)可以是嵌入式应用软件的实际运行环境,也可以是能替代实际环境的仿真系统。
交叉软件开发工具包括:交叉编译器、交叉调试器和模拟软件等。b)引入任务设计方法
嵌入式应用系统以任务为基本执行单元 用多个并发的任务代替通用软件的多个模块 c)需要固化程序 d)软件开发难度大
实时性。
稳定性、可靠性、抗干扰性。(2)软硬件平台的选择 选择处理器需考虑的因素 处理性能 技术指标、功耗
软件支持工具、是否内置调试工具 供应商是否提供评估板 软件平台的选择
操作系统。开发工具,与硬件接口难度,内存,是否提供硬件驱动程序,可裁剪性、实时性等
编程语言。通用性、可移植性、执行效率、可维护性等 集成开发环境
(3)嵌入式系统设计与开发流程 需求分析 体系结构设计
硬件的设计、制作及测试 软件的设计、实现及测试 系统集成
系统性能测试及可靠性测试
STM32微控制器
教学目的:使学生对STM32的性能指标、硬件结构有一定的了解。教学重点:STM32的硬件结构。教学难点:STM32的硬件结构。
教学方法与教学手段:课堂讲授,多媒体教学。教学时间:4课时。教学内容
4.1 STM32微控制器的性能指标
(1)STM32F103的主要功能
ARM Cortex-M3核 最高主频72MHz 512kB Flash、64kB RAM 1个USB、1个CAN、5个USART、3个SPI、2个I2C、2个I2S、1个SDIO、112个GPIO
3个ADC、2个DAC、8个定时器
FSMC总线(支持NOR,NAND,SRAM) 12通道DMA控制器
Serial wire debug(SWD)、JTAG 接口 启动:用户Flash、系统存储器、SRAM(2)JC-STM32CB核心板
核心芯片:ST STM32F103ZET6 8M NOR Flash:SST39VF6401,16bit 128M NAND Flash:K9F1G08U0C,8bit 8MHz CPU晶振,32768Hz RTC晶振 1个10M/100M以太网接口 1路音频输出和1路音频输入 1个10-pin JTAG调试接口 1个4-pin SWD串行调试接口 Reset按钮、自定义LED,电源LED 1个精密可调电阻连接到片内ADC输入
使用CPLD扩展IO口及地址译码,型号EPM240T100C5N 板载10/100M网卡控制器,型号DM9000AEP,16bit总线接口
STM32
第二篇:嵌入式系统设计报告
嵌入式系统设计实验报告
班 级:学 号:姓 名:成 绩:指导教师:
20090612 2009112107 侯金钟 武俊鹏、刘书勇 1.实验一
1.1 实验名称
嵌入式系统硬件开发环境
1.2 实验目的
1.熟悉UP-net3000实验平台。
2.超级终端设置及BIOS 功能使用。
1.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
1.4 实验内容及要求
熟悉UP-net3000实验平台的硬件电路和外设,ARM JTAG的安装和使用,利用超级终端检验外设的工作状态。
1.5 实验设计与实验步骤
1.建立工程
(1)运行ARM SDT 2.5 集成开发环境(ARM Project Manager).(2)在新建的工程中,如图1A-2 所示,选中工程树的“根部”。
(3)因为开发板上的嵌入式处理器ARM7TDMI 没有浮点处理器,所以,如图1A-3 所
示,在弹出的对话框中设置Floating Point Processor 为none,并保持其他的设置不变。(4)选中工程树的“根部”,通过菜单Project | Tool Configuration for work1.apj | asmlink | Set,对整个工程的连接方式进行设置。(5)在弹出的对话框中,选中Entry and Base 标签,如图1A-4 所示,设置连接的Read-Only(只读)和Read-Write(读写)地址。
(6)选择Linker Configuration 的ImageLayout 标签,(7)选择Project | Edit Project Tamplete 菜单,弹出Project Template Editor 对话框。
(8)选择Project | Edit Variables for work1.apj,弹出Edit Variables for work1.apj 对话框。
2.进行程序的在线仿真、调试
1.6 实验过程与分析
熟悉UP-net3000实验平台的硬件电路和外设,安装了ARM JTAG,利用超级终端检验了外设的工作状态。
1.7 实验结果总结
软件安装成功,结果显示正常。
1.8 心得体会
通过此次试验,我对ARM的环境的功能有一定的了解与完善。对试验台有了基本的认识与使用。
2.实验二
2.1 实验名称
嵌入式系统软件开发环境
2.2 实验目的
1.熟悉ADS1.2 开发环境,学会ARM 仿真器的使用。
2.使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
2.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
2.4 实验内容及要求
本次实验使用ADS 集成开发环境。新建一个简单的工程文件,并编译这个工程文件。学习ARM 仿真器的使用和开发环境的设置。下载已经编译好的文件到嵌入式控制器中运行。学会在程序中设置断点,观察系统内存和变量。
2.5 实验设计与实验步骤
(1)运行ADS1.2 集成开发环境(CodeWarrior for ARM Developer Suite)。
(2)在新建的工程中,选择Debug 版本,使用Edit | Debug Settings菜单对Debug 版本进行参数设置。(3)在Debug Settings 对话框中选择Target Settings 项。在Post-linker一栏中选择ARM from ELF。
(4)在Debug Settings 对话框中选择ARM Linker 项
(5)在第四步中如果选择简单的地址连接设置,在Debug Settings 对话框中选择ARM Linker 项
(6)回到的工程窗口中,选择Release 版本,使用Edit | Release Settings 菜单对Release 版本进行参数设置。(7)参照第(3)、(4)、(5)、(6)步在Release Settings 对话框中设置Release版本的Post-linker、连接地址范围、入口模块和输出文件。(8)回到如图1B-3 所示的工程窗口中,选择Targets 选项卡,如图1B-11 所示。选中DebugRel 版本,按Del 键将其删除。DebugRel 子树是一个折衷版本,通常用不到,所以在这里删除。
2.6 实验过程与分析
1)回到工程窗口选中Debug 版本,执行菜单Project | Make 对工程进行编译连接。(2)在ADS 中执行菜单Project | Debug 启动ADS1.2 的调试工具AXD。(3)在AXD 中执行菜单Options | Configure Target 对AXD 进行设置。(4)点Select 按钮选择远程连接为ARM ethernet driver,点Configure 按钮输入仿真器的IP 地址。
(5)等待程序装载完毕以后,通过Execute | Go 菜单以及Execute | Stop(或者工具栏中的相应按钮)运行或暂停程序。程序暂停后在窗口中将显示出程序暂停的位置。(6)通过Execute | Step 菜单(或者工具栏中的相应按钮)可以单步运行程序。
(7)程序停止后可以通过Processor Views | Sources 菜单查看源文件,并可在适当位置按F9 设置端点。
(8)使用在Processor View 菜单下的Registers、Variables 和Memory 命令可以查看工作寄存器或者内存变量。读者可以逐一地尝试,为以后调试程序打下基础。
2.7 实验结果总结
超级终端输出“Hello World!”。
2.8 心得体会
基本了解了ADS1.2的配置条件,学会了ARM仿真器的使用方法。
3.实验三
3.1 实验名称
键盘及LED实验
3.2 实验目的
1.学习键盘及LED 驱动原理。
2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。
3.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
3.4 实验内容及要求
通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上显示出来。要求从右至左循环显示至少四位数字。
基本功能实现之后可考虑实现从左至右显示四位及四位以上数字(最大八位),并可设置清零键等扩展功能。
3.5 实验设计与实验步骤
利用所给的基础代码进行调试,观察输出结果,结合指导书和教材掌握基本原理和源代码的编写方式。根据实验的要求设计函数流程,并反复调试,实现功能。1.新建工程,将“Exp3 键盘及LED 驱动实验”中的文件添加到工程。2.定义ZLG7289 寄存器(ZLG7289.h)
#define ZLG7289_CS(0x20)//GPB5 #define ZLG7289_KEY(0x10)//GPG4 #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)3.编写ZLG7289 驱动函数(ZLG7289.c)4.定义键盘映射表:(Keyboard16.c)
unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//64 键值映射表,通过查找键盘映射表来确定键盘扫描码对应的按键值。
5.定义键值读取函数。(Keyboard16.c)6.编写主函数,将按键值在数码管上显示。
3.6 实验过程与分析
利用键盘驱动函数实现基本数字输入,然后利用循环左移函数实现输入数字做一样功能,并通过改变函数中相应delay的值来消除键盘按键带来的抖动。
3.7 实验结果总结
按键值可以在LED上显示出来。要求从右至左循环显示八位数字,同时可以复位清零。达到实验的效果。
3.8 心得体会
通过本次实验,我了解了LED的显示屏幕的数字的移位功能,这个功能不止可以用一个方法实现,而循环左移是其中比较巧妙且省力的一种,在遇到类似情况的时候,可以优先考虑能不能利用到文件中已经存在的函数,这样可以不必自己编写函数,省时省力。是一种可靠的方法。4.实验四
4.1 实验名称
电机转动控制及中断实验
4.2 实验目的
1.熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置。
2.编程实现ARM系统的PWM输出和I/O输出,前者用于控制直流电机,后者用于控制步进电机。
3.了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。
4.了解44B0处理器上中断的应用。5.学习在44B0处理器上中断的应用。
6.进一步熟悉平台外围硬件及其驱动程序的编写。
4.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
4.4 实验内容及要求
1.学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM 知识,掌握 PWM 的生成方法,同时也要掌握 I/O的控制方法。
2.编程实现ARM芯片的一对PWM输出用于控制直流电机的转动,通过A/D旋钮控制其转动方式。
3.编程实现ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。
4.通过键盘控制直流电机与步进电机的切换。5.设置并启动定时器。
6.设置中断,编写定时器中断服务程序,对中断次数进行计数并在LED上显示结果。
4.5 实验设计与实验步骤
1.添加并打开工程。
2.进行直流电机初始化设置和代码编写。3.进行步进电机初始化设置和代码编写。
4.对Timer3编程,编写定时器中断服务程序,完成对中断次数的计数。5.编写LED计数显示函数,使LED能正确计数并显示0-9999。6.编写中断初始化函数和中断响应函数。7.终端下载测试。
4.6 实验过程与分析 1.对直流电机进行编程和测试,掌握转速和旋转方向的设定方法。
2.对步进电机进行编程和测试,掌握ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。
3.对主函数进行编程,用键盘响应直流电机与步进电机的切换控制。
4.掌握中断相关语句的应用,弄清定义的中断向量、中断向量号,编写中断响应函数,并完成中断响应控制。
4.7 实验结果总结
实现了直流电机与步进电机的基本设置和控制,可以通过键盘控制电机之间的切换。完成了中断的响应和定时中断。当对其中一个旋钮转动时,就可以由直流电机转换成步进电机的转换,达到实验的效果。
4.8 心得体会
通过本次实验,我了解了直流电机和步进电机的工作原理,同时也知晓了电机间的转换过程,了解其中的道理内涵,熟悉了ARM自带的A/D转换器的工作原理及编程方法,了解了中断的意义和实现方法,实现了简单了中断处理程序。同时我也收获了很多关于ARM处理机的相关知识。
5.实验五
5.1 实验名称
触摸屏驱动实验
5.2 实验目的
1.了解触摸屏的基本概念与原理。
2.理解触摸屏与LCD的关系。3.编程实现对触摸屏的控制。
4.熟悉用 ARM 内置的 LCD控制器驱动 LCD。
5.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
5.4 实验内容及要求
1.了解触摸屏基本原理,理解对触摸屏进行输出标定、与LCD显示器配合的过程。2.通过编程实现触摸两点自动在两点间划直线。3.通过编程实现在触摸屏上动态画出曲线。5.5 实验设计与实验步骤
1.添加并打开工程。
2.在头文件中定义宏和常量及驱动函数。
#define ADS7843_CTRL_START 0x80 #define ADS7843_GET_X 0x50 #define ADS7843_GET_Y 0x10 #define ADS7843_CTRL_12MODE 0x0 #define ADS7843_CTRL_8MODE 0x8 #define ADS7843_CTRL_SER 0x4 #define ADS7843_CTRL_DFR 0x0 #define ADS7843_CTRL_DISPWD 0x3 // Disable power down #define ADS7843_CTRL_ENPWD 0x0 // enable power down #define ADS7843_PIN_CS(1<<6)//GPF6 #define ADS7843_PIN_PEN(1<<5)//GPG5 /////////触摸屏动作//////// #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 //触摸屏单击 #define TCHSCR_ACTION_DBCLICK 2 //触摸屏双击 #define TCHSCR_ACTION_DOWN 3 //触摸屏按下 #define TCHSCR_ACTION_UP 4 //触摸屏抬起 #define TCHSCR_ACTION_MOVE 5 //触摸屏移动
#define TCHSCR_IsPenNotDown()(rPDATG&ADS7843_PIN_PEN)(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)//采样x 轴电压值,数据为12 位,参考电压输入模式为差分模式,允许省电模式
#defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)int TchScr_Xmax=1840,TchScr_Xmin=176, TchScr_Ymax=195,TchScr_Ymin=1910;//触摸屏返回电压值范围 #defineADS7843_CMD_X 3.校准触摸屏坐标,进行坐标转换。
4.实现触屏取点并显示功能。
将触摸动作及触摸点坐标在超级终端上显示出来。5.实现两点间自动划线功能。6.实现触摸屏动态划线功能。
可以使用TchScr_GetScrXY()函数(第三个参数为0)来获得液晶屏的x、y 方向的电压
范围,分别点触摸屏有效面积的左上角和右下角,得到下列参数:
TchScr_Xmax=1840;TchScr_Xmin=176;TchScr_Ymax=195;TchScr_Ymin=1910;//此数值仅供参考,请以实际校对为准
5.6 实验过程与分析 1.在定义触屏响应功能的函数中对点击触屏进行响应函数的修改,在其中添加修改点颜色的函数,修改得到的触摸点的颜色,并显示在LCD上。
2.获取第一个点坐标并储存,获取第二个点坐标并储存,由编写的划线函数取得储存的两点间直线上所有点的坐标,并对其改变颜色,显示在LCD上,即完成划直线功能。
3.将划线函数应用到响应触屏移动消息的函数下,即可对连续获得的触摸坐标进行连续的画短直线,连接成曲线,完成动态划线功能。
5.7 实验结果总结
了解了触摸屏响应动作消息的函数的工作原理,通过修改实现了触摸屏响应不同动作进行画点、划线、动态划线的功能。验证触摸屏的灵敏度的实验。
5.8 心得体会
通过这次实验,我基本掌握了通过编程驱动触摸屏以及触摸屏响应时间,实现了触摸屏对不同动作消息的响应。同时也知晓了在触摸屏上的描点画线的实现,但是由于不知名的原因,描点画线的误差较大,位置偏差较大,同时触摸屏有时会不灵敏,出现时好时坏的现象,但是由于我们的辛勤钻研,最终克服了这个困难,实现了最后的触摸屏的实现。
6.实验六
6.1 实验名称
UCOS-Ⅱ在ARM微处理器上的裁剪
6.2 实验目的
1.了解UCOS-Ⅱ内核的主要结构。
2.掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法。3.学习如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。
4.通过对UCOS-Ⅱ配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对UCOS-Ⅱ的裁剪。
6.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
6.4 实验内容及要求
对UCOS-Ⅱ内核进行裁剪并移植到ARM7微处理器上。
6.5 实验设计与实验步骤 1.按照要求,载入STARTUP目录下文件,完成系统初始化、环境配置。2.载入UCOS-Ⅱ的全部源码,与处理器架构相关的文件位于arch目录下。3.在os_cpu.h中编写与处理器和编译器相关的代码。
4.编写os_cpu_c.c等6个与操作系统相关的函数。5.编写os_cpu.asm等4个与处理器相关的函数。
6.6 实验过程与分析
按照实验步骤进行,得到了需要的系统。
6.7 实验结果总结
按照要求进行了裁剪,得到了满足需要又紧凑的应用软件系统。
6.8 心得体会
通过本次实验,我了解了UCOS-Ⅱ内核的主要结构,掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法,学会了如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。
7.实验七
7.1 实验名称
UCOS-Ⅱ在ARM微处理器上的移植和编译
7.2 实验目的
1.了解UCOS-Ⅱ内核的主要结构。
2.掌握将UCOS-Ⅱ内核移植到ARM7处理器上的基本方法。
7.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
7.4 实验内容及要求
1.将UCOS-Ⅱ内核进行移植到ARM7微处理器上。
2.编写两个简单任务,在超级终端上观察两个任务的切换。
7.5 实验设计与实验步骤
1.该实验的文件分为两类,其一是 STARTUP 目录下的系统初始化、配置等文件,其二是 UCOS-Ⅱ的全部源码,arch 目录下的 3 个文件是和处理器架构相关的。
2.设置 os_cpu.h 中与处理器和编译器相关的代码。
3.用 C 语言编写 6 个操作系统相关的函数(OS_CPU_C.C)。4.用汇编语言编写 4 个与处理器相关的函数(OS_CPU.ASM)。5.编写一个简单的多任务程序来测试一下移植是否成功。6.编译并下载移植后的 UCOS-Ⅱ。
7.6 实验过程与分析
1.按照实验步骤进行,将µC/OS-II 内核移植到了ARM7 微处理器上。2编写了两个简单任务,在超级终端上观察两个任务的切换。
7.7 实验结果总结
将µC/OS-II 内核顺利移植到了ARM7 微处理器上。
7.8 心得体会
通过本次实验,使我更加了解了µC/OS-II 内核的主要结构,掌握了ARM的C语言和汇编语言的编程方法,了解了ARM7处理器结构,掌握了将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。
8.实验八
8.1 实验名称
综合实验
8.2 实验目的
对前七次实验进行总结,应用之前所学的知识,将前几次实验内容结合起来,完成键盘,LED,触摸屏,直流电机,步进电机各种功能的组合。实现一个较为全面的功能结构。
8.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
8.4 实验内容及要求
对前七次实验进行总结,应用之前所学的知识,完成自拟的嵌入式系统,要求综合前期基础实验的各种功能。
8.5 实验设计与实验步骤
1.添加并打开工程。2.进行LCD设计,在LCD显示屏输出文本。
3.进行LED及键盘设计,完成LED输出显示功能和键盘输入功能。4.进行电机控制设计,完成键盘控制电机转动功能。5.进行中断设计,完成定时中断功能。
6.进行触摸屏设计,完成触摸屏感应和划线功能。7.进行裁剪和移植功能设计和完成。
8.6 实验过程与分析
1.完成LCD显示功能,在LCD显示屏上输出文本:“Hello World!”。2.进入界面触屏控制选择功能,实现触屏选择功能。
3.自定义四种种功能,第一为电机控制,从键盘读取命令,并将功能编号显示在LED上,LED显示的是计数的数据,同时旋转按钮完成电机转速的控制选择。
4.第三种功能为划线,功能编号显示在LED高四位上,同时LCD屏幕清屏,为划线功能做准备,可以实现划线功能。
5.第四种功能为定时中断,当由键盘控制时,LED显示数值清零,实现了中断。6.实现裁剪与移植功能。
8.7 实验结果总结
完成了各种基本功能,并通过自拟的系统将各种功能整合起来,完成了一个小的嵌入式系统,对前七次的功能有了更深入的了解。通过LED的计数,当在计数值在前30秒之内,由键盘控制LED的数值及显示,按键盘上的某一个按键,实现对LED上的数值清零,后30秒由触摸屏控制清零,并且在前30秒之内,旋转按钮,实现对直流电机的运转,并且到步进电机的转换。
8.8 心得体会
通过这次实验,我更加深刻地掌握了前几次实验中的基本功能的实现方法,并且把几种功能联合在一起,实现一些功能,把LED 显示屏,LCD触摸屏,键盘,直流电机,步进电机等等设备联合在一起,对该实验有一定的帮助与提高,而我和我的队友也对嵌入式系统有了更深入的了解,在此期间,也学习了关于ARM处理器的开发与实践,了解了关于手机的嵌入式设备的产生过程,我也深深的对此充满了兴趣,对未来的嵌入式课程设计奠定了深厚的基础,可是令我遗憾的是,我和队员的水平所限,没有完成中断优先级的控制。本来想完成更多的功能,可是最后由于时间紧迫,也有一些其他的事情来分神分心,所以就只能完成这些,但是在未来的几周内,嵌入式课程设计也给了我们很大的空间去做未完成的事情。我相信我们会做的更加完美,功能更强大,用于未来的生活中去实践。
第三篇:《嵌入式系统设计》教学大纲
《嵌入式系统设计》课程教学大纲
嵌入式系统设计(Design of Embedded Systems)
一、课程教学目的和基本要求
教学目的:
嵌入式系统技术已被广泛地应用于工业控制系统、信息家电、通信设备、医疗仪器、智能仪器仪表等众多领域。如手机、PDA、MP3、手持设备、智能电话、机顶盒等,可以说嵌入式系统无处不在。本课程讲述当前主流的嵌入式处理器—ARM的微处理器和实时操作系统µC/OS,介绍嵌入式系统的基本原理和应用及设计方法。通过本课程的学习,着重培养学生的实际动手能力,使学生掌握ARM的系统结构、指令系统、程序设计方法、系统扩展方法、应用及开发技术等。使学生在工作中具有利用嵌入式系统开发产品和解决实际问题的基本能力。
基本要求:
1、掌握嵌入式系统技术的基本原理。
2、了解并掌握ARM的系统结构、指令系统、程序设计方法、系统扩展方法、应用及开发技术等。
3、比较熟练地用ADS进行ARM实验箱的编程及调试。
4、了解并掌握实时操作系统µC/OS,并学会用µC/OS开发小型应用系统。
二、先修课程及本课程总学时
先修课程:C程序设计语言、单片机原理 本课程总学时:36
三、课程章节及各章节学时安排
第一章 嵌入式系统概述(2学时)
第二章 嵌入式系统硬件基础(2学时)
第三章 设计方法及ADS集成开发环境(4学时)
第一节 嵌入式系统的设计方法(2学时)第二节 ADS集成开发环境(2学时)第四章 ARM7体系结构(4学时)
第一节ARM7体系结构介绍(2学时)第二节ARM7TDMI(-S)指令集简介。(2学时)第五章 ARM指令集(8学时)
第一节 ARM处理器寻址方式。(2学时)第二节ARM指令集。(2学时)第三节ARM汇编程序设计。(2学时)第四节C与汇编混合编程。(2学时)第六章 硬件结构与功能(12学时)第一节 LPC2106/2105/2104结构(2学时)第二节 GPIO及引脚连接模块。(2学时)
第三节 UART0和UART1、I2C接口、SPI接口。(2学时)第四节 定时器0和定时器1。(2学时)第五节 脉宽调制器(PWM)。(2学时)
第六节 看门狗及Flash存储器系统和编程。(2学时)第七章 µC/0S-II程序设计(4学时)
第一节 µC/0S-II简介及移植(2学时)第二节 移植µC/0S-II。(2学时)
四、课程主要内容
第一章 嵌入式系统概述(2学时)
1、嵌入式系统简介(包括什么是嵌入式系统,嵌入式系统的特点,嵌入式系统的分类)。
2、嵌入式系统的应用领域。
3、嵌入式系统的现状和发展趋势。
4、嵌入式微处理器和嵌入式操作系统。
5、嵌入式系统中的一些重要概念。难点:什么是嵌入式系统。
第二章 嵌入式系统硬件基础(2学时)
1、嵌入式系统的总体结构。
2、与嵌入式系统相关的硬件知识。难点:总体结构。
第三章 设计方法及ADS集成开发环境(4学时)第一节 嵌入式系统的设计方法
包括嵌入式系统的设计流程,嵌入式系统的一般设计方法,嵌入式系统的硬件/软件协同设计技术。第二节 ADS集成开发环境
1、ADS 1.2 集成开发环境的组成
2、工程的编辑
3、工程的调试
4、仿真器的安装与应用 难点:调试、仿真器。
第四章 ARM7体系结构(4学时)第一节ARM7体系结构介绍
1、处理器模式。
2、内部寄存器。
3、程序状态寄存器。
4、异常。
第二节ARM7TDMI(-S)指令集简介。难点:异常。
第五章 ARM指令集(8学时)第一节 ARM处理器寻址方式。第二节ARM指令集。
第三节ARM汇编程序设计。第四节C与汇编混合编程。难点:ARM汇编程序设计。
第六章 硬件结构与功能(12学时)第一节 LPC2106/2105/2104结构
1、存储器寻址。
2、系统控制模块。
3、存储器加速模块。
4、向量中断控制器。
第二节 GPIO及引脚连接模块。
第三节 UART0和UART1、I2C接口、SPI接口。第四节 定时器0和定时器1。第五节 脉宽调制器(PWM)。
第六节 看门狗及Flash存储器系统和编程。
难点:存储器重新映射,编程实现功能部件的初始化和控制。本章实验:LPC2106/2105/2104功能部件基础实验。
第七章 µC/0S-II程序设计(4学时)第一节 µC/0S-II简介及移植
1、移植规则。
2、编写LPC2106/2105/2104的启动代码。第二节 移植µC/0S-II。难点:移植µC/0S-II。本章实验:学习移植µC/0S-II。
五、教材及主要参考书
教材:
《嵌入式系统设计与开发》,马文华,科学出版社,2006年
主要参考书:
[1] 田苗苗.嵌入式控制系统.北京航空航天大学出版社,2002年 [2] 吕 骏 译.嵌入式系统设计.电子工业出版社,2002年
[3] 周立功等.ARM微控制器基础与实战.北京航空航天大学出版社,2003年
[4] 李驹光等.ARM应用系统开发祥解.清华大学出版社,2003年
[5] 劭贝贝译.uCOS-II-源代码公开的实时嵌入式操作系统.中国电力出版社,2001年 [6] 田苗苗.嵌入式系统设计与实例开发.清华大学出版社,2002年 [7] 袁勤勇等译.嵌入式系统构件.机械工业出版社,2002年 [8] 田苗苗.《实用嵌入式系统设计与开发—基于ARM微处理器与μCOS-II实时操作系统》(第二版),清华大学出版社,2003.9 [9] 邵贝贝译.《源代码公开的实时嵌入式操作系统——μCOS-II》,北京航空航天大学出版社,2003年
六、其他需要说明的情况
1.采用多媒体教学。
2.实验课单列,每周2学时。
3.每周作业量2~3小时,主要针对基本概念、开发环境的操作和编程。
七、成绩评定
1.理论考核
占60% 2.实践考核
占40%(其中包括:实验、作业、课堂提问、学生自行设计制作的作品)。
第四篇:北航—嵌入式系统设计教学大纲
《嵌入式系统设计》课程计划
北航机器人研究所
王田苗
魏洪兴
一、课程名称:嵌入式系统设计
二、课程目的:
嵌入式系统技术已被广泛地应用于工业控制系统、信息家电、通信设备、医疗仪器、智能仪器仪表等众多领域。如手机、PDA、MP3、手持设备、智能电话、机顶盒等,可以说嵌入式系统无处不在。
通过本课程学习,学生可以了解嵌入式系统技术基本概念、特点、分类,掌握嵌入式系统软硬件设计的基本方法。本课程的特点是针对目前流行的基于ARM架构的嵌入式微处理器与源码公开的实时操作系统选择C/OS进行详细剖析,并结合具体嵌入式系统开发实验,使学生能够熟练掌握嵌入式系统的设计与开发方法。
本门课程以采用讲课和实验相结合的方式,注重培养学生的实际应用能力与创新能力,以达到“学习嵌入式,使用嵌入式”的教学目的。
三、课程内容(共36学时)
一、引言(2学时)
1、什么是嵌入式系统
2、嵌入式系统的发展
3、嵌入式系统的特点
4、嵌入式系统的应用领域
5、嵌入式系统的分类
6、本门课程的内容与体系结构
二、嵌入式系统设计基本概念(2学时)
1、典型嵌入式系统基本组成
2、什么是嵌入式系统
3、嵌入式系统的基本特点
4、嵌入式系统的分类
5、嵌入式系统的主要应用领域
6、嵌入式技术的发展趋势
7、嵌入式技术的一些基本概念
三、嵌入式系统硬件平台(2学时)
1、基本结构
2、主要分类
四、嵌入式系统软件平台(2学时)
1、基本结构
2、主要分类
五、嵌入式系统设计开发方法(2学时)
1、传统研发基本思路
2、嵌入式研究开发基本方法
3、选型基本准则
硬件平台的选择 软件系统的选择
六、基于ARM架构的嵌入式微处理器与C/OS实时操作系统(2学时)
1、为什么选用ARM结构
2、为什么选用C/OS系统
3、ARM结构简介
4、C/OS系统简介
5、嵌入式实验平台简介
七、嵌入式仿真开发工具简介(2学时)
1、SDT仿真环境概述
2、ARM仿真器的流程简介
3、APM开发工具
建立项目文件 配置项目工具
4、ADW开发工具
环境简介
工具配置和调试
八、嵌入式系统的软件结构设计(2学时)
1、基于C/OS-Ⅱ扩展RTOS的体系结构
2、建立文件系统
3、外设及驱动程序
4、图形用户接口(GUI)函数
5、基本绘图函数
6、系统的消息队列
7、其他实用的应用程序接口(API)函数
九、嵌入式系统的硬件结构设计(2学时)
1、ARM7微处理器简介
2、基于S3C44B0X微处理器的嵌入式系统
3、存储器系统介绍
4、接口介绍
5、人机交互接口
十、嵌入式系统设计实验(18学时)
四、实验内容
1、LCD的驱动控制实验
2、ARM的A/D接口实验
3、ARM的键盘驱动实验
4、ARM的I/O驱动实验
5、ARM的UART通讯实验
6、RTOS的移植实验
7、ARM SDT 2.5开发环境实验
8、嵌入式系统的图形接口函数GUI实验
9、实时操作系统的消息循环实验
10、USB接口设计实验
11、嵌入式文件系统设计实验
12、嵌入式控制设计实验 13.触摸屏程序设计实验 14.网络通讯程序设计实验 15.综合实验
五、主要教材:
《实用嵌入式系统设计与开发—基于ARM微处理器与µCOS-II实时操作系统》,编著 王田苗,清华大学出版社,2002.9
第五篇:嵌入式系统设计基础总结报告
嵌入式系统设计基础
嵌入式系统设计基础
结题报告
学
生1: 学
生2: 学
生3: 组
长: 组长电话: 指导老师: 完成时间:
嵌入式系统设计基础
目录
目录....................................................................2 摘 要...................................................................3
一、课题概述...........................................................4
二、课题实施方案.......................................................4
2.1 方案说明........................................................4
2.1.1 LCD图像显示模块设计方案..................................4 2.1.2 触摸屏模块设计方案........................................5 2.1.3 音乐播放模块设计方案......................................5 2.1.4 键盘模块设计方案..........................................6 2.2 工程规范........................................................6
三、课题实施过程详述...................................................6
四、系统测试方法.......................................................8
五、结果分析...........................................................8
六、总结................................................................9 参考文献................................................................9 附录....................................................................9
嵌入式系统设计基础
摘 要
随着智能手机和平板电脑等便携式设备的兴起,ARM已经成为全球领先的半导体知识产权提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM技术具有性能高、成本低和能耗省的特点。本文旨在初步接触嵌入式ARM技术。我们使用了天嵌TQ2440开发板以及ADS1.2来进行相关实验,主要制作了一个带背景音乐、可以使用触摸屏和键盘进行前后照片切换的数码相框。通过这次实验,我们对ARM技术有了一个初步的认识和了解,同时也掌握了一些编程和调试技术。
关键词:嵌入式,LCD图像显示,触摸屏
Abstract With the development of the smartphone and tablet computer, ARM has already become a leading semiconductor intellectual property provider in global market.More than 95% of the smartphone and tablet computer use the ARM framework.ARM has the advantages in performance, cost and efficiency.This paper aim at having a rough contact with embedded ARM and we use TQ2440 and ADS1.2 to conduct relevant experiments.Generally, we have made a digital album which can be controlled by touch panel.Through this experiment, we have grown a general acknowledge of ARM technology and master some coding and debugging technology.Keywords:embedded system, LCD display, touchpanel 3
嵌入式系统设计基础
一、课题概述
本文展示了一个使用ARM技术制作而成的带有背景音乐并且可以通过触摸屏和键盘控制的数码相框。数码相框在当今市面上也有销售,其功能主要是放映照片,绝大部分能够通过无线或蓝牙与移动设备进行连接,以达到实时放映的效果。我们所制作的数码相框总体而言功能并不是很强大,但也符合数码相框的基本原理并且实现了基本功能。本课题的核心问题是如何实现触摸屏精确地点击、图像切换显示还有音乐播放功能。
二、课题实施方案
本课题的基本设计方案分为四个模块,LCD图像显示模块、触摸屏模块、音乐播放模块以及键盘模块。整体的设计流程为首先完成在TQ2440开发板液晶显示屏上显示出六张自定义图像;然后实现按键控制图像的切换;再加入对触摸屏的操作,使得能够使用触摸屏切换图像;最后加上PWM蜂鸣器播放音乐的功能。
2.1 方案说明
2.1.1 LCD图像显示模块设计方案
为了实现带有背景音乐并且能够使用触摸屏控制的数码相框,我们首先要能够在开发板的显示屏上显示用户自定义的照片。由于我们所使用的开发板配备的是4.3寸的显示屏,所以图片尺寸要设定为480*272才能完美适应屏幕大小。在程序代码中,显示图片的功能由Paing_Bmp定义,具体为Paint_Bmp(0, 0, 480, 272, TQ_LOGO),其中,480、272对应的是要显示的照片的尺寸,因为我们用的是4.3寸屏,所以设定为480、272;而TQ_LOGO是图片的名称,名称由用户自己定义,这里的TQ_LOGO对应的是开发板开机显示的第一张LOGO照片。照片的显示本质上是对屏幕上每一个像素点赋值的过程,不断赋值的一个过程其实就是实现了对LCD的每个像素点进行逐行扫描写入不同像素点对应图片的不同位置的颜色值的过程。
图 1.像素扫描原理
因此,只要将图片的每一个像素点的值写入程序,就能够实现照片显示的功能。这里我们使用了天嵌科技光盘附带的bmp2h程序,将一个BMP图片文件转换为带有每行像素值的C文件,然后将C文件中的代码复制到LCD显示程序代码下,即可实现照片显示功能。
另外,由于480*272照片文件容量较大,缺省的内存设置无法满足显示6张照片的功能,会导致显示花屏。针对这个问题,我们是在nand.c文件中修改RdNF2SDRAM()函数中的U32 size = 0x100000,我们改成U32 size = 0x800000,这样就满足了照片显示的内存需求。
嵌入式系统设计基础
2.1.2 触摸屏模块设计方案
四线电阻式触摸屏硬件工作原理按照工作原理和传输信息的介质不同,触摸屏分为电阻式、电容感应式、红外线式以及表面声波式。由于电阻式触摸屏具有工作面与外界完全隔离,受环境影响较小,具有不怕灰尘和水汽、稳定性高、不漂移等优点,特别适合工业现场使用。因此我们选择了四线电阻式触摸屏。
我们使用触摸屏进行相册的前进和后退,具体来说,就是触摸屏幕上半部分,就跳转到前一张照片;反之,触摸下半部分,就跳转到下一张照片。实现该功能的关键在于设置一个标志位来判断当前放映的是6张照片中的哪一张,当xdata>500时,判断为下半部分;xdata<500时,判断为上半部分,然后一旦触摸屏幕,在判断触摸的是哪一个部分后就会进行加一或减一,以此循环。具体实现就是在LCD代码的while(1)中,加入一段判断选择程序,其中xdata对应的是屏幕的竖轴,ydata对应横轴。
另外,由于触控比较灵敏,会出现轻轻按一下却切换了好几张照片的情况,为了解决这个问题,就需要加入一段中断以及判断按下和松开状态。
图 2.状态转换图
2.1.3 音乐播放模块设计方案
S3C2440A 有五个十六位计时器。计时器 0, 1, 2, 和3有 Pulse Width Modulation(PWM)功能.计时器4 只有一个内部计时器,没有外部输出管脚。定时器0 有一个死区发生器,这可以给大电流设备使用。
定时器0和1共用一个8位预分频器,而定时器2、3和4共用其他一个8位预分频器。每个定时器有一个时钟分频器,可以生成5种不同的信号(1 / 2,1 / 4,1/ 8,1 / 16,和TCLK)。每个定时器模块,接收从其自己的时钟分频器发出的信号,收到相应的8位预分频器的时钟的时钟信号的时候。8位预分频器是可编程的,并且可以根据存储在TCFG0和TCFG1寄存器中的装载值细分(确定)像素时钟PCLK。
当计时器时使能的时候,该计时器的计数缓冲寄存器(TCNTBn)初始化,同时装载初始值到向下计数器当中。计时器的比较缓冲寄存器(TCMPBn)初始化的时候,自动装载一个初始值,用来和向下计数器的值进行比较。这种双重缓冲寄存器的机构,TCNTBn和TCMPBn,使计时器可以在PWM频率和占空比改变的时候保持稳定的PWM输出。
每一个定时器都有自己的有机器时钟驱动的十六位向下计数器。当向下计数器到达零的时候,定时器中断请求产生并通知CPU,定时器操作已经完成。当定时器向下计数器达 5
嵌入式系统设计基础
零的时候,相应的TCNTBn将会自动为下一次操作装载相应的计数值。然而,当计时器被停止的时候,例如,当定时器控制寄存器TCONn的使能位被清零的时候,TCNBn的值就不会被重新装载进计数器。TCMPBn的值是用于控制脉宽调制(PWM)的。定时器控制当向下计数器的值等于compare的值时,输出电平逻辑改变。因此,compare寄存器的值决定了PWM的占空比。
我们要调整PWM 的占空比进行电机控制或者电源控制的时候,只需要在程序中不断修改rTCNTB0 的值就可以了;而如果我们要改变PWM 的频率,我们只要通过不断的修改rTCNTB0 的值就可以了(当然也可以通过修改rTCNTB0 =(PCLK>>7)/freq 中的freq 的值来间接实现修改rTCNTB0 的值)。
2.1.4 键盘模块设计方案
我们知道有时触摸屏会不太好用,比如手湿了或者戴手套的时候,这时有了按键功能,就能起到很好的替换效果。我们主要用按键功能实现照片的前后切换,其原理和之前触摸屏切换类似,这里不多撰述。
2.2 工程规范
在本次课题实施中我们就TQ2440开发板实际开发操作方面总结出规范如下:(1)不要着急写代码,首先要将设计思路、功能模块等规划完成,然后才能进行下一步的工作。这样做有助于实际操作过程中的条理性,并且可以使项目处于可控、可实现的状态。
(2)在编写代码的时候一定要添加上相应的注释,增加代码的可读性,方便自己以后的修改和别人的理解。
(3)硬件上,接线时一定要仔细。注意串口线连接的位置,因为这涉及到烧录程序时端口的选择。
(4)从直观上看问题。每次修改程序之后先录入开发板,从显示屏实际显示效果上看是否实现功能而不是纠结于程序是否修改正确。
三、课题实施过程详述
1、实现六张图像的键盘控制切换;
在keyscan.c的static void __irq Key_ISR(void)中加入以下代码:
if(key == 0xff){flag3=0;Uart_Printf(“Interrupt occur...Key is released!n”);} else{ flag3++;if(flag3 == 8)flag3 = 2;if(flag3 == 1){
if(key == 2 && flag4<=6)
{flag4++;if(flag4==7)flag4=1;}
嵌入式系统设计基础
else if(key == 1 && flag4<=6){flag4--;if(flag4==-1)flag4=6;} else if(key == 3){flag5=1;Main();}}
Uart_Printf(“Interrupt occur...K%d is pressed!n”, key);ExitCritical(&r);}
switch(flag4){
case 1:Paint_Bmp(0, 0, 480, 272, tu1_320240);break;
case 2:Paint_Bmp(0, 0, 480, 272, tu2_320240);break;
case 3:Paint_Bmp(0, 0, 480, 272, tu3_320240);break;
case 4:Paint_Bmp(0, 0, 480, 272, tu4_320240);break;
case 5:Paint_Bmp(0, 0, 480, 272, tu5_320240);break;
case 6:Paint_Bmp(0, 0, 480, 272, tu6_320240);break;
}
2、实现触摸屏控制图片切换功能;
(1)在while(1)中来实现:通过使用对触摸屏进行触摸操作时返回的xdata 和ydata 的数值对我们要显示的图片进行控制选择,如下:
while(1)//to check Pen-up state { if(rSUBSRCPND &(BIT_SUB_TC))//check if ADC is finished with interrupt bit {
flag = 0;break;//if Stylus is up(1)state} flag++;if(flag == 8)
flag = 2;if(flag == 1){
if(xdata>500 && flag1<=6)
{flag1++;if(flag1==7)flag1=1;}
else if(xdata<500 && flag1<=6)
{flag1--;if(flag1==-1)flag1=6;}
else
flag1=0;
switch(flag1){
case 1:Paint_Bmp(0, 0, 480, 272, tu1_320240);break;
case 2:Paint_Bmp(0, 0, 480, 272, tu2_320240);break;
case 3:Paint_Bmp(0, 0, 480, 272, tu3_320240);break;
case 4:Paint_Bmp(0, 0, 480, 272, tu4_320240);break;
case 5:Paint_Bmp(0, 0, 480, 272, tu5_320240);break;
case 6:Paint_Bmp(0, 0, 480, 272, tu6_320240);break;
}} }
(2)编译修改好的程序生成所需要的bin文件,录入开发板并观测图像显示。
3、PWM蜂鸣器音乐播放功能。
这部分功能就是在原先功能基础上加入了蜂鸣器的播放功能。
嵌入式系统设计基础
四、系统测试方法
本文所使用的硬件环境为天嵌TQ2440,是由广州天嵌计算机科技有限公司所制造。软件环境为WINDOWS 10,带有2.40 GHz Core™ i5 处理器以及4GB RAM。编译环境为ARM Developer Suite(ADS)1.2版。
五、结果分析
由于无法体现触控功能和音乐播放功能,这里只展示了照片显示功能。数码相框显示的照片如下,从图片中可以看到照片显示功能十分完好:
嵌入式系统设计基础
六、总结
本文展现了我们制作的数码相框,虽然总的来讲功能比较简陋,但也是我们的一片心血。通过这次实验,我们对于ARM嵌入式开发有了一个初步的认识,也熟悉了整个开发过程。最为重要的是,这次的实验为我们未来的学习与工作打下了一个良好的基础,我们不仅体验了当今最为流行的嵌入式技术,更是懂得了嵌入式开发的思想核心。在这里,我们要感谢负责嵌入式实验相关工作的王建敏老师,以及教授嵌入式课程的韩军老师、薛雷老师以及陆小峰老师,他们为这门课付出了自己的心血,传授给我们无价的知识。总的来说,这次实验难度并不大,但学到的东西并不少,相信未来我们也许也将走上嵌入式开发的道路,为嵌入式领域贡献自己的一份力量。
参考文献
[1] 裸奔三部曲.广州天嵌计算机科技有限公司.2012:1-59 [2] TQ2440开发板使用手册.广州天嵌计算机科技有限公司.2012:271-298 附录
(1)触摸屏ADC 中断初始化的程序段
rADCDLY=50000;
//Normal conversion mode delay about(1/3.6864M)*50000=13.56ms rADCCON=(1<<14)+(ADCPRS<<6);//ADCPRS En, ADCPRS Value Uart_Printf(“nTouch Screen testn”);rADCTSC=0xd3;//Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En pISR_ADC =(int)AdcTsAuto;rINTMSK=~BIT_ADC;//ADC Touch Screen Mask bit clear rINTSUBMSK=~(BIT_SUB_TC);(2)触摸屏中断程序断
void __irq AdcTsAuto(void){ U32 saveAdcdly;if(rADCDAT0&0x8000){ //Uart_Printf(“nStylus Up!n”);rADCTSC&=0xff;// Set stylus down interrupt bit
嵌入式系统设计基础
} //else //Uart_Printf(“nStylus Down!n”);rADCTSC=(1<<3)|(1<<2);//Pull-up disable, Seq.X,Y postion measure.saveAdcdly=rADCDLY;rADCDLY=40000;
//Normal conversion mode delay about(1/50M)*40000=0.8ms rADCCON|=0x1;
//start ADC while(rADCCON & 0x1);
//check if Enable_start is low while(!(rADCCON & 0x8000));
//check if EC(End of Conversion)flag is high, This line is necessary!while(!(rSRCPND &(BIT_ADC)));//check if ADC is finished with interrupt bit xdata=(rADCDAT0&0x3ff);ydata=(rADCDAT1&0x3ff);//check Stylus Up Interrupt.rSUBSRCPND|=BIT_SUB_TC;ClearPending(BIT_ADC);rINTSUBMSK=~(BIT_SUB_TC);rINTMSK=~(BIT_ADC);rADCTSC =0xd3;
//Waiting for interrupt rADCTSC=rADCTSC|(1<<8);
// Detect stylus up interrupt signal.while(1)
//to check Pen-up state { if(rSUBSRCPND &(BIT_SUB_TC))//check if ADC is finished with interrupt bit { //Uart_Printf(“Stylus Up Interrupt~!n”);break;//if Stylus is up(1)state } } Uart_Printf(“count=%03d XP=%04d, YP=%04dn”, count++, xdata, ydata);//X-position Conversion data rADCDLY=saveAdcdly;rADCTSC=rADCTSC&~(1<<8);// Detect stylus Down interrupt signal.rSUBSRCPND|=BIT_SUB_TC;rINTSUBMSK=~(BIT_SUB_TC);// Unmask sub interrupt(TC)ClearPending(BIT_ADC);}(3)PWM蜂鸣器音阶发生功能
while(1){
U16 freq =800;
if((xdata>719 && ydata>800)){ Paint_Bmp(0,0,480,272,tu3_480272);freq=220;Buzzer_Freq_Set(freq);}
嵌入式系统设计基础
else if(xdata>526 && ydata>800){ Paint_Bmp(0,0,480,272,tu2_480272);freq=247;Buzzer_Freq_Set(freq);} else if(xdata>332 && ydata>800){ Paint_Bmp(0,0,480,272,tu1_480272);freq=262;Buzzer_Freq_Set(freq);} else if(xdata>719 && ydata<225){Paint_Bmp(0,0,480,272,tu6_480272);freq=294;Buzzer_Freq_Set(freq);} else if(xdata>526 && ydata<225){Paint_Bmp(0,0,480,272,tu5_480272);freq=330;Buzzer_Freq_Set(freq);} else if(xdata>332 && ydata<225){Paint_Bmp(0,0,480,272,tu4_480272);freq=349;Buzzer_Freq_Set(freq);} else if(xdata>719 && ydata>225&& ydata<800){freq=392;Buzzer_Freq_Set(freq);} else {freq=392;Buzzer_Freq_Set(freq);Buzzer_Stop();} Paint_Bmp1(-40, 70, 480, 272,4, tu1_480272);Paint_Bmp1(-40, 140, 480, 272,4, tu2_480272);Paint_Bmp1(-40, 210, 480, 272,4, tu3_480272);Paint_Bmp1(400, 70, 480, 272,4, tu4_480272);Paint_Bmp1(400, 140, 480, 272,4, tu5_480272);Paint_Bmp1(400, 210, 480, 272,4, tu6_480272);Delay(500);} }