1、 1 可配置嵌入式系统( EDK)介绍 凌阳, 拇指 凌阳 9.1.1 凌 阳, 拇指 凌阳基于 FPGA 的可编程嵌入式开发系统 凌 阳, 拇指 凌阳 凌阳, 拇指 凌阳 嵌入式系统经历了从单片计算机、工业控制计算机、集中分布式控制系统 , 拇指 进而发展到嵌入式智能平台的几个发展阶段 。 食指 从独立单机使用发展到联网设备 。 食指 从以模拟电路为主发展到以数字电路为主、数模混合型 , 拇指 进而进入全数字时代 。 食指 总的来说 , 拇指 嵌入式系统向着更高性能、更小体积、更低功耗、更廉价、无处不在的方向发展 。 食指 嵌入式系统的设计和实现朝着基于芯片 , 拇指特别是片上可编程系统(
2、SOPC)的方向发展 。 食指 凌阳, 拇指 凌阳 从系统对上市时间的要求、可定制特性以及集成度等方面考虑 , 拇指 FPGA在嵌入式系统中获得广泛应用 , 拇指 已经从早期的军事、通信系统等应用扩展到低成本消费电子类等产品中 。 食指 目前 ,拇指 FPGA在嵌入式系统中 , 拇指 主要有 3种使用方式: 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 状态机模式:可以无外设、无总线结构和无实时操作系统 , 拇指 达到最低的成本 , 拇指 应用于 VGA和 LCD 控制等 , 拇指 根据用户设计可达到不同的性能 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 单片机模式:包括一定的外设 , 拇指 可以
3、利用实时操作系统和总线结构 , 拇指 以中等的成本 , 拇指 应用于控制和仪表 , 拇指达到中等的性能 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 定制嵌入模式:高度集成扩充的外设 , 拇指 实时操作系统和总线结构 , 拇指 达到高性能 , 拇指 应用于网络和无线通信等 。 食指 凌阳, 拇指 凌阳 采用 90nm 生产工艺之后 , 拇指 FPGA器件处理能力更强 , 拇指 且成本低、功耗少 , 拇指 已取代了相当数量的中小规模 ASIC 器件和处理器 , 拇指 使嵌入式系统具备片上系统( SOC)的规模和动态可编程的能力 , 拇指具有明显的优势 , 拇指 成为嵌入式应用的主力军之一 。
4、食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 9.1.2 凌 阳, 拇指 凌阳 Xilinx公司的解决方案 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 1解决方案 凌阳, 拇指 凌阳 Xilinx 公司的嵌入式解决方案以 3 类 RISC 结构的微处理器为核心 , 拇指 涵盖了系统硬件设计和软件调试的各个方面 。 食指 3 类嵌入式内核分别为: PicoBlaze、 MicroBlaze 和 PowerPC, 拇指 其中PicoBlaze和 MicroBlaze是可裁剪的软核处理器 , 拇指 PowerPC为硬核处理器 。 食指 凌阳, 拇指 凌阳 PicoBlaze是由 VHDL 语言在早期开发的小
5、型 8 位软处理器内核包 , 拇指 其汇编器是简单的 DOS可执行文件 KCPSM2.exe, 拇指 用汇编语言编写的程序经过编译后放入 FPGA的块 RAM存储区 ,拇指汇编器可在 3s 内编译完存储在块 RAM中的程序 。 食指 凌阳, 拇指 凌阳 MicroBlaze采用功能强大的 32 位流水线 RISC 结构 , 拇指 包含 32 个 32 位通用寄存器和一个可选的 32 位移位寄存器 , 拇指 时钟可达 150MHz, 拇指 在 Virtex 凌阳, 拇指 凌阳 2 凌阳, 拇指 凌阳 Pro 以及更高系列的平台上 , 拇指 运行速度可达 120DMIPs( DhrystoneMI
6、PS) , 拇指占用资源不到 1000个 Slice。 食指 凌阳, 拇指 凌阳 PowerPC 是 32 位 PowerPC 嵌入式环境架构 , 拇指 确定了若干系统参数 , 拇指 用以保证在应用程序级实现兼容 , 拇指 增加了其设备扩展的灵活性 。 食指 Xilinx 将 PowerPC 凌阳, 拇指 凌阳 405 处理器内核整合到 Virtex 凌阳, 拇指 凌阳 2 凌阳, 拇指 凌阳 Pro 系列以及更高等级系列的芯片中 , 拇指 允许该硬 IP 核能够深入到 FPGA 架构的任何部位 ,拇指 提供高端嵌入式应用的 FPGA解决方案 。 食指 Virtex 凌阳, 拇指 凌阳 4以及
7、 Virtex 凌阳, 拇指 凌阳 5系列部分芯片中集成了 24个 PowerPC405 处理器核 。 食指 凌阳, 拇指 凌阳 目前使用较多的嵌入式内核是 MicroBlaze 和 PowerPC, 拇指 工作频率可达到数百兆赫兹 , 拇指 还添加了新的浮点单元选项 , 拇指 使嵌入式开发人员可将系统性能提升至软件仿真速度的百倍以上 ,拇指非常适合针对网络、电信、数据通信、嵌入式和消费等市场的产品 。 食指 凌阳, 拇指 凌阳 2 2开发工具 凌阳, 拇指 凌阳 嵌入式开发套件( EDK)是用于设计嵌入式可编程系统的全面的解决方案 , 拇指 该套件包括了嵌入式软件工具( Platform 凌
8、阳, 拇指 凌阳 Studio)以及嵌入式 凌阳, 拇指 凌阳 IBM 凌阳, 拇指 凌阳 PowerPC 硬件处理器核和 /或 Xilinx 凌阳, 拇指 凌阳MicroBlaze软处理器核进行 Xilinx 平台 FPGA设计时所需的技术文档和 IP。 食指 注意:这里嵌入式软件工具指用来产生、编辑、编译、链接、加载和调试高级编程语言(通常是 C或 C+)代码的工具 , 拇指以便在处理器引擎上执行 。 食指 凌阳, 拇指 凌阳 此外 , 拇指 Xilinx 公司提供了大量的硬件平台(即评估板) , 拇指 提供了大量的软、硬件设计参考 ,拇指 使得设计人员可以快速了解嵌入式系统的基本操作和大
9、量的 IP 核的使用方法 , 拇指 并对其完成评估 , 拇指 以确定最优的设计方案 。 食指 一般来讲 , 拇指 最快捷的硬件设计方式是 , 拇指 在设计系统时以相应的评估板为母板 , 拇指然后对其进行必要的修改 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 第 2节 凌阳, 拇指 凌阳 Xilinx嵌入式开发系统组成介绍 凌阳, 拇指 凌阳 9.2.1 凌 阳, 拇指 凌阳片内微处理器软核 MicroBlaze 凌 阳, 拇指 凌阳 凌阳, 拇指 凌阳 1 MicroBlaze体系结构 凌阳, 拇指 凌阳 MicroBlaze 软核是一种针对 Xilinx 凌阳, 拇指 凌阳 FPGA 器
10、件而优化的功能强大的 32 位微处理器 , 拇指 是业界最快的软处理器 IP 核解决方案 , 拇指 支持 CoreConnect 总线的标准外设集合 , 拇指 具有兼容性和重复利用性 , 拇指最精简的核只需要将近 400个 Slice。 食指 凌阳, 拇指 凌阳 MicroBlaze软核内部采用 RISC 架构和哈佛结构的 32 位指令和数据总线 , 拇指 内部有 32 个通用寄存器 R0 R3、 2 个特殊寄存器程序指针( PC)和处理器状态寄存器( MSR)、 1 个 ALU单元、 1 个移位单元和两级中断响应单元等基本模块 , 拇指 还可具有 3/5 级流水线、桶形移位器、内存管理 /内
11、存保护单元、浮点单元( FPU)、高速缓存、异常处理和调试逻辑等可根据性能需求和逻辑区域成本任意裁剪的高级特性 , 拇指 极大地扩展了 MicroBlaze 的应用范围 。 食指MicroBlaze 处理器的内核仍在不断更新中 , 拇指 目前最新版为 MicroBlaze 凌阳, 拇指 凌阳 V7.0, 拇指 其内部架构如图 9-1 所示 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 图 9-1 凌阳, 拇指 凌阳 MicroBlaze内部架构示意图 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 MicroBlaze处理器架构均衡了执行性能和设计尺寸 , 拇指 但由于其最高工作频率由 FPGA芯片提
12、供 , 拇指 所以计算性能随处理器配置、实现工具结果、目标 FPGA架构和器件速度级别的不同而不同 。 食指 表 9-1 给出了不同 FPGA芯片上的 MicroBlaze性能对比表 , 拇指 其结果不代表一般嵌入式3 应用的计算性能 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 表 9-1 凌阳, 拇指 凌阳 MicroBlaze内核的最大 Dhrystone性能 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 注: DMIPS 表示每秒执行的 Dhrystone指令数量 。 食指 凌阳, 拇指 凌阳 2 MicroBlaze的总线接口 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 Co
13、reConnect 是由 IBM 开发的片上总线通信链 , 拇指 它使多个芯片核相互连接成为一个完整的新芯片成为可能 。 食指 Xilinx 以 IBM 凌阳, 拇指 凌阳 CoreConnect 为嵌入式处理器的设计基础 , 拇指 具有丰富的接口资源 。 食指目前 , 拇指 最新版本的 MicroBlaze软核支持的接口标准有: 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 带字节允许的 OPB( On-chip 凌阳, 拇指 凌阳 Peripheral 凌阳, 拇指 凌阳 Bus, 拇指 片上外设总线) V2.0接口; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 高速的 LMB( Local 凌阳, 拇
14、指 凌阳 Memory 凌阳, 拇指 凌阳 Bus, 拇指 本地存储器总线)接口; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 FSL 主从设备接口; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 XCL( Xilinx 凌阳, 拇指 凌阳 Cache 凌阳, 拇指 凌阳 Link, 拇指 Xilinx 缓存链路)接口; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 与 MDM( Microprocessor 凌阳, 拇指 凌阳 Debug 凌阳, 拇指 凌阳 Module, 拇指微处理器调试模块)连接的调试接口 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 其中 , 拇指 OPB 是对 IBM 凌阳, 拇指 凌
15、阳 Core 凌阳, 拇指 凌阳 Connect 片上总线标准的部分实现 , 拇指 适用于将 IP 核作为外设连接到 MicroBlaze系统中 。 食指 LMB用于实现对片上的 blockRAM的高速访问 。 食指 FSL是 MicroBlaze软核特有的一个基于 FIFO 的单向链路 , 拇指 可以实现用户自定义 IP 核与 MicroBlaze内部通用寄存器的直接相连;而 XCL 则是 MicroBlaze软核新增加的 , 拇指 用于实现对片外存储器的高速访问 。 食指 MicroBlaze软核还有专门的调试接口 , 拇指 通过参数设置 , 拇指 开发人员可以只使用特定应用所需要的处理器
16、特性 。 食指 Xilinx 提供了大量的外设 IP 凌阳, 拇指 凌阳 Core, 拇指 可外挂到 MicroBlaze的 OPB 总线上 , 拇指 如 DMA单元、以太网 MAC 层处理器、 PCI/PCIe接口、串口以及 USB等 , 拇指 如图 9-2 所示 。 食指 凌阳, 拇指 凌阳 图 9-2 凌阳, 拇指 凌阳 MicroBlaze支持的外设接口示意图 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 其中 , 拇指 DMA 和多端口存储器控制器是高速接口 , 拇指 OPB 属于低速接口总线 , 拇指 一个外设一般不能同时和这两类总线相连 。 食指 以太网 MAC 控制器模块之所以和两类总
17、线连接 , 拇指 是因为其控制接口和 OPB总线相连 , 拇指数据接口和高速的 DMA总线连接 。 食指 4 3 MicroBlaze寄存器 凌阳, 拇指 凌阳 1)通用寄存器 凌阳, 拇指 凌阳 MicroBlaze内核中的 32 个 32 位的通用寄存器记为 R0 R31。 食指 寄存器并不是由外部复位输入(如 reset 或 debug-rst 脚)复位 , 拇指 而是在比特流下载的时候复位 。 食指 通用寄存器的描述如表 9-2 所示 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 表 9-2 凌阳, 拇指 凌阳 MicroBlaze通用寄存器功能表 凌阳, 拇指 凌阳凌阳, 拇指 凌
18、阳 凌阳, 拇指 凌阳 2)特殊寄存器 凌阳, 拇指 凌阳 程序指针( PC)寄存器:存储下一条指令的地址 。 食指 它可以由一个 MFS 指令读出且不能由 MTS指令写入 。 食指 当使用 MFS 指令的时候 , 拇指 将 Sa置为 00000 或 rpc 将定义 PC 寄存器 。 食指 表中内容为程序指针执行中的指令的地址 。 食指 也就是说 , 拇指 mfs 凌阳, 拇指 凌阳 r2 凌阳, 拇指 凌阳 rpc 凌阳, 拇指 凌阳 指令将把 mfs 指令自己的地址存入 R2 中 。 食指 凌阳, 拇指 凌阳 机器状态寄存器( MSR):包含了处理器的控制和状态比特 , 拇指 可以通过 M
19、FS 指令读 , 拇指 也可以通过 MTS 指令或者专用的指令 MSRSET、 MSRCLR 指令写 。 食指 当对 MSR 进行读操作时 , 拇指 bit29作为进位位被复制到 bit0 位 。 食指 写 MSR 需要一个时钟周期的延时 , 拇指 当用 MTS 指令向 MSR 写指令时 , 拇指 在 MTS 指令执行结束一个时钟周期之后 , 拇指 写入的值才生效 。 食指 所有写入 bit0 的值将被忽略 。 食指 当使用 MTS 指令或 MFS 指令的时候 , 拇指 将 sx 置为 0001或 rmsr 被定义为对 MSR 的操作 。 食指 凌阳, 拇指 凌阳 4 MicroBlaze指令
20、集 凌阳, 拇指 凌阳 MicroBlaze指令字为 32 位 , 拇指 有 A型和 B型两种类型指令 。 食指 A型指令有两个源寄存器和一个目的寄存器 , 拇指 用以完成寄存器到寄存器间的数据运算; B型指令有一个源寄存器、一个目的寄存器和一个 16 位的立即数(通过在 B型指令前加一个 IMM指令可将其扩展到 32 位) ,拇指 可以进行寄存器和立即数间的数据运算 。 食指 其指令按功能划分有逻辑运算、算术运算、分支、存储器读 /写和特殊指令等 。 食指类型 A和类型 B的指令格式如图 9-3 所示 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 5 图 9-3(a) 凌阳, 拇指 凌阳
21、类型 A指令格式 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 图 9-3(b) 凌阳, 拇指 凌阳 类型 B指令格式 凌阳, 拇指 凌阳 图 9-3 凌阳, 拇指 凌阳 MicroBlaze指令格式 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 Microblaze 指令执行的流水线是并行流水线 , 拇指 它分为 3 级流水:取指、译码和执行 , 拇指 如图9-4 所示 。 食指 凌阳, 拇指 凌阳 图 9-4 凌阳, 拇指 凌阳 MicroBlaze的流水线 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 完整的 MicroBlaze指令集见参考文献 11。 食指 凌阳, 拇指 凌阳 9.2.2 凌 阳, 拇指 凌
22、阳片内微处理器 PowerPC 凌阳, 拇指 凌阳 1 PowerPC 体系结构 凌阳, 拇指 凌阳 PowerPC 是由苹果、 IBM 和摩托罗拉公司共同开发的微处理器结构 , 拇指 采用精简指令计算架构( RISC) , 拇指 并形成了一个开放的标准 。 食指 Xilinx 芯片中内嵌的 PowerPC 结构经过 IBM 公司优化 , 拇指 以较简单的、快速的运算为基础 , 拇指 促成微处理器在一个给定的时钟速度下执行较多的指令 , 拇指 主要包括 PowerPC 凌阳, 拇指 凌阳 405 系列 。 食指 PowerPC 提供了 3 个不同层面的应用 , 拇指 从下往上分别是用户指令集结
23、构( UISA)、虚拟环境结构( VEA)和操作环境结构( OEA) , 拇指 各层功能如表 9-3 所列 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 表 9-3 凌阳, 拇指 凌阳 PowerPC 凌阳, 拇指 凌阳 3层结构的说明 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 这种层次结构提供了软件兼容的灵活性 。 食指 此外 , 拇指 所有的 PowerPC 都符合 UISA 规范 , 拇指 保证6 PowerPC 对应用程序的兼容性 , 拇指 而 VEA 和 OEA 则可以有不同版本 。 食指 Xilinx 凌阳, 拇指 凌阳 FPGA 芯片中内嵌的 32 位硬 Pow
24、erPC 核 , 拇指 可以实现高性能嵌入式应用 。 食指 目前 , 拇指 在单片 FPGA芯片中可最多集成 2 个硬 PowerPC 核 。 食指 PowerPC 集成了 5 级标量流水线 , 拇指 具有独立的指令缓存和数据缓存、 1 个 JTAG端口、 Trace 凌阳, 拇指 凌阳 FIFO、多个定时器和一个内存管理单元( MMU) 。 食指 此外 , 拇指 Xilinx的高端器件还集成了辅助处理器单元控制器( APU) , 拇指 可直接控制 FPGA架构内的硬件指令协处理 。 食指 PowerPC 不占用 FPGA内部任何逻辑资源 , 拇指 其内部架构如图 9-5所示 。 食指 凌阳,
25、 拇指 凌阳凌阳, 拇指 凌阳 图 9-5 凌阳, 拇指 凌阳 PowerPC 硬核的内部结构示意图 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 2 Power 凌阳, 拇指 凌阳 PC总线接口 与传统的总线接口不同 , 拇指 由于 Power 凌阳, 拇指 凌阳 PC 处理器内核被嵌入到 FPGA芯片中 , 拇指 利用 Xilinx 的IP 植入和主动互连技术 , 拇指 几百个处理器结点是直接连接到 FPGA的逻辑和存储器阵列 。 食指 这种总体植入在硬件 /软件的系统结构中提供了超强的灵活性 , 拇指 可以有效地将复杂的功能成分在硬件中高速地实现和在软件中高度灵活地实现 。 食指 这种直接连接的
26、配置克服了利用总线在FPGA和附加外部处理器之间接口的瓶颈 。 食指 凌阳, 拇指 凌阳 Power 凌阳, 拇指 凌阳 PC 处理器也采用 CoreConnect 技术 , 拇指 可运行在 100-133MHz的高带宽 64 位总线 。 食指为了使灵活性达到最大 , 拇指 CoreConnect 结构是作为软 IP 在 FPGA 中实现的 。 食指 和 Microblaze软核一样 , 拇指 Power 凌阳, 拇指 凌阳 PC 也具备 LMB 和 OPB 总线 , 拇指 分别用来接口高速和低速外设到 PowerPC处理器 。 食指 此外 , 拇指 Power 凌阳, 拇指 凌阳 PC 还具
27、有器件控制寄存器总线 , 拇指 可完成对通用外设器件寄存器的访问 。 食指 凌阳, 拇指 凌阳 3 PowerPC 寄存器 凌阳, 拇指 凌阳 PowerPC 的寄存器可分为通用寄存器、专用寄存器、机器状态寄存器、条件寄存器和芯片控制寄存器 5 大类 , 拇指如表 9-4所列 。 食指 凌阳, 拇指 凌阳 表 9-4 凌阳, 拇指 凌阳 PowerPC 寄存器列表 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 7 凌阳, 拇指 凌阳 1)通用寄存器 凌阳, 拇指 凌阳 PPC( Power 凌阳, 拇指 凌阳 PC 的缩写)有 32 个 32 比特的通用寄存器 , 拇指 可通过加载指令从内存中读取数值
28、或通过存储指令将数值写入内存 。 食指 所有的计算指令的操作数都是通用寄存器 , 拇指 且输出结果也都存放于通用寄存器中 , 拇指所有通用寄存器都可通过软件代码访问 。 食指 凌阳, 拇指 凌阳 2)专用寄存器 凌阳, 拇指 凌阳 PPC 有丰富的 32 位专用寄存器 , 拇指 可访问额外的处理器资源 , 拇指 如计数寄存器、连接寄存器、调试资源、计数器、中断寄存器以及其余寄存器资源等 。 食指 大多数专用寄存器是应用程序所不能访问的 , 拇指只有计数器和连接寄存器等少数专用寄存器能被所有的软件所访问 。 食指 凌阳, 拇指 凌阳 3)机器状态寄存器 凌阳, 拇指 凌阳 32 比特机器状态寄存
29、器( MSR)定义了 PowerPC 处理器的工作状态 , 拇指 允许用户修改 。 食指 凌阳, 拇指 凌阳 4)条件寄存器 凌阳, 拇指 凌阳 32 位的条件寄存器( CR)可分为 8 个区域( CR0-CR7) , 拇指 每区域包含 4 个比特 , 拇指 可用于控制所有的条件分支 。 食指 算术指令可配置 CR0, 拇指 比较指令可配置所有的 CR 数值 。 食指 应用软件可访问所有的 CR数值 。 食指 凌阳, 拇指 凌阳 5)芯片控制寄存器 凌阳, 拇指 凌阳 32 比特芯片控制寄存器用于配置、控制和读取外部处理器 , 拇指 虽然芯片控制寄存器不是 PPC的一部分 , 拇指但仍可在特殊
30、软件中通过 mtdcr 和 mfdcr指令来访问 。 食指 凌阳, 拇指 凌阳 3 PowerPC 指令集 凌阳, 拇指 凌阳 PowerPC 实现 5 级流水线 , 拇指 包括取指、译码、执行、写回、加载写回 。 食指 PowerPC 的指令包括数学运算、逻辑运算、比较、跳转、中断等指令 , 拇指 分为 B、 D、 I、 M、 SC、 X、 XFX、 XL以及 XO 类型 , 拇指详细的指令集见参考文献 12。 食指 凌阳, 拇指 凌阳 PowerPC 执行指令的速度接近每周期执行一条指令 , 拇指 各类指令的典型执行速度如表 9-5 所8 列 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳
31、 表 9-5 凌阳, 拇指 凌阳 PowerPC 的指令执行周期列表 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 9.2.3 凌 阳, 拇指 凌阳常用的 IP核以及设备驱动 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 Xilinx 在 EDK环境中提供了嵌入式系统中常用的设备 , 拇指 包括:通用 I/O 设备、中断控制器设备、定时器、外部存储器控制器以及以太网、串口等高、低通信设备 。 食指 上述外设以及外设驱动都以 IP 凌阳, 拇指 凌阳 Core 的形式给出 , 拇指 便于使用 。 食指 本节主要介绍 CPU 系统所必需的基本外设 , 拇指 如通用 I/O、中断以及外存储器控制器 。 食指 凌阳
32、, 拇指 凌阳 1通用 I/O 设备( GPIO) 凌阳, 拇指 凌阳 1) GPIO 结构 凌阳, 拇指 凌阳 通用 I/O 设备是 32 位的 OPB 总线外设 , 拇指 每一位 GPIO 都可动态配置为输入、输出端口 , 拇指包含一个寄存器和一个多路器 。 食指 每个 GPIO 可最多包含两个通道 , 拇指 通过 IPIF模块连接到 OPB总线 , 拇指如图 9-6所示 , 拇指 其中的 IPIF模块相当于外部总线控制器 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 图 9-6 凌阳, 拇指 凌阳 GPIO 模块的连接示意图 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 GPIO 的寄存器可以
33、以双字( 32 比特)、字( 16 比特)以及字节( 8 比特)的方式访问 。 食指为了与 OPB总线相连 , 拇指 需要和 IPIF寄存器匹配 , 拇指 因此 GPIO 的寄存器是字边界访问的 。 食指 GPIO的数据格式如图 9-7 所示 。 食指 凌阳, 拇指 凌阳 9 图 9-7 凌阳, 拇指 凌阳 GPIO 的数据格式示意图 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 GPIO 设备完整的端口信号如表 9-6 所列 , 拇指 在系统中可根据实际需求配置相应的参数 。 食指 其中C_OPB_AWIDTH为 OPB外设地址总线宽度; C_OPB_DWIDTH为 OPB外设数据总线宽度;C_GP
34、IO_WIDTH为 GPIO 的总线宽度; C_BASEADDR 为系统为 GPIO 设备分配的基地址 , 拇指C_HIGH 凌阳, 拇指 凌阳 ADDR为高地址 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 表 9-6 凌阳, 拇指 凌阳 GPIO 组件的端口信号 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 OPB总线对 GPIO 寄存器的读写时序如图 9-8 和图 9-9 所示 。 食指 实际上 , 拇指 OPB总线有 4 种不同的总线访问方式:访问寄存器接口、访问 SRAM接口、访问 FIFO 接口以及突发传送 , 拇指 每种方针方式用于不同的总线操作 , 拇指具有不同的
35、时序 。 食指 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 10 图 9-8 凌阳, 拇指 凌阳 OPB总线读取 GPIO 寄存器的时序逻辑 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 图 9-9 凌阳, 拇指 凌阳 OPB总线写 GPIO 寄存器的时序逻辑 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 无论读、写操作 , 拇指 都是由 OPB 总线发出请求 , 拇指 经过几个时钟周期后 , 拇指 收到应答信号表明操作成功 , 拇指是 CPU、 DSP等处理器最常见的读、写寄存器操作 。 食指 凌阳, 拇指 凌阳 2) GPIO 驱动 凌阳, 拇指 凌阳 在 EDK中 , 拇指 与 GPIO 有关的底层文件有:
36、xgpio.c、 xgpio.h、 xgpio_i.h 以及 xgpio_l.h。 食指 其中xgpio.c 定义了 GPIO 所有的驱动函数 , 拇指所以在 GPIO 的用户代码中添加下列语句: 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 #include 凌阳, 拇指 凌阳 xgpio.h 凌阳, 拇指 凌阳 #include 凌阳, 拇指 凌阳 xgpio_1.h 凌阳, 拇指 凌阳 #include 凌阳, 拇指 凌阳 xgpio_i.h 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 在 xgpio.c 中定义了下面驱动函数 , 拇指 包含 GPIO 的初始化、配置、方向的设定、读取和赋值输出等函数
37、 。 食指下面给出常用的 GPIO 操作函数: 凌阳, 拇指 凌阳 ( 1)初始化函数 凌阳, 拇指 凌阳 XStatus 凌阳, 拇指 凌阳 XGpio_Initialize 凌阳, 拇指 凌阳 (XGpio 凌阳, 拇指 凌阳 *InstancePtr, 凌阳, 拇指 凌阳 Xuint16 凌阳, 拇指 凌阳 DeviceId); 凌阳, 拇指 凌阳 其中 InstancePtr 是 Xgpio 结构体指针 , 拇指 存储器的指针参数必须被预先指定; DeviceId 是由Xgpio 控制的唯一的设备 ID, 拇指 可在 xparameter.h 文件中找到 。 食指 通过 XGpio_Initialize函数将唯一的设备 ID 和 Xgpio 结构体联系起来指定设备 。 食指 凌阳, 拇指 凌阳 ( 2)配置查找函数 凌阳, 拇指 凌阳 XGpio_Config 凌阳, 拇指 凌阳 * 凌阳, 拇指 凌阳 XGpio_LookupConfig 凌阳, 拇指 凌阳 (Xuint16 凌阳, 拇指 凌阳 DeviceId); 凌阳, 拇指 凌阳 该函数查找唯一标志符 DeviceId 所标识的设备配置 , 拇指 系统配置表里包含了每一个设备的配
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。