资源描述
按照章节进行分类 嵌入式系统总结 嵌入式系统的概念及现实中的实例 两种比较合理定义: 从 技术的角度 定义:以应用为中心、以计算机 技术为基础、软件硬件可裁剪、适应应用系统 对功能、可靠性、成本、体积、功耗严格要求 的专用计算机系统。 从 系统的角度 定义:嵌入式系统是设计完成复 杂功能的硬件和软件,并使其紧密耦合在一起 的计算机系统。 第一章嵌入式系统概述 2.1 ARM简介 ARM公司简介 ARM是 Advanced RISC Machines的缩写,它是 一家微处理器行业的知名企业,该企业设计了大量 高性能、廉价、耗能低的 RISC (精简指令集)处 理器。 公司的特点是只设计芯片,而不生产。它 将技术授权给世界上许多著名的半导体、软件和 OEM厂商,并提供服务。 ARM两大处理器状态特点及其关系 ARM7TDMI处理器内核包含 2套指令系统,分别为 ARM指令集和 Thumb指令,并且各自对应 1种处理器的 状态: ARM状态: 32位,处理器执行字方式的 ARM指令, 处理器默认为此状态; Thumb状态: 16位,处理器执行半字方式的 Thumb 指令。 第 3章 ARM7TDMI(-S)指令系统 简介 ARM处理器是基于精简指令集计算机 (RISC)原 理设计的 , 指令集和相关译码机制较为简单 。 ARM7TDMI(-S)具有 32位 ARM指令集 和 16位 Thumb 指令集 , ARM指令集效率高 , 但是代码密度低 ;而 Thumb指令集具有较高的代码密度 , 却仍然保持 ARM的大多数性能上的优势 , 它是 ARM指令集的 子集 。 所有的 ARM指令都是可以有条件执行的 , 而 Thumb指令仅有一条指令具备条件执行功能 。 ARM 程序和 Thumb程序可相互调用 , 相互之间的状态切 换开销几乎为零 。 第 3章 ARM7TDMI(-S)指令系统 ARM指令集与 Thumb指令集的关系 Thumb指令集 具有灵活、小 巧的特点 ARM指令集支持 ARM核所有的特 性,具有高效、 快速的特点 3.1 ARM处理器寻址方式 寻址方式分类 寻址方式是根据指令中给出的地址码字段来实 现寻找真实操作数地址的方式 。 ARM处理器具有 8种 基本寻址方式 。 1.寄存器寻址; 2.立即寻址; 3.寄存器移位寻址; 4.寄存器间接寻址; 5.基址寻址; 6.多寄存器寻址; 7.堆栈寻址; 8.相对寻址 。 3.2 指令集 常用指令的使用 3.2 指令集介绍 ARM存储器访问指令 单寄存器存取 装载指令: LDR 目标寄存器 ,源地址 存储指令: STR 源寄存器 ,目标地址 存储器 源地址 目标寄存器 存储器 目标地址 源寄存器 思考与练习 ? 1.MOV指令与 LDR指令都是往目标寄存器中 传送数据 , 但是它们有什么区别吗 ? MOV指令用于将数据从一个寄存器传送 到另一个寄存器中 , 或者将一个常数传送到 一个寄存器中 , 但是不能访问内存 。 LDR指 令用于从内存中读取数据放入寄存器中 。 3.2 指令集介绍 算术逻辑运算指令 算术逻辑运算指令包括 “ 加 /减 ” 以及 “ 与 / 或 /异或 ” 等指令 , 它们的格式如下: OpCode 结果寄存器,运算寄存器,第二操作数 运算寄存器 第二操作数 运算符 结果寄存器 1.LPC2000系列简介 2.引脚描述 3.存储器寻址 4.系统控制模块 5.存储器加速模块 ( MAM) 6.外部存储器控制器 ( EMC) 7.引脚连接模块 8.GPIO 第四章 LPC2000系列 ARM硬件结构 9.向量中断控制器 10.外部中断输入 11.定时器 0和定时器 1 12.SPI接口 13.I2C接口 14.UART(0、 1) 15.A/D转换器 16.看门狗 17.脉宽调制器 (PWM) 18.实时时钟 4.3.1 片内存储器 片内 Flash编程方法 1. 使用 JTAG仿真 /调试器,通过芯片的 JTAG接口下载程序; 2 使用在系统编程技术(即 ISP),通过 U RT0接口下载程 序; 3.使用在应用编程技术(即 IAP),在用户程序运行时 对 Flash进行擦除和 /或编程操作,实现数据的存储和固 件的现场升级。 ARM7 处理器核 外设 控制器 RAM Boot Block FLASH JTAG UART0 串口 并口 JTAG 4.3.1 片内存储器 片内 Flash编程方法 2. 使用在系统编程技术(即 ISP),通过 UART0接口下载程 序; 3. 使用在应用编程技术(即 IAP),在用户程序运行时对 Flash进行擦除和 /或编程操作,实现数据的存储和固件的现 场升级。 1. 使用 JTAG仿真 /调试器,通过芯片的 JTAG接口下载 程序; 4.3.2 片外存储器 片外 Flash编程方法 Flash的擦写操作需要配合一段符合 Flash编程时序 的代码,这段代码称为 装载程序 ,一般由用户编写。 程序代码(源) 程序代码(目标) Loader 目标板 CPU BUS Flash 串口 下载用户代码时,首先得在 CPU内运行装载程序, 通过它把从串口(或其它接口)接收的代码写到片外 Flash中。 概述 4.3.3 存储器映射 ARM芯片可以存在片内和片外存储器,这些存储 器本身不具有地址信息,它们在芯片中的地址是由芯 片厂家或用户分配的,那么 给物理存储器分配逻辑地 址的过程称为存储器映射 。通过这些逻辑地址就可以 访问到相应存储器的物理存储单元。 4.3.5 存储器重映射及引导块 存储器重映射 将已经过映射的存储器再次映射的过程称为 存储 器重映射 ,它使同一物理存储单元出现多个不同的逻 辑地址。这些存储单元主要包括 引导块 “ Boot Block” 和用于保存异常向量表的少量存储单元。 Addr1 程序所见存储器 . Addr2 Addr1 存储器管理部件 0 x1234 0 x1234 实际物理存储器 0 x1234 注意: 存储器重映射并不是对映射单元的内容进 行了复制,而只是将多个地址指向了同一个存储单元, 这种效果是通过芯片内部的 “ 存储器管理部件 ” 实现 的。 实际物理存储单元通过 存储器管理部件进行存储器 映射,获得逻辑地址 Addr1。 1 实际物理存储单元通过 存储器管理部件进行存储器 重映射,获得逻辑地址 Addr2。此时,逻辑地址 Addr1和 Addr2可以访问同一 实际物理存储单元。 2 4.4.2 时钟系统 时钟系统结构 LPC2000系列微控制器的时钟系统包括四个部分: 晶体振荡器、唤醒定时器、锁相环( PLL)和 VPB分频器。 外接晶体或 外接时钟源 产生稳定的 时钟信号 将 Fosc提升到 合适的频率 PLL 晶体 振荡器 VPB 分频器 FCCLK FPCLK fOSC FOSC CPU内核 芯片外设 唤醒 定时器 ON/OFF 1 3 4 2 为系统提供基本的时钟信号 (Fosc) 。 1 在复位或处理器从掉电模式被唤醒时,为输入的时钟信号做计数延时,使芯片内部部件有时间进行初始化。 2 把 Fosc信号提高到一个符合用户需要的频率 (Fcclk) 其中 Fcclk用于 CPU内核。 3 用于把 Fcclk信号降低到一个合适的 Fpclk值(也可以不降低),该信号用于外设部件 。 4 4.5 存储器加速模块( MAM) 概述 LPC2000微控制器扩展了器件内部 Flash总线宽 度为 128位,用于提高处理器的指令执行速度。这个 接口通过存储器加速模块 (MAM)来控制。 Flash组 2 Flash组 1 CPU 执行指令 取指阶段 等待 指令 提供指令 1 提供指令 3 . . 取指阶段 提供指令 4 取指阶段 等待 3 等待 取指阶段 提供指令 2 取指阶段 等待 1 2 4 关闭 MAM指令执行情况 从 Flash组 1中读取指令, CPU处于等待状态。 1 CPU从 1组指令缓存区中获取指令并执行。 2 从 组 2中读取指令, 处于等待状态。 3 从 2组指令缓存区中获取指令并执行。 4 所有存储器操作请求都会直接对 Flash操作,由此产生了 CPU停止,等待若干周期的情况。 Flash组 2 Flash组 1 CPU 执行指令 开启 MAM指令执行情况 . 14 13 提供指令 13 14 15 16 取指阶段 12 11 10 9 取指阶段 提供指令 9 10 11 12 8 7 6 5 取指阶段 提供指令 5 6 7 8 4 3 2 1 提供指令 1 2 3 4 5 6 7 8 取指阶段 取指阶段 等待 指令 . . 两组指令缓存区中不存在指令,启动 Flash存储器 指令读取周期, CPU停止,等待若干周期。 1 CPU执行 Flash组 1指令缓存区中的指令。 2 执行 组 2指令缓存区中的指令,同时从 Flash组 1中读取指令。 3 只要指令存在两个组的指令缓存区中, CPU的 指令执行是连续的,由此大大提高了指令执行效率。 4.9 向量中断控制器 概述 ARM7TDMI内核具有两个中断输入,分别为 IRQ中断和 FIQ中断。向量中断控制器( VIC)负责 管理芯片的中断源,最多可以管理 32个中断输入请 求。 CPU 内核 ARM7TDMI-S 4.9 向量中断控制器 FIQ中断硬件处理流程 将当前的程序状态寄存器的内容备份 即, SPSR_fiq = CPSR 处理器切换到 FIQ模式 禁止 IRQ和 FIQ中断,即, I = F = 1 保存返回地址 LR_fiq = PC 设置 FIQ异常入口地址 PC = 0 x1C 发生 FIQ异常事件 说明: ARM7不支持 FIQ中断嵌套 4.9 向量中断控制器 IRQ中断相应流程 将当前的程序状态寄存器的内容备份 即, SPSR_irq = CPSR 处理器切换到 IRQ模式 禁止 IRQ中断,即, I = 1 保存返回地址 LR_irq = PC 设置 IRQ异常入口地址 PC = 0 x18 发生 IRQ异常事件 说明: ARM7不支持 IRQ中断嵌套 4.10 外部中断输入 概述 LPC2000系列 ARM具有 4路外部中断,可以设置为 2种类型: 边沿触发: 上升沿触发 下降沿触发 电平触发: 高电平触发 低电平触发 4.12 SPI接口 (Serial Peripheral Interface-串行外设接口 ) SPI总线系统是一种同步串行外设接口,它可以使 MCU 与各种外围设备以串行方式进行通信以交换信息。外围 设置 FLASHRAM、网络控制器、 LCD显示驱动器、 A/D转换器和 MCU等。 SPI总线系统可直接与各个厂家 生产的多种标准外围器件直接接口,该接口一般使用 4 条线:串行时钟线( SCK)、主机输入 /从机输出数据 线 MISO、主机输出 /从机输入数据线 MOSI和低电平有 效的从机选择线 SS(有的 SPI接口芯片带有中断信号线 INT或 INT、有的 SPI接口芯片没有主机输出 /从机输入 数据线 MOSI)。 SCL SDA CPU A CPU B LCD驱动器 E2PROM ADC 4.13 I2C接口 概述 I2C总线是 Philips推出的串行传输总线,它以 2根 连线实现了完善的全双工同步数据传送,可以极方 便地构成多机系统和外围器件扩展系统。 I2C总线采用了器件地址的硬件设置方法, 通过软件寻址完全避免了期间的片选线 寻址方法,从而使硬件系统具有最简单 而灵活的扩展方法。 I2C总线的两根线(串行数据 SDA,串行 时钟 SCL)连接到总线上的任何一个器 件,每个器件都应有一个唯一的地址, 而且都可以作为一个发送器或接收器。 此外,器件在执行数据传输时也可以被 看作是主机或者从机。 I2C总线规范 传输协议 主机发送数据到从机 主机 从机 主机发送起始信号,开始数据传输 对从机进行寻址,同时 R/W = 0 发送应答信号 发送 1字节数据 发送应答信号 发送 1字节数据 发送停止信号,结束数据通信 I2C总线规范 传输协议 主机读取从机数据 主机 从机 发送停止信号,结束数据通信 主机发送起始信号,开始数据传输 对从机进行寻址,同时 R/W = 1 发送应答信号 发送 1字节数据 发送应答信号 发送 1字节数据 发送应答信号 发送非应答信号 复合格式 发送停止信号,结束数据通信 再次发送起始信号 对从机进行寻址,同时 R/W = 1 发送应答信号 发送应答信号 发送 1字节数据 发送应答信号 发送非应答信号 主机发送起始信号,开始数据传输 对从机进行寻址,同时 R/W = 0 发送 1字节数据 主机 从机 发送应答信号 发送应答信号 发送应答信号 发送 1字节数据 发送 1字节数据 UART简介 UART: Universal Asynchronous Receiver/Transmitter, 通用异步接收 /发送装置, UART是一个并行输入成为 串行输出的芯片,通常集成在主板上,多数是 16550AFN芯片。因为计算机内部采用并行数据,不能 直接把数据发到 Modem,必须经过 UART整理才能进 行异步传输,其过程为: CPU先把准备写入串行设备 的数据放到 UART的寄存器(临时内存块)中,再通过 FIFO( First Input First Output,先入先出队列)传送 到串行设备,若是没有 FIFO,信息将变得杂乱无章, 不可能传送到 Modem。 应用示例 LPC2000的 I/O电压为 3.3V,连接时须注意电平 的匹配。 LPC2000 其它 通信设备 TxD0 RxD0 TxD0 RxD0 与 PC机相连时,由于 PC机 串口是 RS232电平,所以 连接时需要使用 RS232转 换器。 LPC2000 PC机串口 232 电平转换 TxD0 RxD0 TxD0 RxD0 RxD1 RTS CTS DSR1 DTR1 TxD1 LPC2000 Modem TxD RxD DCD RI1 RTS CTS DSR1 DTR1 DCD1 RI1 RS232 电平转换 当使用 Modem接口时,需 要一个 RS232转换器将信 号转换为 RS232电平后, 才能与 Modem连接 。 4.16 看门狗 看门狗简介 在嵌入式应用中, CPU必须可靠工作,即使因为 某种原因进入了一个错误状态,系统也应该可以自动 恢复。看门狗的用途就是使微控制器在进入错误状态 后的一定时间内复位。 其原理是在系统正常工作时,用户程序每隔一段 时间执行喂狗动作(一些寄存器的特定操作),如果 系统出错,喂狗间隔超过看门狗溢出时间,那么看门 狗将会产生复位信号,使微控制器复位。 4.16 看门狗 看门狗简介 看门狗分 硬件看门狗和软件看门狗 。硬件看门狗是利 用一个定时器电路,其定时输出连接到电路的复位端, 程序在一定时间范围内对定时器清零 (俗称“喂狗” ), 因此程序正常工作时,定时器总不能溢出,也就不能 产生复位信号。如果程序出现故障,不在定时周期内 复位看门狗,就使得看门狗定时器溢出产生复位信号 并重启系统。 4.17 脉宽调制器 PWM简介 LPC2000的 PWM基于标准的定时器模块,具有 定时器的所有特性,它是定时器匹配功能的扩展。 使用 PWM功能,可以在指定引脚输出需要的波形。 输出波形可分为两类: 单边沿输出; 双边沿输出。 5.1 最小系统 框图 嵌入式控制器 时钟系统 调试测试接口 复位及其 配置系统 存储器系统 供电系统 (电源 ) 可选,因为许多面向嵌入 式领域的微控制器内部集 成了程序和数据存储器 可选,但是在样 品阶段通常都会 设计这部分电路 C/OS-II程序设计基础 September,2007 ww w. zlg mcu .co m 任务设计 | C/OS-II程序设计基础 任务的分类 任务 单次执行 类 事件触发 类 周期执行 类 按 照 执 行 方 式 分 类 一般的操作系统都提供时间管理的函数 , 最基本的就是延时函数 , C/OS-II也不 例外 , C/OS-II所具有的时间管理函数见下表 。 C/OS-II具有简单的动态内存管理能力 。 C/OS-II的动态内存管理函数见下表 。 任务管理函数是操作与任务相关功能的函数 , 详见下表 。 系统管理函数是一些与 C/OS-II内核或功能相关的一些函数,详见下表。 C/OS-II的初始化函数有 2个: OSInit()和 OSStart(), 它们不能在任何任务和中断 服务程序中使用 , 仅在 main()函数中按照一定的规范被调用 , 其中 OSInit()函数初 始化 C/OS-II内部变量 , OSStart()函数启动多任务环境 。 C 把信号量等都称为事件 , 管理它们的就是事件管理函数 。 C/OS-II V2.52 具有的事件有普通信号量 、 互斥信号量 、 事件标志组 、 消息邮箱和消息队列 , 这 些都是 C/OS-II用于同步与通讯的工具 , 本章后述的内容将会详细介绍 。 系统函数概述 | C/OS-II程序设计基础 系统函数的分类 初始化 任务管理 时间管理 内存管理 根 据 功 能 分 类 事件管理 函数名 功能 备注 OSStatInit() 使能任务统计功能 复位一次只能调用一次,并且必须在任务中调用,在调用时其它用户任务不能处于就绪状态 OSIntEnter() 进入中断处理 必须由中断服务程序按照规范调用,使用本公司的模版 就不需要调用它们 OSIntExit() 退出中断处理 OSSchedLock() 锁调度器 必须配对使用,一般情况不需要使用。事实上, C/OS-II不推荐使用它们 OSSchedUnlock() 解锁调度器 OS_ENTER_CRITICAL() 进入临界区 必须配对使用,一般通过禁止中断和允许中断来实现的。 对于一些移植代码来说,不能嵌套调用 OS_EXIT_CRITICAL() 退出临界区 函数名 功能 函数名 功能 OSTaskChangePrio() 改变任务优先级 OSTaskSuspend() 挂起任务 OSTaskCreate() 建立任务 OSTaskResume() 恢复任务 OSTaskCreateExt() 建立任务,比 OSTaskCreate() 控制任务属性更多 OSTaskStkChk() 检查堆栈 OSTaskDel() 删除任务 OSTaskQuery() 获得任务信息 OSTaskDelReq() 请求删除任务,有特殊用途 系统管理 函数名 功能 备注 OSTimeDly() 以时钟节拍为单位延时 OSTimeDlyHMSM() 以钟时分秒毫秒为单位延时 OSTimeDlyResume() 恢复延时的任务 OSTimeDlyHMSM()可能需要多次才能恢复 OSTimeGet() 获得系统时间 以时钟节拍为单位 OSTimeSet() 设置系统时间 以时钟节拍为单位 OSTimeTick() 时钟节拍处理函数 由时钟节拍中断处理程序调用,用户很少使用 函数名 功能 OSMemCreate() 初始化一个堆 OSMemGet() 从指定堆中获得一个内存块 OSMemPut() 从指定堆中释放一个内存块 OSMemQuery() 查询指定堆的状态 C/OS-II程序设计基础 互斥信号量 简介 资源同步 函数列表 1 2 3 互斥信号量 | C/OS-II程序设计基础 简介 互斥信号量也称为 mutex, 专用于资源同步 。 互斥信号量具有一些特 性:占用一个空闲优先级 , 以便解决优先级反转问题 。 在日常生活中 , 出租车是一种常用的共享资源 , 当出租车载客 时 , 从外面可以看到标识为载客;当空闲时 , 标识为空车 。 这样 等车的人就可以根据标识知道出租车的当前状态 , 判断是否能够 座上这辆车 。 这个标识牌就是一个二值信号量 。 由于这种二值信 号量可以实现对共享资源的独占式处理 , 所以叫做互斥信号量 。 载客 空车 二值信号量 可以实现对共享资源 的独占式处理 互斥信号量 互斥信号量 | C/OS-II程序设计基础 简介 优 先 级 列 表 任务 1 任务 2 任务 3 高 低 共享资源 假设任务 1和任务 3共享一个资源 , 任务 2为优先级介于任务 1 和任务 3之间的一个与该共享资源无关任务 , 分析优先级反转问 题 。 任务 2优先级高于任务 3而进入运行状态 任务 1申请共享资源而处于等待状态 此时 , 虽然任务 1比任务 2优先级更高 , 但却在任务 2之后运行 , 这种现象就是优先级 反转 。 任务 3得到共享资源而处于运行状态 互斥信号量 | C/OS-II程序设计基础 简介 综上所述,可以说能防止优先级反转现象的信号就是互斥信号 量。 优 先 级 列 表 互斥信号量 任务 1 任务 2 任务 3 高 低 互斥信号量 任务 3 互斥信号量 假设任务 1和任务 3共享一个资源 , 使用互斥信号量进行资源同 步 , 任务 2为优先级介于任务 1和任务 3之间的一个与该共享资源无 关任务 , 通过互斥信号量解决优先级反转问题 。 任务 2优先级不够高无法获得 CPU 任务 1申请互斥信号量而处于等待状态 此时 , 任务 2无法在任务 1之前得到运行 , 不发生优先级反转 互斥信号量 任务 1 任务 3获得 CPU, 且优先级升到互斥信号量优先级 1获得 , 且优先级升到互斥信号量优先级 祝大家考试顺利!
展开阅读全文