PDF精选 - 千万精品文档,你想要的都能搜到,下载即用。

ARM嵌入式系统设计及接口编程实验教程.pdf

Naive (天真)189 页 4.716 MB下载文档
ARM嵌入式系统设计及接口编程实验教程.pdfARM嵌入式系统设计及接口编程实验教程.pdfARM嵌入式系统设计及接口编程实验教程.pdfARM嵌入式系统设计及接口编程实验教程.pdfARM嵌入式系统设计及接口编程实验教程.pdfARM嵌入式系统设计及接口编程实验教程.pdf
当前文档共189页 2.88
下载后继续阅读

ARM嵌入式系统设计及接口编程实验教程.pdf

ARM 嵌入式系统 设计及接口编程实验教程 上海双实科技有限公司 实验 1 ADS1.2 开发环境使用 ...................................................................................................1 1. 实验目的 .........................................................................................................................1 2. 实验设备 .........................................................................................................................1 3. 实验原理 .........................................................................................................................1 4. 实验步骤 .........................................................................................................................3 5. 实验思考 .......................................................................................................................11 实验 2 ICE 仿真器的安装和使用 ...........................................................................................12 1. 实验目的 .......................................................................................................................12 2. 实验设备 .......................................................................................................................12 3. 实验原理 .......................................................................................................................12 4. 实验步骤 .......................................................................................................................15 5. 实验思考 .......................................................................................................................20 实验 3 Flash 烧写工具的使用 ...............................................................................................21 1. 实验目的 .......................................................................................................................21 2. 实验设备 .......................................................................................................................21 3. 实验原理 .......................................................................................................................21 4. 实验步骤 .......................................................................................................................21 5. 实验思考 .......................................................................................................................26 实验 4 DNW 工具的使用 ...........................................................................................................27 1. 实验目的 .......................................................................................................................27 2. 实验设备 .......................................................................................................................27 3. 实验原理 .......................................................................................................................27 4. 实验步骤 .......................................................................................................................27 5. 实验思考 .......................................................................................................................32 实验 5 ARM 汇编指令编程 .......................................................................................................33 1. 实验目的 .......................................................................................................................33 2. 实验设备 .......................................................................................................................33 3. 实验原理 .......................................................................................................................33 4. 实验步骤 .......................................................................................................................35 5. 实验思考 .......................................................................................................................38 实验 6 Thumb 汇编指令编程 ...................................................................................................39 1. 实验目的 .......................................................................................................................39 2. 实验设备 .......................................................................................................................39 3. 实验原理 .......................................................................................................................39 4. 实验步骤 .......................................................................................................................39 5. 实验思考 .......................................................................................................................43 实验 7 C 语言调用汇编语言编程 .........................................................................................44 1. 实验目的 .......................................................................................................................44 2. 实验设备 .......................................................................................................................44 3. 实验原理 .......................................................................................................................44 4. 实验步骤 .......................................................................................................................44 5. 实验思考 .......................................................................................................................48 实验 8 汇编语言调用 C 语言编程 ..........................................................................................49 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第i页 共 188 页 上海双实科技有限公司 1. 实验目的 .......................................................................................................................49 2. 实验设备 .......................................................................................................................49 3. 实验原理 .......................................................................................................................49 4. 实验步骤 .......................................................................................................................49 5. 实验思考 .......................................................................................................................52 实验 9 中断处理程序设计 ......................................................................................................54 1. 实验目的 .......................................................................................................................54 2. 实验设备 .......................................................................................................................54 3. 实验原理 .......................................................................................................................54 4. 实验步骤 .......................................................................................................................57 5. 实验思考 .......................................................................................................................60 实验 10 定时器应用 ................................................................................................................61 1. 实验目的 .......................................................................................................................61 2. 实验设备 .......................................................................................................................61 3. 实验原理 .......................................................................................................................61 4. 实验步骤 .......................................................................................................................66 5. 实验思考 .......................................................................................................................69 实验 11 实时日历时钟(RTC)应用 ......................................................................................70 1. 实验目的 .......................................................................................................................70 2. 实验设备 .......................................................................................................................70 3. 实验原理 .......................................................................................................................70 4. 实验步骤 .......................................................................................................................72 5. 实验思考 .......................................................................................................................77 实验 12 ADC 接口应用 .............................................................................................................78 1. 实验目的 .......................................................................................................................78 2. 实验设备 .......................................................................................................................78 3. 实验原理 .......................................................................................................................78 4. 实验步骤 .......................................................................................................................79 5. 实验思考 .......................................................................................................................81 实验 13 SDRAM 原理及编程 .....................................................................................................82 1. 实验目的 .......................................................................................................................82 2. 实验设备 .......................................................................................................................82 3. 实验原理 .......................................................................................................................82 4. 实验步骤 .......................................................................................................................86 5. 实验思考 .......................................................................................................................92 实验 14 Nor-Flash 原理及编程 .............................................................................................93 1. 实验目的 .......................................................................................................................93 2. 实验设备 .......................................................................................................................93 3. 实验原理 .......................................................................................................................93 4. 实验步骤 .......................................................................................................................96 5. 实验思考 .......................................................................................................................99 实验 15 Nand-Flash 原理及编程 .........................................................................................100 1. 实验目的 .....................................................................................................................100 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 ii 页 共 188 页 上海双实科技有限公司 2. 实验设备 .....................................................................................................................100 3. 实验原理 .....................................................................................................................100 4. 实验步骤 .....................................................................................................................104 5. 实验思考 .....................................................................................................................107 实验 16 通用 I/O 口的应用-跑马灯实验 ............................................................................108 1. 实验目的 .....................................................................................................................108 2. 实验设备 .....................................................................................................................108 3. 实验原理 .....................................................................................................................108 4. 实验步骤 .....................................................................................................................114 5. 实验思考 .....................................................................................................................115 实验 17 LCD 接口编程 ........................................................................................................... 116 1. 实验目的 .....................................................................................................................116 2. 实验设备 .....................................................................................................................116 3. 实验原理 .....................................................................................................................116 4. 实验步骤 .....................................................................................................................124 5. 实验思考 .....................................................................................................................127 实验 18 触摸屏应用 ..............................................................................................................128 1. 实验目的 .....................................................................................................................128 2. 实验设备 .....................................................................................................................128 3. 实验原理 .....................................................................................................................128 4. 实验步骤 .....................................................................................................................131 5. 实验思考 .....................................................................................................................134 实验 19 UART 异步串行接口应用 .........................................................................................135 1. 实验目的 .....................................................................................................................135 2. 实验设备 .....................................................................................................................135 3. 实验原理 .....................................................................................................................135 4. 实验步骤 .....................................................................................................................138 5. 实验思考 .....................................................................................................................142 2 实验 20 I C 接口编程 ............................................................................................................143 1. 实验目的 .....................................................................................................................143 2. 实验设备 .....................................................................................................................143 3. 实验原理 .....................................................................................................................143 4. 实验步骤 .....................................................................................................................148 5. 实验思考 .....................................................................................................................152 实验 21 RS-485 通讯实验 .....................................................................................................153 1. 实验目的 .....................................................................................................................153 2. 实验设备 .....................................................................................................................153 3. 实验原理 .....................................................................................................................153 4. 实验步骤 .....................................................................................................................154 5. 实验思考 .....................................................................................................................158 实验 22 CAN 总线通讯实验 ...................................................................................................159 1. 实验目的 .....................................................................................................................159 2. 实验设备 .....................................................................................................................159 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 iii 页 共 188 页 上海双实科技有限公司 3. 实验原理 .....................................................................................................................159 4. 实验步骤 .....................................................................................................................160 5. 实验思考 .....................................................................................................................164 实验 23 GPRS 实验 .................................................................................................................165 1. 实验目的 .....................................................................................................................165 2. 实验设备 .....................................................................................................................165 3. 实验原理 .....................................................................................................................165 4. 实验步骤 .....................................................................................................................174 5. 实验思考 .....................................................................................................................177 实验 24 GPS 实验 ...................................................................................................................178 1. 实验目的 .....................................................................................................................178 2. 实验设备 .....................................................................................................................178 3. 实验原理 .....................................................................................................................178 4. 实验步骤 .....................................................................................................................181 5. 实验思考 .....................................................................................................................184 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 iv 页 共 188 页 上海双实科技有限公司 实验 1 ADS1.2 开发环境使用 1. 实验目的 z 熟悉 ADS1.2 开发环境,使用 ADS 编译、调试并跟踪一段已有的程序 z 了解嵌入式开发的基本思想和过程 2. 实验设备 z 硬件:PC 机 z 软件:ADS1.2 开发工具 3. 实验原理 3.1 交叉开发环境概述 嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件 比较困难,有时候甚至是不可能的。目前一般采用的解决办法是首先在通用计算机上编写程 序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台 上的特定位置上运行。 需要交叉开发环境(Cross Development Environment)的支持是嵌入式应用软件开发 时的一个显著特点,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运 行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式,如图 1 所示。 图 1 交叉开发环境 交叉开发环境的组成要素: 宿主机(Host)是一台通用计算机(如 PC 机或者工作站),它通过串口或者以太网接口 与目标机通信。宿主机的软硬件资源比较丰富,不但包括功能强大的操作系统(如 Windows 和 Linux),而且还有各种各样优秀的开发工具(如 WindRiver 的 Tornado、Microsoft 的 Embedded Visual C++等) ,能够大大提高嵌入式应用软件的开发速度和效率。 目标机(Target)一般在嵌入式应用软件开发期间使用,用来区别与嵌入式系统通信的 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第1页 共 188 页 上海双实科技有限公司 宿主机,它可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真 系统,但软硬件资源通常都比较有限。嵌入式系统的交叉开发环境一般包括交叉编译器、交 叉调试器和系统仿真器,其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,而 交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。在采用宿主机 /目标机模式开发嵌入式应用软件时,首先利用宿主机上丰富的资源和良好的开发环境开发 和仿真调试目标机上的软件,然后通过串口或者以网络将交叉编译生成的目标代码传输并装 载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,最后 目标机在特定环境下脱离宿主机单独运行。 建立交叉开发环境是进行嵌入式软件开发的第一步,目前常用的交叉开发环境主要有开 放和商业两种类型。开放的交叉开发环境的典型代表是 GNU 工具链、目前已经能够支持 x86、 ARM、MIPS、PowerPC 等多种处理器。商业的交叉开发环境则主要有 Metrowerks CodeWarrior、 ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。 3.2 ADS1.2 开发环境简介 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 中都得以体现。 ARMADS 支持所有 ARM 系列处理器,包括最新的 ARM9E 和 ARMl0。除了 ARM SDT 支持 的运行操作系统外,还可以在 Windows 2000/Me 及 RedHat Linux 上运行。 ARM ADS 由 6 部分组成: 1.代码生成工具 代码生成工具(Code Generation Tools)由源程序编译、汇编、链接工具集组成。 ARM 公司针对 ARM 系列每一种结构都进行了专门的优化处理。这一点除了作为 ARM 结构 的设计者的 ARM 公司外,其他公司都无法办到。ARM 公司宣称,其代码生成工具最终生 成的可执行文件最多可以比其他公司工具套件生成的文件小 20%。 2.集成开发环境 CodeWarrior IDE 是 Metrowerks 公司一套比较有名的集成开发环境,有不少厂商 将它作为界面工具集成在自己的产品中。CodeWarrior IDE 包含工程管理器、代码生成 接口、语法敏感编辑器、源文件和类浏览器、源代码版本控制系统接口及文本搜索引擎 等。其功能与 Visual Studio 相似,但界面风格比较独特。ADS 仅在其 PC 机版本中集成 了该 IDE。 3.调试器 调 试 器 (Debuggers) 部 分 包 括 两 个 调 试 器 : ARM 扩 展 调 试 器 AXD(ARM extended Debugger)和 ARM 符号调试器 armsd(ARM Symbolic Debugger)。 AXD 基于 Windows 9X/NT 风格,AXD 具有一般意义上调试器的所有功能,包括简单 和复杂断点设置、栈显示、寄存器和存储区显示及命令行接口等。 armsd 作为一个命令行工具辅助调试或者用在其他操作系统平台上。 4. 指令集模拟器 用户使用指令集模拟器(Instruction Set Simulators)无需任何硬件即可在 PC 上完成一部分调试工作。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第2页 共 188 页 上海双实科技有限公司 5. ARM 开发包 ARM 开发包(ARM Firmware Suite)由一些底层的例程和库组成,帮助用户快速开发 基于 ARM 的应用和操作系统。具体包括系统启动代码、串行口驱动程序、时钟例程、中 断处理程序等,Angel 调试软件也包含在其中。 6. ARM 应用库 ADS 的 ARM 应用库(ARM Applications Library)完善和增强了 SDT 中的函数库,同 时还包括一些相当有用的提供了源代码的例程。 用户使用 ARM ADS 开发应用程序与使用 ARM SDT 完全相同,同样是选择配合 Angel 驻留模块或者 JTAG 仿真器进行。目前大部分 JTAG 仿真器均支持 ARM ADS。 本实验主要介绍 ADS1.2 开发环境的使用,通过实例使读者掌握在 ADS1.2 中建立、 编译和调试工程。 4. 实验步骤 步 骤 1: 安 装 ADS1.2 安 装 ADS1.2 是 本 实 验 的 第 一 步 。随 机 光 盘 里 给 出 了 ADS1.2 的 安 装 文 件 。安 装 方法可参照安装文件目录下的说明文件。 步骤 2:打开 ADS1.2 安装完成后,选择“开始—〉所有程序—〉ARM Developer Suite v1.2”下的“CodeWarrior for ARM Developer Suite”打开集成开发环境,如图 2 所示。 图 2 ADS1.2 集成开发环境 步骤 3:新建工程 单击 File 菜单,选择 New 菜单项即弹出 New 对话框,如图 3 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第3页 共 188 页 上海双实科技有限公司 图 3 新建工程 选择工程模板为 ARM 可执行映像(ARM Executable Image) ,然后在 Location 项选择工 程存放路径,并在 Project name 项输入工程名称,单击“确定”按钮即可建立相应工程, 工程文件名后缀为.mcp,如图 4 所示。 图 4 New 对话框 步骤 4:编译选项设置 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第4页 共 188 页 上海双实科技有限公司 步骤 3 点击确定按钮后出现工程窗口,在工程窗口中选择 DebugRel Setting 进入编译 选项设置对话框,如图 5、图 6 所示。 图 5 进入编译选项对话框 图 6 编译选项对话框 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第5页 共 188 页 上海双实科技有限公司 在 Debug Settings 对话框中选择 Target Settings 选项,在 Post-linker 列表框中选 择 ARM fromELF,单击右下角的 Apply 按钮使其有效。如图 7 所示。 图 7 设置 Target Settings 在 Debug Settings 对话框中选择 ARM Linker 选项,选中 Simple 单选按钮,在 Simple image 选项组中设置连接的 Read Only(只读)和 Read-Write(读写)地址。如图 8 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第6页 共 188 页 上海双实科技有限公司 图 8 设置连接地址范围 地址 0x30000000 是开发板上 SDRAM 的真实地址,是由系统的硬件决定的。本实验中对 系统可读写的内存地址并没有分配,系统将自动分配地址。 点击 Layout 选项页,在该选项页中的 Place at beginning of image 选项组中设置程 序的入口模块。指定在生成的代码中,程序是从 2440init.s 开始运行的。Object/Symbol/ 项设为 2440init.o,Section 项设为 Init。如图 9 所示。 图 9 设置入口模块 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第7页 共 188 页 上海双实科技有限公司 在 Debug Settings 对话框中选择 ARM fromELF 选项,设置 Output format 为 Plain binary。也可在此对话框中设置生成的 BIN 文件名。 图 10 设置 Output format 最后在 Language Settings 选项中的 5 个子项中将“Architecture or Processor” 栏 都选择为 ARM920T。图 11 只列出了 ARM Assembler 子项的设置情况。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第8页 共 188 页 上海双实科技有限公司 图 11 设置 Language Settings 单击 OK 按钮退出设置对话框。 注意:为了以后建立工程的方便,可以将该工程作为工程模板,以后建立工程时就不需 要再对工程进行重复设置了。具体方法是在 ADS1.2 安装目录下 Stationery 文件夹中新建一 个文件夹,例如可取名“SinoSys-EA2440a Template”,再将上面建立的工程文件(即.mcp 的文件)拷贝到这个新建的文件夹中。这样,在每次新建工程时就可以选择名为 “SinoSys-EA2440a Template”的工程模板了。 步骤 5:编辑源文件 选择 File 菜单下的 New,打开 New 对话框。在该对话框中选择 File 选项页,输入文件 名称,文件存放路径并把它加入到刚才所建的工程中。如图 12 所示。 图 12 建立新文件 点击确定按钮后就进入了所建文件的编辑窗口了。在编辑窗口中读者可以自己编写索要 实现的程序代码。本实验为了方便,直接将一个示例代码加入到工程中。 将随机光盘中该实验的示例代码拷贝到刚才所建立的工程目录下。 在工程文件窗口中(本例为 adc.mcp 窗口)点击鼠标右键,选择“Add Files”,打开添 加文件对话框,选择到所建立的工程文件目录。如图 13 所示。 图 13 添加文件对话框 点击打开按钮,出现 Add Files to Target 对话框,默认选择,点击确定按钮,test1.S 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第9页 共 188 页 上海双实科技有限公司 文件就被加到工程中了。 步骤 6:编译工程 在工程窗口中按“Make”按钮,或者直接按 F7 快捷键,编译工程。在出现的错误/警告 窗口中选择某错误/警告信息,ADS 会自动打开相应的源文件并用箭头指向出错的文本行。 错误/警告窗口如图 14 所示。 图 14 错误/警告窗口 步骤 7:利用 ARM 软件仿真器调试程序 在 ADS 中执行 Project|Debug 命令启动 ADS1.2 的调试工具 AXD。在 AXD 中执行 Options|Configure Target 命令对 AXD 进行设置,如图 15 所示。 图 15 AXD 设置对话框 在上述对话框中选择 ARMUL(软件仿真器),关于硬件仿真器的使用可参照后续实验。 本实验只使用 ADS 提供的软件仿真器进行调试。 (注意:第一次使用请选择 Configure 按钮, 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 10 页 共 188 页 上海双实科技有限公司 在打开的对话框中将处理器类型改为 ARM920T。) 点击 OK 按钮退出。再重新打开 AXD 对话框,可以看到 AXD 进入了程序调试窗口。这样 就可以对刚才加入的 test1.S 文件进行调试了。如图 16 所示。 图 16 调试窗口 利用提供的调试工具可以控制程序的运行,设置断点,察看寄存器、存储器等功能。 关于 ADS1.2 完整的使用方法及调试方法,可察看 ADS1.2 提供的帮助文档。后续实验也 会介绍本实验没有提到的某些 ADS1.2 的使用方法。 5. 实验思考 5.1 ADS1.2 开发环境主要由哪几部分构成,各个部分的作用是什么? 5.2 基于 ARM9 处理器,在配置 ADS1.2 编译选项时,应注意哪些问题? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 11 页 共 188 页 上海双实科技有限公司 实验 2 ICE 仿真器的安装和使用 1. 实验目的 z 掌握 ICE 仿真器的安装和使用 z 了解嵌入式系统调试的概念和基本方法 2. 实验设备 z 硬件:PC 机,SinoSys-EA2440a 实验平台,ICE26 仿真器 z 软件:ADS1.2 开发工具,ICE 仿真器驱动程序 3. 实验原理 3.1 嵌入式系统调试概述 嵌入式软件开发有别于桌面软件系统开发的一个显著的特点,是它一般需要一个交叉编 译和调试环境,即编辑和编译软件在主机上进行(如在 PC 机的 Windows 操作系统下),编译 好的软件需要下载到目标机上运行,主机和目标机建立起通讯连接,并传输调试命令和数据。 由于主机和目标机往往运行着不同的操作系统,而且处理器的体系结构也彼此不同,这就提 高了嵌入式开发的复杂性。 由于嵌入式系统不具备自开发能力以及其他众所周知的限制因素,因此调试一个嵌入式 系统与在单片机上进行软件调试有所不同,它通常需要使用一种称为“交叉调试”(Cross Debug,也称为“远程调试”,Remote Debug)的技术。在交叉调试技术中,运行调试器软件 的机器称为“主机” (Host),例如一个运行 Linux 系统或 Windows 系统的 PC 机;被调试的 嵌入式系统称为“目标机”(Target);主机与目标机之间可以通过串行接口、网络接口或特 殊的硬件调试接口等 3 种方式进行连接。 从交叉调试的技术实现途径以及它的应用情景两个角度看,它通常可以分为“硬件级调 试工具及技术”和“源码级软件调试工具技术”两大类。例如,最常见的在线仿真器 ICE 和 JTAG 仿真器就属于硬件级调试工具,而 GDB(包括运行在目标机上的 gdb server 或 gdb stub 程序)则属于源码级软件调试工具。 下面简单介绍一下几种常用的系统调试工具。 (A)在线仿真器 在线仿真器(1n-Circuit Emulators,ICE)是嵌入式系统领域使用得最多的调试器之一。个 人认为对 ICE 最恰当的定义就是:在线仿真器是一个用来设计其他计算机系统的计算机, 它代替了物理目标机上的处理器或 MCU,其表现与被代替的目标机处理器完全一样,但是 它允许用户查看处理器内部的数据或代码并控制 CPU 的运行。 一个在线仿真器通常由两个小盒子(SmallPod)组成。其中一个是被插入到目标机的处理 器插槽中的仿真探头或探测盒(ProbePod),实际上它里面包含了一颗与被代替 CPU 完全相同 的处理器,但是为了调试的目的,探测盒里面的处理器经过了特殊处理,因此探测盒也称为 微处理器盒(Microprocessor Pod)。而另一个则用来连接主机。 一般而言,ICE 对目标机处理器的代替是完全代替,也就是物理上的代替,用户通常要 将目标机上的处理器完全拔出,然后直接将 ICE 的仿真器探测接口插入目标机的 CPU 插槽 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 12 页 共 188 页 上海双实科技有限公司 中。在整个开发期间,目标机 CPU 就将完全被 ICE 的仿真器探测盒所代替,因而目标系统 上的任何操作也也将由用户通过 ICE 到主机的接口被完全监视和控制。而当开发过程结束 后,目标机软、硬件系统已经达到了所预期的功能时,将不再需要在线仿真器的调试功能, 因此也就可以去除在线仿真器而将目标机上原来的处理器重新插回。 对于在线仿真器的用户而言,最关心的是能用在线仿真器做些什么?简而言之,在线仿 真能向用户提供哪些可用的调试资源? 由于在线仿真器独特的技术实现途径——它完全代替了目标机上的处理器,因此 ICE 对目标机的访问是非干扰性的访问(Nonintrusive Access),也即在线仿真器能够在不消耗目标 机系统的任何资源的前提下,例如:不消耗目标系统的堆栈空间和内存空间、不影响目标系 统上的代码执行速度等,查看目标机的内部信息。这一特点对于调试实时应用(Real-Time Application)来说是非常重要的。也正由于在线仿真器的这些特点,因此在线仿真器除了能 提供普通调试器都有的基本功能(包括检查和更改寄存器、内存单元以及 I/O 的内容等)之 外,还能够提供一般调试器所不具备的调试手段。可以说,ICE 是嵌入式系统领域功能最强 大的一种调试工具。 (B)片上调试器 正如前面所述,随着现代的微处理器封装越来越表贴化,仿真器探头的实现也就越来越 困难。但是如果不能对微处理器实现探测,也就不能知道微处理器上正在执行的一切操作细 节信息,从而也不能实现测试与调试的目的。 另一方面,统计数字也表明:在大约 95%的调试过程中用户仅仅使用了简单断点、单 步以及访问处理器资源、内存和外设等一些运行控制方面的基本调试手段,因此一个很自然 的发展趋势就是将实时跟踪和运行控制分开实现,而将运行控制放到 CPU 核(CPU Core)内 由一个专门的调试控制逻辑模块来实现,并用一个专用的串行信号接口开放给用户,用户可 以通过 CPU 核内的调试控制逻辑模块来停止/继续 CPU 的运行,并访问目标机上的各种资 源(包括寄存器、内存和外设等),这就是片上调试技术(On-Chip Debug,简称OCD)。在 OCD 接口中使用串行信号接口是为了减少调试接口的引脚数目,而不用像在线仿真器或逻 辑分析仪那样要用上百根线路去连接目标机。 为了实现主机与目标机处理器的片上调试逻辑之间的连接,可以用一块简单的信号转换 电路板来匹配主机通信接口(例如 RS—232 串口和并口)与目标机 CPU 的串行调试接口。这 块简单的信号转换电路板就可以称为“片上调试器”(On-Chip Debuggers,简称 OCDs),也 可称为“串行调试器”(Serial Debugger)。由于目标机的片上调试接口是公开的标准化接口, 因此各第三方工具厂商可以发布他们自己的片上调试器。当然,实现主机通信接口与目标机 CPU调试接口之间的信号转换仅仅只是片上调试器的一个最基本功能,各第三方厂商通常 都会在其发布的片上调试器产品中实现其他高级功能。 摩托罗拉公司最早认识到 OCD 技术这个发展趋势,并率先在 683xx 和 68HCl6 处理器 上创造了 BDM(Background Debug Mode)调试接口。随后,摩托罗拉公司在它的 Cold fire, PowerPC 等系列微处理器中都使用了 BDM 调试接口技术。而 MIPS、Intel、TI、IBM 和ARM等则实现了基于 JTAG(Joint Test Access Group)标准的串行调试接口。尽管 BDM调 试接口和 JTAG 调试接口这两者在实现细节上相去甚远,但是从用户的角度看,这两种串行 调试接口却都提供相似的调试功能,而且它们的复杂度也都相差无几。由于 JTAG 是IEE E的国际标准,当前绝大多数 CPU 厂商都使用它来实现处理器的片上调试逻辑,因此后面 将以 ARM 微处理器为例详细讨论基于 JTAG 接口的片上调试器技术。而 BDM 接口则似乎 只在摩托罗拉的处理器产品系列中使用,因此就不详细介绍了。 与 ICE 或逻辑分析仪相比,片上调试器不存在任何因 CPU 封装或 CPU 速度而带来的问 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 13 页 共 188 页 上海双实科技有限公司 题。CPU 与调试器之间的连接问题也不存在,因为调试器只占用几根专用的 CPU 引脚。通 过片上调试逻辑实现的运行控制,可以对目标机 CPU 进行设置断点、单步执行以及资源读 /写访问等绝大多数的基本调试活动。此外,片上调试器同样也不占用任何目标系统的资源。 (C)JTAG JATG 和 BDM 比较类似,也是片上仿真调试手段之一,但是它是由早期的检测标准发 展而来。IEEE149.1 标准中规定对应于数字集成电路的每个引脚都设有一个移位寄存单元, 称为边界扫描单元 BSC(Boundary Sean Cell), 它将 JTAG 电路与内核逻辑电路联系起来, 同时隔离内核逻辑电路和芯片引脚。由集成电路的所有边界扫描单元 BSC 构成边界扫描寄 存器 BSR(Boundary Scan Register) 边界扫描寄存器电路仅在进行 JTAG 测试时有效,在集成 电路正常工作时无效,不影响集成电路的功能。 3.2 ARM 调试机制 正如 ARM 处理器产品手册中所言,嵌人式产品开发周期中的一个关键阶段就是系统的 测试和调试,因此为了方便用户的开发,ARM 公司在一开始设计 ARMCPU 核时就在其中 内嵌了 JTAG 片上调试逻辑(ARM 公司在其产品手册中将片上调试逻辑称为 Embedded-ICE, 因为片上调试逻辑实际上就是把 ICE 的绝大部分功能放到 CPU 核中来实现,因此称其为嵌 入式 ICE 是很直观的—个叫法)。 处理器的片上调试逻辑的实现精髓就在于 ARM 处理器核有两种状态:系统状态和调试 状态,而片上调试逻辑可以完全控制 CPU 核的状态转换。系统状态就是 CPU 正常的运行状 态,运行在主机上的调试器软件可以显示地请求片上调试逻辑将处于系统状态下的 CPU 核 转入调试状态下。当 ARM 处理器位于调试状态下时,用户便可以使用位于片上调试逻辑中 的 JTAG 扫描链(scan chain)来向 CPU 核的指令管道(instruction pipeline)中插入指令,并控制 被插入指令在 CPU 核上的执行。依靠着被插入指令在 CPU 核中的执行,也就可以读出或修 改 CPU 核和目标系统的当前系统上下文状态(包括寄存器、内存单元等等)。 图 1 给出了一个典型的基于 ARM 处理器的嵌入式开发系统的总体框架结构。该图也清 晰的表明,调试一个 ARM 目标机系统需要下列两个基本的组件:一个运行调试软件的 PC 机和一个协议转换器。 图 1 JTAG 连接方式 尽管 ARM 处理器是一个庞大的处理器家族,但幸运的是,其各种 CPU 核的片上调试 逻辑辑却基本相同,不同之处仅仅在于片上调试逻辑中的 JTAG 扫描链不一样。 本 实 验 就 是 介 绍 一 种 基 于 JTAG 的 ICE 仿 真 器 的 安 装 和 使 用 过 程 , 并 以 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 14 页 共 188 页 上海双实科技有限公司 SinoSys-EA2440a 为实验平台,介绍如何使用仿真器进行 ARM 的开发调试。 4. 实验步骤 步 骤 1: 安 装 ICE 仿 真 器 驱 动 程 序 首先进入到 ICE 仿真器光盘中驱动程序的安装目录 Tools\SinoSys-ICE26\multice22 ,双击 setup.exe。安装过程中可选择默认安装。 步 骤 2: 连 接 硬 件 打 开 SinoSys-EA2440a 包 装 ,取 出 电 源 线 将 SinoSys-EA2440a 与 电 源 相 连 。取 出 ICE26 仿 真 器 ,将 并 口 接 口 连 在 PC 机 的 并 口 端 ,JTAG 接 口 接 在 SinoSys-EA2440a 的 JTAG 插 槽 上 。 确 认 连 线 连 接 好 后 , 打 开 SinoSys-EA2440a 电 源 开 关 。 步 骤 3:配置 ARM920T 驱动 在“开始”菜单中点击“Multi-ICE SEVER”。如图 2 所示。可以看到同时启动了两个界 面,在实验过程中,请不要将这两个界面关闭,关闭会导致仿真器不能正常工作。如图 3 所示。 图 2 打开 ICE Server 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 15 页 共 188 页 上海双实科技有限公司 图 3 启动后出现的两个界面 然 后 将 \Tools\SinoSys-ICE26\ARM920T.cfg 文 件 复 制 到 系 统 中 的 已 经 安 装 好 的 Multi-ice 的根目录下。 (由于 Multi-ice 的默认安装并没有 2440 的驱动文件,所以我们要 为它手动添加一个驱动。 )如图 4 所示。 图 4 复制 ARM920T.cfg 文件 再回到“ARM Multi – ICE sever”,选择“file”下的“load configuration”。如图 5 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 16 页 共 188 页 上海双实科技有限公司 图 5 Load Configuration 选择“ARM920T.cfg”文件,然后打开。见图 6。 图 6 选择文件 可以看到“ARM Multi–ICE sever”中已经检测到了 ARM920T 的内核。(注意:首先要 给整个系统上电,且各种连线都保持打开状态。 )如下图所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 17 页 共 188 页 上海双实科技有限公司 图 7 检测到内核 关闭 Multi-ICE server 程序。 进 入 \Tools\SinoSys-ICE26\Multi-ICE2.26\mice_2_2_6\windows 目 录 下 , 将 Multi-ICE.dll 、 Multi-ICEServer.exe 和 irlength.arm 文 件 拷 贝 到 已 经 安 装 好 的 Multi-ice 的根目录下。 进 入 \Tools\SinoSys-ICE26\Multi-ICE2.26 \mice_2_2_6\common 目 录 下 , 将 所 有 的.mul 文件拷贝到已经安装好的 Multi-ice 的根目录下。 进 入 \ Tools\SinoSys-ICE26\Multi-ICE2.26\mice_2_2_6\common 目 录 下 的 armperip.xml 和 armboard.xml 文件以及\Multi-ICE2.26\mice_2_2_6\windows 目录下的 rdimsvr.sdi 文 件 拷 贝 到 ADS1.2 工 具 安 装 目 录 的 Bin 目 录 ( C:\Program Files\ARM\ADSv1_2\Bin)下。 重新打开 Multi-ICE server 程序,选择 Settings 菜单下的 Start_up Options,打开 设 置 对 话 框 , 在 Start_up Configuration 中 选 择 Auto-Configure 单 选 框 。 去 除 NetworkSettings 里的两个复选框。 重新打开重新打开 Multi-ICE server 程序,可以看到 Multi-ICE server 可以自动检 测到 ARM 处理器内核了。 步骤 4:利用仿真器进行调试 仿真器配置好后,进入 ADS1.2,打开一个已有的工程。进入 ADS1.2 自带的调试器 AXD 界面下,首先选择 Options/Configure Target 进行设置(如图 8) 。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 18 页 共 188 页 上海双实科技有限公司 图 8 选择 Options/Configure Target 进行设置 如果正常的话,可以发现多了一个 Multi-ICE 的选项(如图 9);如果没有该选项,我们 可以通过点击 Add 来进行添加 Multi-ICE.dll 文件(在安装的 Multi-ICE 目录下)。选择 Multi-ICE 选项,点击 configure 按钮,进入配置状态栏(如图 10)。 图 9 Target 设置对话框 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 19 页 共 188 页 上海双实科技有限公司 图 10 配置状态栏 点击确定后,再点击“ok”,可以看到 AXD 已经被激活,开始装载文件了。文件装载完 毕后,整个系统处于就绪状态,可以进行所有的仿真功能了。 选择 File/Load Image 载入编译好的文件。在已有的工程目录下,可以看到在生成 bin 文件的同时,还生成了 axf 的文件,这个文件就是要装载的调试文件。读者可以自己载入一 个 axf 文件,然后就可以进行 AXD 的调试功能了。AXD 调试器的使用方法可以参照 ADS1.2 的用户手册。 5. 实验思考 5.1 嵌入式系统调试的特点是什么? 5.2 BDM 和 JTAG 调试各自的功能特点是什么? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 20 页 共 188 页 上海双实科技有限公司 实验 3 Flash 烧写工具的使用 1. 实验目的 z 掌握 SJF2440 Flash 烧写工具的安装和使用 z 了解嵌入式系统开发中程序固化的基本方法 2. 实验设备 z 硬件:PC 机,SinoSys-EA2440a 实验平台,ICE16 仿真器 z 软件:SJF2440 工具软件及并口 JTAG 驱动程序 3. 实验原理 嵌入式软件开发完成后,下一步工作就是要把软件集成到嵌入式硬件内部。在嵌入式 系统设计中,常用的存储介质就是 Flash。因此掌握 Flash 的烧写方法对嵌入式系统开发有 重要的作用。 烧写 Flash 可以有多种方法,其中最基本的就是基于 JTAG 的 Flash 烧写方式,当然这 也是最麻烦的一种。读者可能会想到,在嵌入式开发中,如果从 Boot Loader 启动后,通常 菜单里都会有 Flash 烧写的功能,通过简单的命令就可以实现 Flash 的烧写,为何还要基于 JTAG 这种方式呢?诚然,如果有 Boot Loader 为你提供了烧写 Flash 的功能,一般不会选 择 JTAG 的烧写方式。但读者有没有想过,Boot Loader 这类系统启动时即开始运行的程序 又是怎么进入到嵌入式系统中的呢?也就是说,在系统设计的最开始阶段,还是需要基于硬 件的方式来进行 Flash 的操作,这时就不得不使用 JTAG 方式了。 在 SinoSys-EA2440a 实验平台中,采用了三星的 S3C2440A 处理器,Flash 器件选择了 Nand 和 Nor 两种。实验平台出厂前,已经在 Nor-Flash 器件中烧入了一段启动代码,这段 程序就是通过 JTAG 方式烧入的。三星公司提供了 SJF2440 工具针对 S3C2440A 来实现对多种 Flash 的操作。SJF2440 能够通过 JTAG 口对 FLASH MEMORY(K9S1208,Intel E28F128, 搜 索 SST39VF1601,AMD29LV800BB)进行编程;并且能对一特定地址空间进行读/写操作。 本实验就是要使读者掌握并口 JTAG 驱动的安装方法和 SJF2440 工具的使用方法。 4. 实验步骤 步 骤 1: 连 接 硬 件 打 开 SinoSys-EA2440a 包 装 ,取 出 电 源 线 将 SinoSys-EA2440a 与 电 源 相 连 。取 出 并 口 线 , 用 ICE16 将 SinoSys-EA2440a 和 PC 机 并 口 相 连 。 步 骤 2: 安 装 并 口 JTAG 驱 动 程 序 将 SJF2440 工 具 及 驱 动 程 序 拷 贝 到 PC 本 地 磁 盘 上 , 由 于 SJF2440 工 具 需 要 在 命令行中使用,因此可以将该文件夹放到磁盘根目录下,方便使用。注意去除所 有文件的只读属性。 在 WIN NT/2000/XP 操作系统上任何应用不能访问 I//O 比如:并口。GIVEIO.SYS 能够 使 SJF2440.EXE 无任何错误的访问并口。而对于 WIN95/98,GIVEIO.SYS 是不需要的。 下面以 WinXP 为例,介绍驱动的安装方法。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 21 页 共 188 页 上海双实科技有限公司 在 XP 下以管理员身份登陆。拷贝 giveio.sys 文件到 “%systemroot%\system32\drivers.” 目录下,记住去掉只读属性(如图 1)。 图 1 拷贝 giveio.sys 文件 选择控制面板,“添加硬件”。出现对话框后点击下一步按钮,出现如图 2 对话框。 图 2 添加硬件向导 1 选择“是,硬件已连接好”,点击下一步按钮。出现如图 3 对话框。选择添加新的硬件 设备,点击下一步。 出现如图 4 对话框。 选择手动安装,点击下一步。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 22 页 共 188 页 上海双实科技有限公司 出现如图 5 对话框。 选择显示所有设备,点击下一步。 图 3 添加硬件向导 2 图 4 添加硬件向导 3 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 23 页 共 188 页 上海双实科技有限公司 图 5 添加硬件向导 4 出现如图 6 对话框,选择从磁盘安装,点击下一步。 图 6 添加硬件向导 5 选择”\Tools\sjf2440_Rev02\GIVEIO”文件夹中的 giveio.inf 文件(如图 7)。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 24 页 共 188 页 上海双实科技有限公司 图 7 添加硬件向导 6 确定后在添加硬件向导对话框中一直选择下一步,直到出现硬件安装对话框(如图 8) 。 图 8 硬件安装对话框 选择仍然继续,完成安装。 步 骤 3:SJF2440 工具的使用 由于 SinoSys-EA2440a 在出厂前在 Nor-Flash 中烧入了 2440 启动代码,在 Nand-Flash 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 25 页 共 188 页 上海双实科技有限公司 中烧入了 Linux 操作系统。为了保证能正常使用 Linux,我们在这里只对 Nand-Flash 中的 vivi Boot Loader 进行重新的烧录,对 Nor-Flash 的烧录过程和 Nand-Flash 类似。 打开 SinoSys-EA2440a 电源开关。 在 Windows 操作系统下进入命令行方式。通过 DOS 命令进入 SJF2440 工具的文件夹 (\Tools\sjf2440_Rev02\GIVEIO),具体的命令操作如图 9 所示。 (注意:必须把要烧录的 vivi 文件复制到 SJF2440 工具的文件夹中。 ) 图 9 烧录 Nand-Flash SinoSys-EA2440a 选用的 Nand-Flash 芯片是 K9S1208,因此在选择 Flash 型号时,选择 0。 大概一分钟后,vivi 烧录完成,选择 2 退出程序。 同样可以选择其他 Flash 型号进行 Nor-Flash 等其他型号的 Flash 操作过程。这里就不 做描述了。 5. 实验思考 5.1 Flash 烧写工具主要有几种? 5.2 基于 JTAG 的 Flash 烧写工具的优点是什么?在什么场合下使用? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 26 页 共 188 页 上海双实科技有限公司 实验 4 DNW 工具的使用 1. 实验目的 z 掌握 DNW 工具的安装和使用 z 了解嵌入式系统开发中程序下载的基本方法 2. 实验设备 z 硬件:PC 机,SinoSys-EA2440a 实验平台 z 软件:DNW 驱动程序 3. 实验原理 嵌入式软件开发完成后,最终通过交叉编译,在目标系统上运行。运行的方式一般包 括 ROM 运行和 RAM 运行两种。这就需要使用方便的工具来使用这些功能。 在 SinoSys-EA2440a 中,通过实验 3 介绍的方法,已经通过 JTAG 将一个功能比较完备 的 Boot Loader 烧写到 Nor-Flash 中。在这段代码里驱动了 SinoSys-EA2440a 的串口和 USB 口,并实现了 USB 读写内存及 Flash 的烧写功能。这就需要我们有一个方便的工具实现串口 及 USB 口的操作,而 DNW 工具软件正符合我们的要求。 在 PC 上安装 DNW 工具需要先安装驱动程序,本实验主要介绍 DNW 工具驱动的安装及如 何使用 DNW 工具配合 Boot Loader 来实现内存读写和 Flash 的烧写功能。总体来说,DNW 就 是一个串口加 USB 的终端工具。 4. 实验步骤 步 骤 1: 连 接 硬 件 打 开 SinoSys-EA2440a 包 装 ,取 出 电 源 线 将 SinoSys-EA2440a 与 电 源 相 连 。取 出 USB 线 将 SinoSys-EA2440a 和 PC 机 USB 口 相 连 ,取 出 串 口 线 将 SinoSys-EA2440a 和 PC 机 的 串 口 相 连 。 步 骤 2: 安 装 驱 动 程 序 将光盘里目录 DNW 驱动程序的内容拷贝到用户 PC 机上,然后去除拷贝好的全部文件 的只读属性。记住这点很重要,否则 DNW 不能正常工作。 将 SinoSys-EA2440a 设置为从 Nor-Flash 启动,打开 EA2440a 电源开关。 如果是第一次使用 DNW 工具的话,将会发现 PC 机会有一个 USB 设备被发现,下面 开始添加驱动。选择从列表安装,点击下一步。如下图。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 27 页 共 188 页 上海双实科技有限公司 图 1 安装硬件向导 1 选择搜索路径,找到 DNW 驱动程序所在路径。如下图。 图 2 安装硬件向导 2 点击下一步,找到匹配的驱动程序,如下图。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 28 页 共 188 页 上海双实科技有限公司 图 3 安装硬件向导 3 点击下一步,出现如下图对话框,选择“仍然继续”。 图 4 安装硬件向导 4 出现如下对话框,说明 DNW 的驱动已经安装成功,接下来就可以使用 DNW 工具了。 图 5 安装硬加向导 5 步 骤 3:DNW 工具的使用 在 DNW 工具文件夹中打开 DNW 应用程序,界面如下图。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 29 页 共 188 页 上海双实科技有限公司 图 6 DNW 工具界面 连接串口,选择“Serial Port”菜单下的“Connect”。现在就可以看到在图 6 所示的 界面中对话框的标题栏中 COM 串口和 USB 口都已经连接好。 首先我们掌握使用 DNW 工具下载可执行文件到内存中的方法。由于在 SinoSys-EA2440a 中 RAM 的 映 射 地 址 是 0x30000000 , 因 此 首 先 设 定 下 载 地 址 为 0x30000000 。 选 择 “Configuration”菜单下的“Options”,弹出如下对话框。 图 7 DNW 设置对话框 在这个对话框里我们可以设定 COM 端口,串口比特率和 USB 的下载地址。我们可以按照 图 7 所示进行设置。单击 OK 按钮退出。 选择“USB Port”菜单下的“Transmit”,弹出打开文件按钮对话框,在对话框里选择 要下载的可执行文件,单击打开按钮就可以把所选择的文件下载到地址为 0x30000000 的内 存中去了。如下图所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 30 页 共 188 页 上海双实科技有限公司 图 8 传输文件 我们再来看一下通过 DNW 的终端功能,使用 Nor-Flash 中固化的一段 Boot Loader 的方 法。首先确认 SinoSys-EA2440a 从 Nor-Flash 启动,重新打开 SinoSys-EA2440a 电源开关。 可以看到在 DNW 工具的界面上出现 Boot Loader 的命令行菜单。 实际上当 SinoSys-EA2440a 设置为从 Nor-Flash 启动,SinoSys-EA2440a 上电后,在 Nor-Flash 中固化的 Boot Loader 程序将得到执行,在这段 Boot Loader 代码中驱动了 SinoSys-EA2440a 开发板上的串口和 USB Device 口,并通过串口将要交互的信息传送到 DNW 的界面上。 USB 的功能就是在开发主机端通过 USB 下载文件。 DNW 界面显示如图 9 所示。 图 9 上电后 DNW 界面显示 初始情况下 SinoSys-EA2440a 等待从 USB 下载文件的功能, 下载地址已经在前面设置过。 在 DNW 界面中按开发主机键盘任意键,DNW 将出现 Boot Loader 的功能菜单,如图 10。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 31 页 共 188 页 上海双实科技有限公司 图 10 按任意键后出现的功能菜单 在图中我们可以看到,Boot Loader 实现了 USB 的下载运行(默认就是这个方式) 、下 载、运行程序、测试内存、写入 Nand-Flash 等功能,读者可以自己试验这些功能。 我们在开发过程中如果已经在 Nor-Flash 中烧入这么一段 Boot Loader,在需要往 Nand-Flash 中烧写文件时,就可以通过 DNW 工具,很方便的将文件烧入到 Nand-Flash 中。 具体过程是:先在菜单中选择功能 1(Download Only),通过开发主机键盘上 1 按键来选择, 在提示的操作下选择将文件先下载到内存的某个区域中,一般我们可以在 DNW 中键入 “0x30000000”来指定下载地址,然后在“USB Port”中选择“Transmit” ,按照我们刚才 介绍的方法,将我们要下载的文件复制到内存中。再在界面中命令行菜单中选择 4(Download Image to Nand Flash),依然通过开发主机键盘选择。在命令行提示下指定下载到 Nand-Flash 的哪个 Block 中。按回车键就可以把内存中的文件烧写到 Nand-Flash 中去了。 由于在 SinoSys-EA2440a 出厂时,已经在 Nand-Flash 里面烧写了 Linux 操作系统,因 此这个操作我们就不去练习了,以免破坏了操作系统的正常运行。 读者可在实际开发过程中,由自己的实际需要来练习这个功能。 5. 实验思考 5.1 DNW 工具主要有哪些作用? 5.2 基于 Nor-Flash 中的 Boot Loader,利用 DNW 工具,如何实现烧写 Nand-Flash 的 功能? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 32 页 共 188 页 上海双实科技有限公司 实验 5 ARM 汇编指令编程 1. 实验目的 z 掌握 ARM 汇编指令编程方法 z 熟悉 ARM 汇编指令集 2. 实验设备 z 硬件:PC 机 z 软件:ADS1.2 开发工具 3. 实验原理 „ RISC 体系结构 传统的 CISC(Complex Instruction Set Computer,复杂指令集计算机)结构有其固 有的缺点,即随着计算机技术的发展而不断引入新的复杂的指令集,为支持这些新增的指令, 计算机的体系结构会越来越复杂,然而,在 CISC 指令集的各种指令中,其使用频率却相差 悬殊,大约有 20%的指令会被反复使用,占整个程序代码的 80%。而余下的 80%的指令却 不经常使用,在程序设计中只占 20%,显然,这种结构是不太合理的。 基 于 以 上 的 不 合 理 性 , 1979 年 美国 加 州 大 学 伯 克 利 分 校 提 出 了 RISC ( Reduced Instruction Set Computer,精简指令集计算机)的概念,RISC 并非只是简单地去减少指 令,而是把着眼点放在了如何使计算机的结构更加简单合理地提高运算速度上。RISC 结构 优先选取使用频率最高的简单指令,避免复杂指令;将指令长度固定,指令格式和寻址方式 种类减少;以控制逻辑为主,不用或少用微码控制等措施来达到上述目的。 到目前为止,RISC 体系结构也还没有严格的定义,一般认为,RISC 体系结构应具有如 下特点: - 采用固定长度的指令格式,指令归整、简单、基本寻址方式有 2~3 种。 - 使用单周期指令,便于流水线操作执行。 - 大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/ 存储指令可以访 问存储器,以提高指令的执行效率。 除此以外,ARM 体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯 片的面积,并降低功耗: - 所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。 - 可用加载/存储指令批量传输数据,以提高数据的传输效率。 - 可在一条数据处理指令中同时完成逻辑处理和移位处理。 - 在循环处理中使用地址的自动增减来提高运行效率。 当然,和 CISC 架构相比较,尽管 RISC 架构有上述的优点,但决不能认为 RISC 架构就 可以取代 CISC 架构,事实上,RISC 和 CISC 各有优势,而且界限并不那么明显。现代的 CPU 往往采用 CISC 的外围,内部加入了 RISC 的特性,如超长指令集 CPU 就是融合了 RISC 和 CISC 的优势,成为未来的 CPU 发展方向之一。 „ ARM 微处理器的寄存器结构 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 33 页 共 188 页 上海双实科技有限公司 ARM 处理器共有 37 个寄存器,被分为若干个组,这些寄存器包括: - 31 个通用寄存器,包括程序计数器(PC 指针) ,均为 32 位的寄存器。 - 6 个状态寄存器,用以标识 CPU 的工作状态及程序的运行状态,均为 32 位,目前只 使用了其中的一部分。 同时,ARM 处理器又有 7 种不同的处理器模式,在每一种处理器模式下均有一组相应的 寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括 15 个通用寄存器(R0~ R14)、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在 7 种处理器模式下 共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。 „ ARM 微处理器的指令结构 ARM 微处理器的在较新的体系结构中支持两种指令集:ARM 指令集和 Thumb 指令集。其 中,ARM 指令为 32 位的长度,Thumb 指令为 16 位长度。Thumb 指令集为 ARM 指令集的功能 子集,但与等价的 ARM 代码相比较,可节省 30%~40%以上的存储空间,同时具备 32 位代 码的所有优点。 „ ARM 微处理器的指令的分类与格式 ARM 微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且 处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完 成。 ARM 微处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指 令、加载/存储指令、协处理器指令和异常产生指令六大类,具体的指令及功能如表 1 所示 (表中指令为基本 ARM 指令,不包括派生的 ARM 指令)。 表 1 ARM 指令集 助记符 指令功能描述 助记符 指令功能描述 ADC 带进位加法指令 MRC 从协处理器寄存器到 ARM 寄存器的 数据传输指令 ADD 加法指令 MRS 传送 CPSR 或 SPSR 的内容到通用寄存 器指令 AND 逻辑与指令 MSR 传送通用寄存器到 CPSR 或 SPSR 的指 令 B 跳转指令 MUL 32 位乘法指令 BIC 位清零指令 MLA 32 位乘加指令 BL 带返回的跳转指令 MVN 数据取反传送指令 BLX 带返回和状态切换的跳转指令 ORR 逻辑或指令 BX 带状态切换的跳转指令 RSB 逆向减法指令 CDP 协处理器数据操作指令 RSC 带借位的逆向减法指令 CMN 比较反值指令 SBC 带借位减法指令 CMP 比较指令 STC 协处理器寄存器写入存储器指令 EOR 异或指令 STM 批量内存字写入指令 LDC 存储器到协处理器的数据传输指 STR 令 寄存器到存储器的数据传输指令 LDM 加载多个寄存器指令 减法指令 LDR 存储器到寄存器的数据传输指令 SWI SUB 软件中断指令 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 34 页 共 188 页 上海双实科技有限公司 MCR 从 ARM 寄存器到协处理器寄存器的 SWP 数据传输指令 交换指令 MLA 乘加运算指令 TEQ 相等测试指令 MOV 数据传送指令 TST 位测试指令 关于指令集的具体使用方法可参照有关 ARM 编程的相关书籍。 4. 实验步骤 步 骤 1:建 立 工 程 启动 ADS1.2 使用 ARM Executable Image 工程模板建立一个 Instruetion1。关于 ADS 工 具的使用方法可参照前面的实验。 步 骤 2: 编 写 源 代 码 建立汇编源文件 TEST1.S,编写实验程序,然后添加到工程中。 COUNT EQU 0x30001010 ;定义一个变量,地址在 0x30001010 AREA Example1,CODE,READONLY ;声明代码段 Example1 ENTRY ;标识程序入口 CODE32 START LDR MOV STR LOOP R1,=COUNT R0,#0 R0,[R1] LDR R1,=COUNT LDR R0,[R1] ADD R0,R0,#1 CMP R0,#10 MOVHS R0,#0 STR R0,[R1] B ;声明 31 位 ARM 指令 ;R1<=COUNT ;R0<=0 ;[R1]<=R0,即设置 COUNT 为 0 ;R0<=[R1] ;R0<=R0+1 ;R0 与 10 比较,影响条件码标志 ;若 R0>=10,则此指令执行 R0<=0 ;[R1]<=R0,即保存 COUNT LOOP 步 骤 3:设置编译选项 设置工程连接地址 RO Base 为 0X30000000,RW Base 为 0X30001000。设置调试入口 地址 Image entry point 为 0X30000000。见图 1、图 2。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 35 页 共 188 页 上海双实科技有限公司 图 1 设置对话框 1 图 2 设置对话框 2 其他编译选项的设置情况可参考实验 1。 步 骤 4:编译、调试 编译连接工程,选择 ProjectÆDebug,启动 AXD 进行软件仿真调试。如图 3。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 36 页 共 188 页 上海双实科技有限公司 图 3 设置软件仿真调试 步 骤 5:查看寄存器,内存 打开寄存器窗口(Processor Registers) ,选择 Current 项监视 R0 和 R1 的值。如图 4。 本实验代码使用 LDR 指令读取 0x30001010 地址上的数据,将数据加 1。若结果小于 10, 则使用 STR 指令把结果写回原地址;若结果大于等于 10,则把 0 写回原地址。 可以单步运行程序,可以设置/取消断点,或则全速运行程序,停止程序运行,调试时 观察寄存器和 0x30001010 地址上的值。打开存储器观察窗口(Memory)设置观察地址为 0x30001010,显示方式 Size 为 32bit,监视 0x30001010 地址上的值。运行结果如图 5。 图 4 查看寄存器 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 37 页 共 188 页 上海双实科技有限公司 图 5 查看内存 5. 实验思考 5.1 若使用 LDRB/STRB 代替程序中的所有加载/存储指令(LDR/STR),程序会得到正 确的执行吗? 5.2 LDR 伪指令与 LDR 加载指令的功能和应用有何区别,举例说明?(提示:LDR 伪 指令的形式为“LDR Rn,=expr”) 5.3 在 AXD 调试时如何复位程序?(提示:选择 FileÆReload Current Image 重新加载 映像文件。) 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 38 页 共 188 页 上海双实科技有限公司 实验 6 Thumb 汇编指令编程 1. 实验目的 z 掌握 Thumb 汇编指令编程方法 z 熟悉 Thumb 汇编指令集 2. 实验设备 z 硬件:PC 机 z 软件:ADS1.2 开发工具 3. 实验原理 „ ARM 微处理器的指令结构 ARM 微处理器的在较新的体系结构中支持两种指令集:ARM 指令集和 Thumb 指令集。其 中,ARM 指令为 32 位的长度,Thumb 指令为 16 位长度。Thumb 指令集为 ARM 指令集的功能 子集,但与等价的 ARM 代码相比较,可节省 30%~40%以上的存储空间,同时具备 32 位代 码的所有优点。 „ 程序分析 ARM 微控制器复位后处于 ARM 状态,此时只能执行 ARM 指令,所以需要使用 BX 指 令切换到 Thumb 状态,才能开始执行 Thumb 指令。 程序使用 R0 保存结果,所以一开始就要初始化为 0,循环执行 R0=R0+R1,R1 为循环 计数器,从 1 开始记数,每次循环 R1 加 1;当循环计数器 R1 的值到达 N 时,运算结束。 4. 实验步骤 步 骤 1:建 立 工 程 启动 ADS1.2 使用 ARM Executable Image 工程模板建立一个 Instruetion3。关于 ADS 工 具的使用方法可参照前面的实验。 步 骤 2: 编 写 源 代 码 建立汇编源文件 TEST3.S,编写实验程序,然后添加到工程中。 ; ;功能:计算 1+2+3.......+N ;说明:N>=0,当 N=0 时结果为 0,当 N=1 时结果为 1 N EQU 100 ;定义 N 的值 100 AREA Example3,CODE,READONLY ;声明代码段 Example3 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 39 页 共 188 页 上海双实科技有限公司 ENTRY ;标识程序入口 CODE32 ;声明 32 位 ARM 指令 ARM_CODE LDR SP,=0x30003F00 ;设置堆栈指针 ADR R0,THUMB_CODE+1 ; BX ;跳转并切换处理器状态 R0 LTORG ;声明文字池 CODE16 ;声明 16 位 THUMB 指令 THUMB_CODE LDR R0,=N ;设置子程序 SUM_N 的入口参数 BL SUM_N ;调用子程序 SUM_N B THUMB_CODE ; ;SUM_N ;功能:计算 1+2+3.......+N ;入口参数:R0 N 的值 ;出口参数:R0 运行结果 ;占用资源:R0 ;说明:当 N=0 时结果为 0,当 N=1 时结果为 1 ;若运算溢出,结果为 0 SUM_N PUSH {R1-R7,LR} ;寄存器入栈保护 MOVS R2,R0 ;将 N 的值复制到 R2,并影响条件码标 BEQ SUM_END ;若 N=0,则返回 CMP R2,#1 BEQ SUM_END 志 ;若 N=1,则返回 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 40 页 共 188 页 上海双实科技有限公司 SUN_L1 SUM_ERR MOV R1,#1 ;初始化计数器 R1=1 MOV R0,#0 ;初始化结果寄存器 R0=0 ADD R0,R1 ;R0=R0+R1 BCS SUM_END ;结果溢出,跳转到 SUM_ERR CMP R1,R2 ;将计数器的值与 N 比较 BHS SUM_END ;若计数器的值>=N,则运算结束 ADD R1,#1 ; B SUN_L1 MOV R0,#0 SUM_END POP {R1-R7,PC} ;寄存器出栈,返回 END 步 骤 3:设置编译选项 设置工程连接地址 RO Base 为 0X30000000,RW Base 为 0X30001000。设置调试入口 地址 Image entry point 为 0X30000000。见图 1、图 2。 图 1 设置对话框 1 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 41 页 共 188 页 上海双实科技有限公司 图 2 设置对话框 2 其他编译选项的设置情况可参考实验 1。 步 骤 4:编译、调试 编译连接工程,选择 ProjectÆDebug,启动 AXD 进行软件仿真调试。如图 3。 图 3 设置软件仿真调试 步 骤 5:查看寄存器和内存 打开寄存器窗口(Processor Registers) ,选择 Current 项监视各寄存器的值。 单步运行程序,注意执行“BX R0”指令前后 CPSR 寄存器的 T 位。说明:在寄存器窗 口的 CPSR 寄存器,大写字母的位表示该位为 1,小写字母的位表示该位为 0(比如:“T” 表示 T 位为 1,“t”表示 T 位为 0。)实验结果见图 4。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 42 页 共 188 页 上海双实科技有限公司 图 4 实验结果 5. 实验思考 5.1 在 THUMB 指令中只有哪条指令具有条件执行功能? 5.2 THUMB 指令“ADD Rd,Rm”是否会更新条件码标志? 5.3 THUMB 指令“MOV R8,0xFF000000”是否正确?如果不正确应如何更改? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 43 页 共 188 页 上海双实科技有限公司 实验 7 C 语言调用汇编语言编程 1. 实验目的 z 掌握 C 程序中调用汇编语言的方法 z 掌握汇编语言中调用子函数的方法 2. 实验设备 z 硬件:PC 机 z 软件:ADS1.2 开发工具 3. 实验原理 在 ARM C 语言编程时,可以使用 ARM 的内嵌汇编器实现 C 语言和汇编语言的混合编程。 内嵌的汇编器在功能和使用方法上主要有以下特点: 1、使用内嵌的汇编器,不能通过寄存器 PC 返回当前指令的地址。 2、内嵌的汇编器不支持伪指令 LDR Rn,=expression,这条伪指令可以用指令 MOV Rn, expression 来代替。 3、不支持标号表达式。 4、不支持 ADR、ADRL 伪指令。 5、十六进制数前要使用前缀 0x,不能使用&。 6、编译器可能使用寄存器 R0 到 R3、ip 及 lr 存放中间结果,因此在指令中使用这些寄 存器时要非常小心。 7、CPSR 寄存器中的 NZCV 条件标志位可能会被编译器破坏,因此在指令中使用这些 标志位时要非常小心。 8、指令中使用的 C 变量不要与任何物理寄存器同名,否则会造成混乱。 9、LDM 和 STM 指令的寄存器列表中只能使用物理的寄存器,不能使用 C 表达式。 10、指令不能写寄存器 PC。 11、用户不能维护数据栈。通常编译器根据需要自动保护和恢复工作寄存器的值,用户 不需要去保护和恢复这些工作寄存器的值。 12、用户可以改变处理器的模式,但是编译器并不了解处理器模式的改变。这样,如 果 用户改变了处理器的模式,将不能使用原来的 C/C++表达式,从新恢复到原来处 理 器模式后,才能再使用这些 C/C++表达式。 在 ARM C 语言程序中使用关键词__asm 来标识一段汇编指令程序。本实验在 C 语言中 加入一段汇编代码,使用指令 BL 调用子程序。 4. 实验步骤 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 44 页 共 188 页 上海双实科技有限公司 步 骤 1:建 立 工 程 启动 ADS1.2 使用 ARM Executable Image 工程模板建立一个 Instruetion4。关于 ADS 工 具的使用方法可参照前面的实验。 步 骤 2: 编 写 源 代 码 建立汇编源文件 TEST4.C,编写实验程序,然后添加到工程中。 #include void my_strcpy(char *src, const char *dst) { int ch; __asm { loop: LDRB ch, [src], #1 STRB ch, [dst], #1 CMP ch, #0 BNE loop } } int main(void) { const char *a = "Hello World"; char b[20]; __asm { MOV R0, a MOV R1, b BL my_strcpy,{R0, R1} } printf("Original string: %s\n",a); printf("Copied string: %s\n",b); return 0; } 步 骤 3:设置编译选项 设置工程连接地址 RO Base 为 0X30000000,RW Base 为 0X30001000。设置调试入口 地址 Image entry point 为 0X30000000。见图 1、图 2。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 45 页 共 188 页 上海双实科技有限公司 图 1 设置对话框 1 图 2 设置对话框 2 其他编译选项的设置情况可参考实验 1。 步 骤 4:编译、调试 编译连接工程,选择 ProjectÆDebug,启动 AXD 进行软件仿真调试。如图 3。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 46 页 共 188 页 上海双实科技有限公司 图 3 设置软件仿真调试 步 骤 5:查看寄存器,内存 打开寄存器窗口(Processor Registers) ,选择 Current 项监视各寄存器的值。 单步运行程序,注意执行“BL my_strcpy,{R0, R1}”指令时程序发生了子程序调用。 通过监视各个寄存器的值,观察在发生子程序调用时,寄存器值的变化情况,注意当前 PC 值将会保存到 R14 寄存器中。 程序运行结果可参照图 4。 图 4 实验结果 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 47 页 共 188 页 上海双实科技有限公司 5. 实验思考 5.1 如何利用内嵌汇编程序实现使能和禁止中断? 5.2 内嵌汇编程序中能用物理寄存器去引用一个 C 变量吗? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 48 页 共 188 页 上海双实科技有限公司 实验 8 汇编语言调用 C 语言编程 1. 实验目的 z 学习在汇编语言中如何调用 C 全局变量的方法 z 学习在汇编语言中如何调用 C 程序的方法 2. 实验设备 z 硬件:PC 机 z 软件:ADS1.2 开发工具 3. 实验原理 在 C 程序中声明的全局变量可以被汇编程序通过地址间接访问,具体访问方法如下: 1、使用 IMPORT 伪操作声明该全局变量。 2、使用 LDR 指令读取该全局变量的内存地址,通常该变量的内存地址存放在程序的数 据缓冲池中。 3、根据该数据的类型,使用相应的 LDR 指令读取该全局变量的值,使用相应的 STR 指令修改该全局变量的值。 本实验在汇编程序中使用 IMPORT 伪操作声明将要调用的 C 程序。例子中有 5 个参数, 分别使用寄存器 R0 存放第 1 个参数,R1 存放第 2 个参数,R2 存放第 3 个参数,R3 存放第 4 个参数,第 5 个参数利用数据栈传送。 4. 实验步骤 步 骤 1:建 立 工 程 启动 ADS1.2 使用 ARM Executable Image 工程模板建立一个 Instruetion5。关于 ADS 工 具的使用方法可参照前面的实验。 步 骤 2: 编 写 源 代 码 建立汇编源文件 TEST5_1.C、TEST5.S,编写实验程序,然后添加到工程中。 extern int g(int a , int b , int c, int d, int e) { return a+b+c+d+e; } unsigned long globl; int main(void) { globl = 0; 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 49 页 共 188 页 上海双实科技有限公司 f(4); printf("globl= %d", globl); return 0; } ;汇编程序调用 C 程序 g()计算 5 个整数 i、2*i、3*i、4*i、5*i EXPORT f AREA f, CODE, READONLY IMPORT g IMPORT globl STR lr, [sp, #-4]! ADD r1, r0, r0 ADD r2, r1,r0 ADD r3, r1,r2 STR r3, [sp, #-4]! ADD r3, r1, r1 BL g LDR r1, =globl STR r0, [r1] ADD sp, sp, #4 LDR pc, [sp],#4 END 步 骤 3:设置编译选项 设置工程连接地址 RO Base 为 0X30000000,RW Base 为 0X30001000。设置调试入口 地址 Image entry point 为 0X30000000。见图 1、图 2。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 50 页 共 188 页 上海双实科技有限公司 图 1 设置对话框 1 图 2 设置对话框 2 其他编译选项的设置情况可参考实验 1。 步 骤 4:编译、调试 编译连接工程,选择 ProjectÆDebug,启动 AXD 进行软件仿真调试。如图 3。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 51 页 共 188 页 上海双实科技有限公司 图 3 设置软件仿真调试 步 骤 5:查看寄存器,内存 打开寄存器窗口(Processor Registers) ,选择 Current 项监视各寄存器的值。 单步运行程序。 通过监视各个寄存器的值,观察在发生子程序调用时,寄存器值的变化情况,注意当前 PC 值将会保存到 R14 寄存器中。 程序运行结果可参照图 4。 图 4 实验结果 5. 实验思考 5.1 如何利用 IMPORT\EXPORT? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 52 页 共 188 页 上海双实科技有限公司 5.2 如何利用 LDR\STR? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 53 页 共 188 页 上海双实科技有限公司 实验 9 中断处理程序设计 1. 实验目的 z 了解 ARM 处理器中断处理过程 z 掌握在 S3C2440A 平台下进行中断服务程序编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 S3C2440A 内置的中断控制器可以接收来自 60 个中断源的请求。中断控制器的角 色,就是响应来自 FIQ(快速中断请求)或 IRQ(普通中断请求)的中断,并请求内核 对 中断进行处理。当有多个中断同时发生时,中断控制器要决定首先处理哪一个中 断。 下面就来详细了解 S3C2440A 的中断控制器。 3.2 中断控制器 3.2.1 中断模式 ARM920T 有 2 种类型的中断模式:FIQ 和 IRQ。IRQ 和 FIQ 之间的区别是:对于 FIQ 必须尽快处理事情并离开这个模式;IRQ 可以被 FIQ 中断,但 IRQ 不能中断 FIQ 。为了 使 FIQ 更快,FIQ 模式具有更多的私有寄存器。 3.2.2 PSR 的 F 位和 I 位 PSR指ARM920T处理器的程序状态寄存器。如果PSR的F位被设置为1,处理器将不接受来 自中断控制器的FIQ;如果PSR的I位被设置为l,处理器将不接受来自中断控制器的IRQ。因 此,为了使能相应中断机制,PSR的F位或I位必须被清0,同时INTMSK(中断屏蔽寄存器)的相 应位也必须被清0。 3.2.3 Pending寄存器 S3C2440A有两个中断Pending寄存器:SRCPND和INTPND。寄存器中的位表示某一个中断 是否未被处理。当一个中断发生时,SRCPND中的对应位将置1,同时在硬件仲裁机制后,只 有一位INTPND被置为1。如果某位中断被屏蔽,SRCPND寄存器依然会置1,但INTPND不会改变。 当INTPND某一位被置1后,如果对应的PSR中的F位和I位被清零,则该中断将被处理。SRCPND 和INTPND寄存器是可读可写的,因此中断处理程序中必须将这两个寄存器中中断对应的位清 零。 3.2.4 INTMSK中断屏蔽寄存器 如果该寄存器的某一个位被置l,则与该位对应的中断响应被禁止。如果某个中断在 INTMSK寄存器的对应位为0,则这个中断发生时将会被正常响应。如果某个中断在INTMSK寄 存器中的对应位为1,但是又有这个中断发生,则它的pending位还是会置位,只是不会自动 转入中断服务程序。如果全局屏蔽位被置1,那么,当任一中断发生时,中断pending位还是 会置位,但是所有的中断都不会得到服务。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 54 页 共 188 页 上海双实科技有限公司 3.3 中断源 中断控制器支持60个中断源。有关中断源的详细信息如表1、表2。 Sources INT_ADC ADC EOC and Touch INT_RTC RTC alarm INT_SPI1 SPI1 INT_UART0 UART0 Interrupt INT_IIC Arbiter Descriptions IIC Group interrupt (INT_ADC_S/INT_TC) interrupt ARB5 ARB5 interrupt ARB5 (ERR, RXD, and TXD) ARB5 interrupt ARB4 INT_USBH USB Host interrupt ARB4 INT_USBD USB Device INT_NFCON Nand Flash Control INT_UART1 UART1 Interrupt INT_SPI0 SPI0 interrupt ARB4 INT_SDI SDI interrupt ARB 3 INT_DMA3 DMA channel 3 interrupt ARB3 INT_DMA2 DMA channel 2 interrupt ARB3 INT_DMA1 DMA channel 1 interrupt ARB3 INT_DMA0 DMA channel 0 interrupt ARB3 INT_LCD LCD interrupt (INT_FrSyn and INT_FiCnt) ARB3 INT_UART2 UART2 Interrupt INT_TIMER4 Timer4 interrupt ARB2 INT_TIMER3 Timer3 interrupt ARB2 INT_TIMER2 Timer2 interrupt ARB2 INT_TIMER1 Timer1 interrupt ARB 2 INT_TIMER0 Timer0 interrupt ARB2 interrupt ARB4 Interrupt ARB4 (ERR, RXD, and TXD) ARB4 (ERR, RXD, and TXD) ARB2 INT_WDT_AC97 Watch-Dog timer interrupt(INT_WDT, INT_AC97) ARB1 INT_TICK RTC Time tick nBATT_FLT Battery Fault INT_CAM Camera Interface (INT_CAM_C, INT_CAM_P) ARB1 EINT8_23 External interrupt 8 – 23 ARB1 EINT4_7 External interrupt 4 – 7 ARB1 EINT3 External interrupt 3 ARB0 EINT2 External interrupt 2 ARB0 EINT1 External interrupt 1 ARB0 EINT0 External interrupt 0 ARB0 interrupt ARB1 interrupt ARB1 表1 中断源信息 Sub Sources INT_AC97 Descriptions AC97 interrupt 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 Source INT_WDT_AC97 第 55 页 共 188 页 上海双实科技有限公司 INT_WDT Watchdog interrupt INT_WDT_AC97 INT_CAM_P P-port capture interrupt In camera INT_CAM_C C-port capture interrupt in camera INT_ADC_S ADC interface interface interrupt INT_CAM INT_CAM INT_ADC INT_TC Touch screen interrupt (pen up/down) INT_ERR2 UART2 error interrupt INT_TXD2 UART2 transmit interrupt INT_UART2 INT_RXD2 UART2 receive interrupt INT_UART2 INT_ERR1 UART1 error INT_TXD1 UART1 transmit interrupt INT_UART1 INT_RXD1 UART1 receive interrupt INT_UART1 INT_ERR0 UART0 error INT_TXD0 UART0 transmit interrupt INT_UART0 INT_RXD0 UART0 receive interrupt INT_UART0 interrupt interrupt INT_ADC INT_UART2 INT_UART1 INT_UART0 表2 子中断源信息 3.4 中断优先级产生模块 S3C2440A还提供了另一种通过硬件决定中断优先级的方式——矢量中断模式。在多个中 断源同时请求中断时,硬件优先级逻辑可以决定哪一个中断应该得到响应;然后,这个硬件 逻辑产生一个跳转指令跳到矢量表中对应的中断矢量地址处,在这个地址上事先已经放置了 跳转到与该中断相应的中断服务程序的跳转指令。与前一种软件方式相比,这种方式将大大 减少中断延迟。 中断优先级产生模块如图1所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 56 页 共 188 页 上海双实科技有限公司 图1 中断优先级产生模块 3.5 控制中断的寄存器 在实际编程中,通过对这些寄存器进行读取和设置来实现对中断的响应和控制。这些寄 存器包括:中断源请求寄存器(SRCPND)、中断请求寄存器(INTPND)、中断模式寄存器 (INTMOD)、中断屏蔽寄存器(INTMSK)、优先级寄存器(PRIORITY)。具体寄存器的位定 义和地址分配情况可参照S3C2440A处理器的产品手册。 在本实验中将对这些寄存器进行设置,具体设置情况见实验步骤部分。 4. 实验步骤 由 于 在 SinoSys- EA2440a 中 ,已 经 将 EINT0、EINT2、EINT19、EINT11 作 为 外 部 中 断 源 和 开 发 板 上 位 号 为 SW1、 SW2、 SW3、 SW4 的 这 四 个 小 按 键 相 连 , 具 体 的 硬 件 连 接 原 理 图 如 图 2,也 可 参 照 随 机 光 盘 中 的 原 理 图 文 件 夹 。本 实 验 的 目 的 就 是 当 程序在运行之后,按下开发板上这四个按钮,将触发处理器的四个外部中断,处 理器转而去执行相应的中断服务程序,在中断服务程序中,向串口打印中断信息, 并输出到开发主机的串口终端工具上。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 57 页 共 188 页 上海双实科技有限公司 图 2 外部中断硬件原理图 步 骤 1: 设 置 IO 口 由 于 在 S3C2440A 处 理 器 中 , IO 口 都 是 复 用 的 , 由 于 使 用 了 外 部 中 断 EINT0、 EINT2、 EINT19、 EINT11, 因 此 必 须 把 对 应 的 IO 口 设 置 成 外 部 中 断 方 式 。 利用 ADS1.2 工具(ADS 工具的使用请参照前面的实验)打开随机关盘中本实验的工程 文件 ISR_test.mcp,打开 keyscan.c 文件。 在 KeyScan_Test 子函数中对 GPG 和 GPF 中的四个 IO 口进行设置。 rGPGCON = rGPGCON & (~((3<<22)|(3<<6))) | ((2<<22)|(2<<6)) ;//GPG11,3 set EINT rGPFCON = rGPFCON & (~((3<<4)|(3<<0))) | ((2<<4)|(2<<0)) ; //GPF2,0 set EINT 步骤 2:中断寄存器设置 将 IO 口设置完以后,就要对中断寄存器进行设置了。 rEXTINT0 &= ~(7|(7<<8)); rEXTINT0 |= (0|(0<<8)); //set eint0,2 falling edge int rEXTINT1 &= ~(7<<12); rEXTINT1 |= (0<<12); //set eint11 falling edge int rEXTINT2 &= ~(0xf<<12); rEXTINT2 |= (0<<12); //set eint19 falling edge int rEINTPEND |= (1<<11)|(1<<19); //clear eint 11,19 rEINTMASK &= ~((1<<11)|(1<<19)); //enable eint11,19 ClearPending(BIT_EINT0|BIT_EINT2|BIT_EINT8_23); 具体的位信息可参照 S3C2440A 产品手册。 步骤 3:中断服务程序编写 中断寄存器设置完成之后,开始中断服务程序的编写。 首先设置中断服务程序的入口地址,通过 ARM 的 C 语言编译器,当对应的中断发生时, 处理器将自动的跳转到我们所指定的中断服务程序地址处执行。 pISR_EINT0 = pISR_EINT2 = pISR_EINT8_23 = (U32)Key_ISR; 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 58 页 共 188 页 上海双实科技有限公司 然后打开中断。 EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT8_23); 然后在 KeyScan_Test 子函数中程序进入循环等待,直到从终端 PC 上键入 Esc 键退出。 while( Uart_GetKey() != ESC_KEY ) ; 中断服务程序 Key_ISR 源码如下: static void __irq Key_ISR(void) { U8 key; if(rINTPND==BIT_EINT8_23) { ClearPending(BIT_EINT8_23); if(rEINTPEND&(1<<11)) { rEINTPEND |= 1<< 11; } if(rEINTPEND&(1<<19)) { rEINTPEND |= 1<< 19; } } if(rINTPND==BIT_EINT0) { ClearPending(BIT_EINT0); } if(rINTPND==BIT_EINT2) { ClearPending(BIT_EINT2); } key=Key_Scan(); if( key != 0xff ) Uart_Printf( "Interrupt occur... K%d is pressed!\n", key ) ; rGPBCON &=~((3<<12)|(3<<14)); rGPBCON |=((1<<12)|(1<<14)); rGPBUP &=~(3<<6); rGPBDAT &=~(3<<6); } 其中 key=Key_Scan();语句调用子函数 Key_Scan()来判断是哪个键被按下。 U8 Key_Scan( void ) { Delay( 80 ) ; rGPBDAT &=~(1<<6); rGPBDAT |=1<<7; if( (rGPFDAT&(1<< 0)) == 0 ) return 1 ; else if( (rGPFDAT&(1<< 2)) == 0 ) return 3 ; else if( (rGPGDAT&(1<< 3)) == 0 ) return 5 ; else if( (rGPGDAT&(1<<11)) == 0 ) return 7 ; 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 59 页 共 188 页 上海双实科技有限公司 rGPBDAT &=~(1<<7); rGPBDAT |=1<<6; if( (rGPFDAT&(1<< 0)) == 0 ) return 2 ; else if( (rGPFDAT&(1<< 2)) == 0 ) return 4 ; else if( (rGPGDAT&(1<< 3)) == 0 ) return 6 ; else if( (rGPGDAT&(1<<11)) == 0 ) return 8 ; else return 0xff ; } 步骤 4:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\ISR_test\ ISR_test_Data\DebugRel”下,可以看到 ISR_test.bin 可执行文件。 步骤 5:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 6:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 3 所示。 图 3 中断编程实验的运行结果 当某一按键被按下后,将触发中断服务程序,向串口终端写入中断信息。 5. 实验思考 5.1 在中断服务程序编写过程中,应该注意哪些问题? 5.2 读者应该注意到,每次按键触发中断时,中断发生的次数是不固定,为什么?如果 编写代码改变这种情况? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 60 页 共 188 页 上海双实科技有限公司 实验 10 定时器应用 1. 实验目的 z 了解 ARM 处理器定时器的处理机制 z 掌握在 S3C2440A 平台下进行定时器应用编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 S3C2440A 具有 5 个 16 位定时器,每个定时器可以按照中断模式或 DMA 模式工作。定时 器 0,1,2,3 具有 PWM 功能。定时器 4 是一个内部定时器,不具有对外输出口线。定时器 0 还具有死区发生器,通常用于大电流设备。 定时器特性总结如下。 ● 5 个 16 位定时器可以工作在中断模式或 DMA 模式。 ● 包括 2 个 8 位预分频器、2 个 4 位分割器。 ● 输出波形的占空比可用编程控制(即进行脉宽调制)。 ● 具有自动重载模式或单次触发模式。 ● 具有死区发生器。 图 1 是定时器的内部结构图。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 61 页 共 188 页 上海双实科技有限公司 图 1 定时器内部结构图 3.2 定时器操作 如图 1 所示,定时器的时钟源由主时钟(PCLK)通过预分频器和时钟分割器得到。 3.2.1 预分频器和时钟除法器 定时器 0 和 l、定时器 2 和 3 及定时器 4 分别分享一个 8 位的预分频器。定时器 0 和 l、定时器 2 和 3 及定时器 4 还分别分享一个具有 4 个不同分频信号输出(1/2,l/4, l/8,1/16)的时钟除法器。每个定时器从时钟除法器的输出得到各自的时钟源,每个 时钟除法器则从与之对应的 8 位预分频器得到时钟源。 8 位预分频器是可编程的,它的频率通过 PCLK 除以保存在 TCFG0 中除数的结果设定。 某个定时器取时钟除法器的哪一个分频信号作为时钟源是由 TCFGl 寄存器中 MUXn 的 4 位决定的。 8 位预分频器(prescaler)和 4 位时钟除法器组合起来可以产生如表 1 所示频率的定 时器时钟源输出。 4-bit divider Minimum resolution Maximum resolution Maximum interval settings (prescaler = 0) (prescaler = 255) (TCNTBn = 65535) 1/2 (PCLK = 50 MHz) 0.0400 us (25.0000 MHz) 10.2400 us (97.6562 KHz) 0.6710 sec 1/4 (PCLK = 50 MHz) 0.0800 us (12.5000 MHz) 20.4800 us (48.8281 KHz) 1.3421 sec 1/8 (PCLK = 50 MHz) 0.1600 us (6.2500 MHz) 40.9601 us (24.4140 KHz) 2.6843 sec 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 62 页 共 188 页 上海双实科技有限公司 1/16 (PCLK = 50 MHz) 0.3200 us (3.1250 MHz) 81.9188 us (12.2070 KHz) 5.3686 sec 表1 定时器时钟源的取值范围 3.2.2 基本定时器操作 每个定时器具有一个倒计时器,实际上就是—个通过定时器时钟源驱动的16位倒计时寄 存器TCNTn。当倒计时值减到0,定时器中断请求就产生了,这个中断通知CPU定时器定时已 经完成。定时器有两种操作模式:单次触发模式和自动重载模式。 在单次触发模式下,定时器完成一次倒计时并产生中断请求后,定时器便停止了。如果 要启动下一次计时,需要重新向TCNTBn中写入计时值,并重新启动定时器开始工作。 在自动重载模式下,当定时器倒计时到达0,寄存器TCNTBn的值就会被自动载入到倒计 时寄存器TCNTn中继续开始下一次计时。但是,如果定时器停止,例如,在运行中清除了寄 存器TCONn中的定时器使能位,那么TCNTBn的值就不会被重新载入到倒计时器中,定时器便 停止下来。 3.2.3 双缓冲器和自动重载 双缓冲器是指定时器计数缓冲区寄存器TCNTBn和定时器比较缓冲区寄存器TCMPBn,它们 都分别具有一个初始值,用来载入到定时器计数寄存器TCNTn及定时器比较寄存器TCMPn中与 倒计时值相比较。TCNTBn和TCMPBn这两个缓冲区的应用使得用户能够在定时器运行期间修改 运行参数,而不用担心影响定时器当前的工作状态,即能够使定时器在频率和占空比被更改 时,仍然产生一个稳定的输出。 每个定时器(除了定时器4)都具有TCNTBn,TCNTn,TCMPBn和TCMPn。当TCON(定时器控制 寄存器)中定时器n的自动重载模式开启,则定时器工作在自动重载模式下,TCNTBn和TCMPBn 的值将在定时器的倒计时值达到0时分别载入到TCNTn和TCMPn。 定时器计数值可以直接写入TCNTBn,但不能直接写入TCNTn;而当前定时器的计数值, 即TCNTn的值,可以通过TCNTOn(定时器计数观察寄存器)来读取。如果读取TCNTBn,那么读 出的数值不一定是当前定时器的计数值,而是下一个定时周期的计数值。 3.2.4 设置手动更新位和反转器开关位初始化定时器 当倒计时器倒数到0,定时器的自动重载操作就会发生,但在第一次重载发生之前TCNTn 的初始值还未定义过。在这种情况下,要通过设置手动更新位的方法采向TCNTn载入TCNTBn 中的初始值。同样,如果定时器被强制停止,TCNTn中仍然保存着原来的计时值,而没有从 TCNTBn中重新载入。如果重新启动定时,则必须将TCNTn设置为新值,那么也要采用手动更 新的方式。 同时反转器开关状态的改变将直接导致定时器输出TOUTn的逻辑电平的改变,因此建议 在启动定时器之前,配置好反转器的开关位。 手动更新位和反转器开关位都位于定时器控制寄存器TCON中。因此,通过对TCON寄存器 写入相应的值来初始化和启动定时器。 一般启动定时器的步骤如下。 ① 将计数器初始值写入到TCNTBn和TCMPBn中。 ② 在TCON中,设置对应定时器的手动更新位。建议同时设置对应反转器的开关位。 ③ 在TCON中,设置对应定时器的启动位来启动定时器(同时,清除手动更新位)。 具体的设置操作及结果如下(以图2为例)。 ① 先设置TCON寄存器中的自动重载使能,然后设置TCNTBn为160(50+110)和TCMPBn为 110,接着设置TCON中的手动更新位和反转器位(ON/OFF)。手动更新的设置使得TCNTn和 TCMPn分别载入了TCNTBn和TCMPBn的值。最后,设置TCNTBn和TCMPBn为80(40+40)和40,作为 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 63 页 共 188 页 上海双实科技有限公司 下一个周期的重置值。 ② 设置TCON中的启动位,同时将手动更新位清0,反转器置OFF,自动重载使能。定时 器的倒计时被启动并开始工作。 ③ 当TCNTn具有与TCMPn相同的值,TOUTn的逻辑电平从低变高。 ④ 当TCNTn到达0,引发中断请求,同时TCNTBn的值载入到一个临时寄存器。在下一个 定时器节拍,TCNTn从临时寄存器重载人计数值。 ⑤ 在ISR(中断服务程序)中,TCNTBn和TCMPBn被设置为80(20+60)和60,用于下一个周 期。 ⑥ 当TCNTn具有与TCMPn相同的值,TOUTn的逻辑电平从低变高。 ⑦ 当TCNTn到达0,TCNTn自动重新载入TCNTBn的值。同时,引发中断请求。 ⑧ 在ISR中,设置TCON中自动重载禁止,同时禁止该定时器的中断请求,从而停止定时 器工作。 ⑨ 当TCNTn具有与TCMPn相同的值,TOUTn的逻辑电平从低变高。 ⑩ 当TCNTn倒数到0,由于自动重载被禁止了,因此TCNTn不再重载计数值,且定时器也 停止了。 ⑾ 没有中断请求被引发。 图2 定时器操作实例 3.2.5 PWM(脉宽调制) PWM脉冲频率由TCNTBn决定。PWM脉冲宽度值则由TCMPBn的值来决定,如图3所示。 图3 PWM的实例图 如果要得到一个较低的PWM脉宽输出值,就可以减少TCMPBn的值;反之,则增加TCMPBn 的值。如果输出反转器被使能,增加和减少的结果也将是反转的。 基于双缓冲器的特性,下一个PWM周期的TCMPBn值可以通过ISR或其他手段,在当前PWM 周期中的任何一点写入。 3.2.6 输出电平控制 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 64 页 共 188 页 上海双实科技有限公司 以下的办法用来保持TOUT为高或低(假设反转器为OFF): ①关闭自动重载位后TOUTn变为高电平,定时器在TCNTn倒数到0时停止了。推荐采用这 个模式。 ②通过将定时器的启动/停止位清0来停止定时器。如果TCNTn≤TCMPn,输出电平为高。 如果TCNTn>TCMPn,输出电平为低。 ③在TCMPBn中写入比TCNTBn大的值,这样就禁止TOUTn变高,因为TCMPBn不能与TCNTn 有相同的值。 ④TOUTn可以通过设置TCON中的反转器的ON/OFF位来反转。 3.2.7 死区发生器 死区发生器用于对大功率设备进行PWM控制。这一特性用于在开关设备的断开和另一个 开关设备的闭合之间插入一个时间缺口。这个时间缺口阻止两个开关设备处于同时闭合的状 态(即使是非常短的时间)。 TOUT0是一个PWM输出。nTOUT0是TOUT0的反转输出。如果死区被使能,TOUT0和nTOUT0 的输出波形将会是TOUT0_DZ和NTOUT0_DZ。在死区间隔中,TOUT0_DZ和NTOUT0_DZ肯定不会同 时闭合的。其输出波形如图4所示。死区长度值在定时器配置寄存器0(TCFG0)中设置。 图4 当死区使能时的输出波形图 3.3 定时器寄存器 3.3.1 定时器配置寄存器0(TCFG0) 该寄存器用于设置定时器的输入时钟频率。输入时钟频率的计算公式为: 定时器的输入时钟频率=PCLK/{预分频值}/{分割值} 其中,{预分频值}=1-255;{分割值}=2,4,8,16。 TCFG0的位定义参照S3C2440A的数据手册。 3.3.2 定时器配置寄存器1(TCFGl) 该寄存器用于设置定时器的工作模式及时钟源。其位定义参照S3C2440A的数据手册。 3.3.3 定时器控制寄存器(TCON) 该寄存器可进行定时器的自动重载、手动更新、启动/停止、输入反转及死区使能的设 置功能。其位定义参照S3C2440A的数据手册。 3.3.4 计数缓冲区寄存器\比较缓冲区寄存器和计数观察寄存器(TCNTBn,TCMPBn,TCNTOn) 这三个寄存器的作用在前面已经做过描述,具体的位定义信息可参照S3C2440A的数据手 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 65 页 共 188 页 上海双实科技有限公司 册。 4. 实验步骤 本 实 验 通 过 中 断 的 方 式 ,对 5 个 定 时 器 进 行 测 试 。将 5 个 时 钟 以 不 同 的 频 率 进 行定时倒数,触发中断后进入相应的中断服务程序,在中断服务程序中进行某个 变 量 的 累 加 , 当 Timer4 完 成 8 次 计 数 后 停 止 所 有 的 定 时 器 , 然 后 对 定 时 器 的 中 断 情况进行判断,具体步骤如下。 步 骤 1: 打 开 定 时 器 中 断 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 “\SourceCode\Interface\Timer_test”下的工程文件 Timer_test.mcp,打开 Timer.c 文 件。(注意:要把光盘中的资料复制到本地电脑上,否则会发生错误) 在 Test_TimerInt 子函数中首先打开定时器中断,此函数由 main 主函数所调用。 rINTMSK = ~(BIT_TIMER4 | BIT_TIMER3 | BIT_TIMER2 | BIT_TIMER1 | BIT_TIMER0); 步骤 2:设置定时器中断服务程序入口地址 同样还是在 Test_TimerInt 子函数中紧接着设置定时器中断服务程序的入口地址。 pISR_TIMER0 = (int)Timer0Done; pISR_TIMER1 = (int)Timer1Done; pISR_TIMER2 = (int)Timer2Done; pISR_TIMER3 = (int)Timer3Done; pISR_TIMER4 = (int)Timer4Done; 步骤 3:设置定时器寄存器并启动定时器 rTCFG0 = rTCFG0 & ~(0xffffff) | 0xff | 0xff<<8; //Dead zone=0,Prescaler1=255(0x0f),Prescaler0=255(0x0f) rTCFG1 =rTCFG1 & ~(0xffffff) | 0x001233; //All interrupt,Mux4=1/2,Mux3=1/4,Mux2=1/8,Mux1=1/16,Mux0=1/16 rTCNTB0 = 30000; rTCNTB1 = 30000; rTCNTB2 = 30000; rTCNTB3 = 30000; rTCNTB4 = 30000; rTCMPB0 = 15000; rTCMPB1 = 15000; rTCMPB2 = 15000; rTCMPB3 = 15000; rTCON = rTCON & ~(0xffffff) | 0x1<<1 | 0x1<<9 | 0x1<<13 | 0x1<<17 | 0x1<<21 ; //Manual update rTCON = rTCON & ~(0xffffff) | 0x1 | 0x1<<3 ; //Timer 0 Start, Auto-reload rTCON = rTCON | 0x1<<8 | 0x1<<11 ; //Timer 1 Start, Auto-reload rTCON = rTCON | 0x1<<12 | 0x1<<15 ; //Timer 2 Start, Auto-reload rTCON = rTCON | 0x1<<16 | 0x1<<19 ; //Timer 3 Start, Auto-reload rTCON = rTCON | 0x1<<20 | 0x1<<22 ; //Timer 4 Start, Auto-reload 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 66 页 共 188 页 上海双实科技有限公司 注意设置 5 个定时器不同的频率计数,这样 5 个定时器就将以不同的频率触发中断。 步骤 4:定时器中断服务子程序 /****** Timer Interrupt Request ******/ void __irq Timer0Done(void) { rSRCPND = BIT_TIMER0; //Clear pending bit rINTPND = BIT_TIMER0; // rINTPND; //Prevent an double interrupt pending variable0++; } void __irq Timer1Done(void) { rSRCPND = BIT_TIMER1; rINTPND = BIT_TIMER1; // rINTPND; variable1++; } void __irq Timer2Done(void) { rSRCPND = BIT_TIMER2; rINTPND = BIT_TIMER2; // rINTPND; variable2++; } void __irq Timer3Done(void) { rSRCPND = BIT_TIMER3; rINTPND = BIT_TIMER3; // rINTPND; variable3++; } //Clear pending bit //Clear pending bit //Clear pending bit void __irq Timer4Done(void) { rSRCPND = BIT_TIMER4; //Clear pending bit rINTPND = BIT_TIMER4; // rINTPND; variable4++; } 每个定时器中断服务程序中,将计数值加一。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 67 页 共 188 页 上海双实科技有限公司 步骤 5:判断定时器中断情况 当定时器完成 8 次计数后,即停止所有计数器计数,并检查定时器计数及中断情况。打 印出每个定时器中断发生的计数值。 while(1) { if(variable4 == 8) break; } rTCON = 0x0; //Stop Timers if(variable4==8 && variable3==4 && variable2==2 && variable1==1 && variable0==1) { Uart_Printf("Timer 0,1,2,3,4 Auto-reload Interrupt Test => OK!\n"); } else { Uart_Printf("Timer 0,1,2,3,4 Auto-reload Interrupt Test => Fail............\n"); } Uart_Printf("Timer0: %d (=1)\nTimer1: %d (=1)\nTimer2: %d (=2)\nTimer3: %d (=4)\nTimer4: %d (=8)\n",variable0,variable1,variable2,variable3,variable4); 步骤 6:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\Timer_test\ Timer_test_Data\DebugRel”下,可以看到 Timer_test.bin 可执行文件。 步骤 7:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 8:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 3 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 68 页 共 188 页 上海双实科技有限公司 图 5 定时器编程实验的运行结果 从运行结果中可以看出,当定时器 4 完成 8 次计数时,定时器 0 和 1 只完成一次计数, 定时器 2 完成 2 次计数,定时器 3 完成 4 次计数,这和每个定时器的时钟频率是一一对应的。 5. 实验思考 5.1 定时器的主要功能有哪些? 5.2 修改程序,使定时器工作于单次触发模式并完成本实验相同的功能。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 69 页 共 188 页 上海双实科技有限公司 实验 11 实时日历时钟(RTC)应用 1. 实验目的 z 了解 ARM 处理器实时日历时钟(RTC)的处理机制 z 掌握在 S3C2440A 平台下进行实时日历时钟(RTC)应用编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 实时日历时钟(RTC)单元作为 S3C2440A 内部一个独立的功能单元,能够像钟表和 日历一样保 存并自动计 算时间。它 还具有定时 报警和产生 节拍的功能 。RTC 单 元 仅 需要通过外接一个 32.768 kHz 的晶振来提供时钟源(如图 1 所示)。RTC 可以 通过 备用电池供 电,因此, 即使系统电 源关闭,也 可以继续工 作。RTC 的 寄存器保 存 了 一些表示时间的 8 位 BCD 码数据,包括:秒、分、时、日期、星期、月和年。 图 1 32kHz 晶振电路连接图 3.2 实时时钟特性 3.2.1 闰年产生器 这个模块可以根据当前是否是闰年决定每个月的最后日期是28,29,30还是3l。由 于8位的计数器只能表示2个BCD码,因此它不能判断00年究竟是不是闰年。例如它不能 够判断1900年和2000年的差别。为了解决这个问题,S3C2440A内的RTC模块中有一个固 定的逻辑,用来支持2000年为闰年。请注意虽然2000年是闰年,但1900年不是闰年。因 此,S3C2440A中年份等于00时是代表2000年,而不是1900年。 3.2.2 读/写寄存器 在读写程序中,通过设置RTCON寄存器的第0位来表示要“读”还是“写”RTC模块中的 寄存器。为了显示秒、分、小时、日期、星期、月和年,需要分别从BCDSEC,BCDMIN,BCDHOUR, BCDDAY,BCDDATE,BCDMON和BCDYEAR寄存器中读取数据。但是,由于是对多个寄存器的读取, 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 70 页 共 188 页 上海双实科技有限公司 因此很可能会产生1s的偏离。例如,如果用户读取寄存器BCDYEAR到BCDMIN,假设结果为1959 年、12月、31日、23点、59分。在用户读取BCDSEC寄存器时,如果结果是l-59,肯定没有问 题;但如果结果是0,那么很有可能年、月、日、时、分已经变成了1960年1月l日0时0分, 这就是上面所说的1s偏离。解决的方法是,当读取到的BCDSEC等于0时,用户应该再读取一 次BCDYEAR到BCDSEC的值。 3.2.3 备用电池 RTC逻辑模块可以通过一个备用电池供电。备用电池的阳极通过VDDRTC脚接至内部的RTC 模块,即使系统电源关闭,也能够提供电能保证RTC模块正常工作。在系统电源关闭时,CPU 和RTC逻辑模块之间的接口被锁住,使备用电池仅需驱动RTC的晶振电路和BCD计数器,从而 使功耗降到最低。SinoSys-EA2440a核心板上已经具备了RTC的备用电池。 3.2.4 报警功能 在掉电模式或正常工作模式下,RTC能够在指定的时间产生一个报警信号。在正常工作 模式下,报警中断(ALMINT)被激活。在掉电模式下,电源管理苏醒信号也与ALMINT一样处于 激活状态。RTC的报警寄存器RTCALM可以设置报警的使能或禁止以及报警时间。 3.2.5 节拍中断 RTC节拍时间用于中断请求。TICNT寄存器具有一个中断使能位,同时其中的计数值用于 中断。当计数值不断减l最后到达0时,节拍时间中断就会触发。中断间隔时间的计算公式为 中断间隔时间=(n+1)/128 其中,n为节拍时间计数值(1~127)。 这个RTC节拍时间中断可以用来作RTOS(实时操作系统)内核的时间节拍。如果节拍从RTC 产生,则RTOS内部与时间相关的功能将一直与实时时钟同步。 3.3 定时时钟寄存器 3.3.1 实时时钟控制寄存器(RTCCON) RTCCON寄存器包括4个有效位,其中RTCEN用来控制对BCD寄存器的读/写使能,CLKSEL, CNTSEL和CLKRST用来测试。 RTCEN位可以控制CPU和RTC之间的接口,在RTC控制程序中,当需要读写RTC寄存器时, 将它置l。读写完毕后,将它清0,从而阻止对RTC寄存器的误操作。该寄存器的位定义如表1 所示。 Description Initial State RTCCON Bit CLKRST [3] RTC clock count reset. 0 = No reset, 1 = Reset 0 CNTSEL [2] BCD count select. 0 = Merge BCD counters 1 = Reserved (Separate BCD counters) 0 CLKSEL [1] BCD clock select. 15 0=XTAL 1/2 divided clock 1 = Reserved (XTAL clock only for test) 0 RTCEN [0] RTC control enable. 0 = Disable 1 = Enable 0 表1 实时时钟控制寄存器位定义 3.3.2 实时时钟报警控制寄存器(RTCALM) 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 71 页 共 188 页 上海双实科技有限公司 RTCALM寄存器决定是否使能报警功能,并可以设定报警时间。其位定义如表2所示。 3.3.3 报警日期时间寄存器ALMSEC-ALMYEAR ALMSEC~ALMYEAR等6个寄存器,以BCD码的方式分别存放秒、分、时、日、月、年的日 期数值。它们的位定义这里就不赘述了。 3.3.4 BCD日期时间寄存器BCDSEC~BCDYEAR BCDSEC~BCDYEAR等7个寄存器,以BCD码的方式分别存放秒、分、时、星期、日、月、 年的日期数值。它们的位定义这里省略了。 RTCALM Bit Reserved [7] ALMEN [6] YEAREN [5] MONREN [4] DATEEN [3] HOUREN [2] MINEN [1] SECEN [0] Initial State Description 0 Alarm global 0 = Disable, 1 = Enable 0 0 Year alarm enable. 0 = Disable, 1 = Enable 0 Month alarm enable. 0 = Disable, 1 = Enable 0 Date alarm enable. 0 = Disable, 1 = Enable 0 Hour alarm enable. 0 = Disable, 1 = Enable 0 Minute alarm enable. 0 = Disable, 1 = Enable 0 Second alarm enable. 0 = Disable, 1 = Enable 表2 RTCALM寄存器位定义 3.3.5 时间节拍计数器寄存器 该寄存器可使能/禁止节拍时间中断,并可以设置节拍时间。其位定义如表3所示。 TICNT Bit Description Initial State TICK INT ENABLE [7] Tick time interrupt enable. 0 = Disable 1 = Enable 0 TICK TIME COUNT [6:0] Tick time count value (1~127). This counter value decreases internally, and users cannot read this counter value in working. 000000 表3 时间节拍计数器寄存器 4. 实验步骤 本 实 验 实 现 了 RTC 时 钟 的 实 时 时 间 设 置 、显 示 、复 位 ,以 及 RTC 时 钟 的 报 警 及 时间节拍计数器的功能,具体步骤如下。 步 骤 1: 实 现 RTC 基 本 操 作 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 72 页 共 188 页 上海双实科技有限公司 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 “\SourceCode\Interface\RTC_test”的工程文件 RTC_test.mcp,打开 RTC.c 文件。 该文件实现了关于 RTC 的所有操作。 步骤 2:RTC 时钟的初始化及复位 Rtc_Init 函数实现了实时时钟的初始化功能。程序中将事先定义好的时间常量赋给 BCD 日期时间寄存器。 rRTCCON = rRTCCON & ~(0xf) | 0x1; //No reset, Merge BCD counters, 1/32768, RTC Control enable rBCDYEAR = rBCDYEAR & ~(0xff) | TESTYEAR; rBCDMON = rBCDMON & ~(0x1f) | TESTMONTH; rBCDDATE = rBCDDATE & ~(0x3f) | TESTDATE; rBCDDAY = rBCDDAY & ~(0x7) | TESTDAY; //SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7 rBCDHOUR = rBCDHOUR & ~(0x3f) | TESTHOUR; rBCDMIN = rBCDMIN & ~(0x7f) | TESTMIN; rBCDSEC = rBCDSEC & ~(0x7f) | TESTSEC; rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable 步骤 3:RTC 时钟的时间设置 首先程序接收从串口终端传输过来的格式化数据,然后经过格式转换变成能够赋给寄存 器的值,具体程序如下: int syear,smonth,sdate,shour,smin,ssec; int sday; Uart_Printf("[ RTC Time Setting ]\n"); Rtc_Init(); //RTC Initialize Uart_Printf("RTC Time Initialized ...\n"); Uart_Printf("Year (Two digit the latest)[0~99] : "); syear = Uart_GetIntNum(); Uart_Printf("Month [1~12] : "); smonth = Uart_GetIntNum(); Uart_Printf("Date [1~31] : "); sdate = Uart_GetIntNum(); Uart_Printf("\n1:Sunday 2:Monday 3:Thesday 4:Wednesday 5:Thursday 6:Friday 7:Saturday\n"); Uart_Printf("Day of the week : "); sday = Uart_GetIntNum(); Uart_Printf("Hour [0~23] : "); shour = Uart_GetIntNum(); Uart_Printf("Minute [0~59] : "); smin = Uart_GetIntNum(); Uart_Printf("Second [0~59] : "); ssec = Uart_GetIntNum(); rRTCCON = rRTCCON & ~(0xf) | 0x1; 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 73 页 共 188 页 上海双实科技有限公司 //No reset, Merge BCD counters, 1/32768, RTC Control enable rBCDYEAR = ((syear/10)<<4)+(syear%10); rBCDMON = ((smonth/10)<<4)+(smonth%10); rBCDDAY = sday; //SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7 rBCDDATE = ((sdate/10)<<4)+(sdate%10); rBCDHOUR = ((shour/10)<<4)+(shour%10); rBCDMIN = ((smin/10)<<4)+(smin%10); rBCDSEC = ((ssec/10)<<4)+(ssec%10); Uart_Printf("%2d : %2d : %2d %10s, %2d/%2d/%4d\n",shour,smin,ssec,day[sday],smonth,sdate,syear); Uart_Printf("%2x : %2x : %2x %10s, %2x/%2x/%4x\n" ,rBCDHOUR,rBCDMIN,rBCDSEC,day[rBCDDAY],rBCDMON,rBCDDATE,rBCDYEAR); rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable 步骤 4:RTC 时钟的时间显示 rRTCCON = 0x01; //No reset, Merge BCD counters, 1/32768, RTC Control enable Uart_Printf("Press any key to exit.\n\n"); while(!Uart_GetKey()) { while(1) { if(rBCDYEAR == 0x99) year = 0x1999; else year = 0x2000 + rBCDYEAR; month = rBCDMON; weekday = rBCDDAY; date = rBCDDATE; hour = rBCDHOUR; min = rBCDMIN; sec = rBCDSEC; if(sec!=tmp) { tmp = sec; break; } } Uart_Printf("%2x : %2x : %2x %10s, %2x/%2x/%4x\n",hour,min,sec,day[weekday],month,date,year); } rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable(for power 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 74 页 共 188 页 上海双实科技有限公司 consumption) 步骤 5:RTC 时钟报警 在设置 RTC 时钟报警时首先初始化时钟,然后向报警日期时间寄存器中写入初始化时钟 时间 9 秒以后的值,然后设置时钟报警中断的入口地址并打开中断,具体程序如下: Uart_Printf("[ RTC Alarm Test for S3C2440 ]\n"); Rtc_Init(); rRTCCON = 0x01; //No reset, Merge BCD counters, 1/32768, RTC Control enable rALMYEAR = TESTYEAR2 ; rALMMON = TESTMONTH2; rALMDATE = TESTDATE2 ; rALMHOUR = TESTHOUR2 ; rALMMIN = TESTMIN2 ; rALMSEC = TESTSEC2 + 9; Uart_Printf("After 9 sec, alarm interrupt will occur.. \n"); isRtcInt = 0; pISR_RTC = (unsigned int)Rtc_Int; rRTCALM= 0x7f; //Global,Year,Month,Day,Hour,Minute,Second alarm enable rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable rINTMSK = ~(BIT_RTC); while(isRtcInt==0); rINTMSK = BIT_ALLMSK; 报警中断的中断服务程序如下: rSRCPND = BIT_RTC; rINTPND = BIT_RTC; Uart_Printf("RTC Alarm Interrupt O.K.\n"); isRtcInt = 1; 步骤 6:时钟节拍计数器 时钟节拍计数器以 1 秒为间隔,循环触发中断,并在串口终端上显示时钟节拍数,具体 程序如下: Uart_Printf("[ RTC Tick interrupt(1 sec) test for S3C2440 ]\n"); Uart_Printf("Press any key to exit.\n"); Uart_Printf("\n"); Uart_Printf("\n"); Uart_Printf(" "); pISR_TICK = (unsigned)Rtc_Tick; sec_tick = 1; rINTMSK = ~(BIT_TICK); rRTCCON = 0x0; //No reset[3], Merge BCD counters[2], BCD clock select XTAL[1], RTC Control disable[0] rTICNT = (1<<7) + 127; //Tick time interrupt enable, Tick time count value 127 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 75 页 共 188 页 上海双实科技有限公司 //Period = (n + 1) / 128 second n:Tick time count value(1~127) Uart_Getch(); rINTMSK = BIT_ALLMSK; rRTCCON = 0x0; //No reset[3], Merge BCD counters[2], BCD clock select XTAL[1], RTC Control disable[0] 步骤 7:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\RTC_test\ RTC_test_Data\DebugRel”下,可以看到 RTC_test.bin 可执行文件。 步骤 8:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 9:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 2 所示。 图 2 RTC 编程实验的运行结果 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 76 页 共 188 页 上海双实科技有限公司 5. 实验思考 5.1 RTC 实时时钟的主要功能有哪些? 5.2 思考 RTC 时钟在实时操作系统中发挥的作用有哪些? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 77 页 共 188 页 上海双实科技有限公司 实验 12 ADC 接口应用 1. 实验目的 z 了解 ARM 处理器 ADC 接口的处理机制 z 掌握在 S3C2440A 平台下进行 ADC 接口应用编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 S3C2440A 内部具有 8 路模拟信号输入的 10 位模/数转换器(ADC)。本实例介绍逐次逼 近式 ADC 的工作原理,及 S3C2440A 所具有的 ADC 的特点和控制寄存器,并通过本例来掌握 这个 ADC 的应用方法。 ADC 的种类很多,目前应用比较广泛的有 3 种类型:逐次逼近型 ADC,双积分式 ADC 和 V/F 变换器 ADC。逐次逼近型 ADC 工作过程如下:将待测量的 Uin 与内部 DAC(数/模转换 器)产生的推测信号相比较,根据比较结果决定减小或增大推测信号的取值;然后反复逐次 逼近式地修改推测信号的值,最终使推测信号与待测量值相等。此时向 DAC 输入的数字量就 是对应测量信号的转换结果。 3.2 S3C2440A 具备的 ADC S3C2440A 内部具有 8 路模拟信号输入的 10 位 ADC,内部结构如图 1 所示。 图 1 S3C2440A 的 ADC 内部结构图 3.2.1 ADC 转换时间的计算 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 78 页 共 188 页 上海双实科技有限公司 A/D转换时间即完成一次A/D转换所需要的时间。当系统的时钟频率为50MHz,且 ADC时钟源的预分频值为49时,10位数字量的转换时间为 A/D converter freq. = 50MHz/(49+1) = 1MHz Conversion time = 1/(1MHz / 5cycles) = 1/200KHz = 5 us 3.2.2 ADC 分辨率的计算 S3C2440A的ADC的输出为10位数字量,由于输入的满刻度电压为2.5 V,因此,ADC能分 10 辨出来的输入电压变化的最小值为2.5 V/2 =2.4mV。 3.2.3 采样保持器 采样保持器的作用是什么呢?在对模拟信号进行A/D转换时,从启动变换到变换结束的 数字量输出,需要一定的时间,即ADC的孔径时间。当输入信号的频率较高时,在A/D转换 的孔径时间内输入信号若发生变化,就会造成较大的转换误差。为了防止这种误差的产生, 必须在A/D转换开始时将信号电平保持住,即处于保持状态;而在A/D转换结束后又能跟踪 输入信号的变化,即对输入信号进行采样。完成这种功能的器件叫做采样保持器。 S3C2440A的ADC的典型应用是进行电阻式触摸屏输出信号的A/D转换。 3.3 ADC 的相关寄存器 S3C2440A的ADC模块主要包含ADC控制寄存器(ADCCON)、ADC转换数据寄存器0、1 (ADCDAT0、ADCDAT1)等,还有一些和触摸屏相关的寄存器我们将在触摸屏实验中介绍。 所有相关寄存器的位信息及使用说明在S3C2440A数据手册中都能找到,具体的使用方法 我们将在下面的实验中介绍。 4. 实验步骤 步 骤 1: 硬 件 连 接 由 于 S3C2440A 的参考电压是 3.3V,因此在 SinoSys-EA2440a 中的有产生 0-3.3V 的模 拟信号发生器,引出的电压和 S3C2440A 模拟信号引脚相连。(其中两个留作扩展用) 图 2 模拟信号发生器硬件连接图 步骤 2: 得到预分频值 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 \SourceCode\Interface\ ADC_test 的工程文件 ADC_test.mcp 工程文件。 在 Adc.c 的 Test_Adc 子函数中计算出预分频值,然后再在 ADC 的控制寄存器中设定预 分频值。 在程序中已经事先定义了采样频率,通过采样频率反推预分频值。 preScaler = 50000000/ADC_FREQ -1; //PCLK:50.7MHz 步骤 3:读取 A/D 转换数值子程序 int i; static int prevCh=-1; rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel if(prevCh!=ch) 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 79 页 共 188 页 上海双实科技有限公司 { rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel for(i=0;i>8); Uart_Printf("Maker:%x, Device:%x\n", maker, device); NF8_Print_Id()源码如下: NF_CMD(0x90);//写入 90h 指令 NF_ADDR(0x0);//写入地址 00h for (i=0; i<10; i++); Uart_Printf("NFSTAT: 0x%x\n", rNFSTAT); id=NF_RDDATA8()<<8; // Maker code 0xec 读出 ID 值 id|=NF_RDDATA8(); // Devide code(K9S1208V:0x76), (K9K2G16U0M:0xca) 步骤 4:页读写程序 本实验实现了某页的写及读出验证功能。Test_NF8_Rw 子函数实现这一功能。 程序首先初始化要写入的数据,*dstPt 是要读出验证的数据,所以先填 0,*srcPt 是 要写入的数据,所以先用随机数填满。 for(i=0; i<512; i++) *dstPt++=0x0;//填 0 for(i=0; i<512; i++) { #if ADS10==TRUE if(offset==-1) *srcPt++ = rand()%0xff;//随机数填满 #else if(offset==-1) *srcPt++ = i%0xff; #endif else *srcPt++ = i+offset; } 写之前先进行擦除工作: if(NF8_EraseBlock(block)==FAIL) return; 然后进行页写入操作: if(NF8_WritePage(block, page, srcPt)==FAIL) return; 将用随机数填满的 srcPt 指向的数据写入到指定的页中。 写入之后再读出验证: if(NF8_ReadPage(block, page, dstPt)==FAIL) return; Uart_Printf("Checking data.\n"); for(error=0, i=0; i<512; i++) { if(*srcPt++!=*dstPt++) { //比较操作 Uart_Printf("Error:%d[W:%x,R:%x]\n", i, *srcPt, *dstPt); error++; } } if(error!=0) { 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 105 页 共 188 页 上海双实科技有限公司 Uart_Printf("Fail to R/W test(%d).\n", error); return(2); } else { Uart_Printf("R/W test OK.\n"); return(1); } 其中 NF8_ReadPage(block, page, dstPt)将读出的数据放入 dstPt 指向的地址空间里。 最后将写入的数据和读出的数据比较,打印验证信息。 具体的块擦除,读写操作的指令流程参照 3.5 小节关于读写操作的描述。随机光盘也给 出了完整的源码文件(SourceCode\Interface \nandflash_test),供读者参考。 步骤 5:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\nandflash_test\ nandflash _test_Data\DebugRel”下,可以看到 nandflash _test.bin 可执行文件。 步骤 6:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 7:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 NorFlash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 4 所示。 图 4 Nand-Flash 测试程序的运行结果 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 106 页 共 188 页 上海双实科技有限公司 5. 实验思考 5.1 页读方式有两种,两者各有什么作用? 5.2 Nand-Flash 器件提供了复位指令,Nand-Flash 在复位和上电时区别在哪里? 5.3 学习完 Nand-Flash 和 Nor-Flash 的编程之后,请分析 Nand-Flash 和 NorFlash 的 区别在哪里?在实际运用中各有什么不同? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 107 页 共 188 页 上海双实科技有限公司 实验 16 通用 I/O 口的应用-跑马灯实验 1. 实验目的 z 了解通用 I/O 口工作原理 z 掌握在 S3C2440A 平台下进行 I/O 编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 S3C2440A 的多功能 I/O 口 S3C2440A 具有 130 个多功能输入/输出脚,分别包含在如下 9 组端口中。 ●1 个 25 位输出端口(端口 A)。 ●1 个 11 位输出端口(端口 B)。 ●4 个 16 位输入/输出端口(端口 C、D、E、G)。 ●1 个 8 位输入/输出端口(端口 F)。 ●1 个 9 位输入/输出端口(端口 H)。 ●1 个 13 位输入/输出端口(端口 J)。 9 组端口的功能描述分别如表 1 至表 9 所示。每组端口都可以通过软件设定其工 作方式。 Port A Selectable Pin Functions GPA22 Output only nFCE – – GPA21 Output only nRSTOUT – – GPA20 Output only nFRE – – GPA19 Output only nFWE – – GPA18 Output only ALE – – GPA17 Output only CLE – – GPA16 Output only nGCS5 – – GPA15 Output only nGCS4 – – GPA14 Output only nGCS3 – – GPA13 Output only nGCS2 – – GPA12 Output only nGCS1 – – GPA11 Output only ADDR26 – – GPA10 Output only ADDR25 – – GPA9 Output only ADDR24 – – 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 108 页 共 188 页 上海双实科技有限公司 GPA8 Output only ADDR23 – – GPA7 Output only ADDR22 – – GPA6 Output only ADDR21 – – GPA5 Output only ADDR20 – – GPA4 Output only ADDR19 – – GPA3 Output only ADDR18 – – GPA2 Output only ADDR17 – – GPA1 Output only ADDR16 – – GPA0 Output only ADDR0 – – 表1 端口A功能表 Port B Selectable Pin Functions GPB10 Input/output nXDREQ0 – – GPB9 Input/output nXDACK0 – – GPB8 Input/output nXDREQ1 – – GPB7 Input/output nXDACK1 – – GPB6 Input/output nXBREQ – – GPB5 Input/output nXBACK – – GPB4 Input/output TCLK0 – – GPB3 Input/output TOUT3 – – GPB2 Input/output TOUT2 – – GPB1 Input/output TOUT1 – – GPB0 Input/output TOUT0 – – 表2 端口B功能表 Port C Selectable Pin Functions GPC15 Input/output VD7 – – GPC14 Input/output VD6 – – GPC13 Input/output VD5 – – GPC12 Input/output VD4 – – GPC11 Input/output VD3 – – GPC10 Input/output VD2 – – GPC9 Input/output VD1 – – GPC8 Input/output VD0 – – GPC7 Input/output LCD_LPCREVB – – GPC6 Input/output LCD_LPCREV – – GPC5 Input/output LCD_LPCOE – – GPC4 Input/output VM – – GPC3 Input/output VFRAME – – 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 109 页 共 188 页 上海双实科技有限公司 GPC2 Input/output VLINE – – GPC1 Input/output VCLK – – GPC0 Input/output LEND – – 表3 端口C功能表 Port D Selectable Pin Functions GPD15 Input/output VD23 nSS0 – GPD14 Input/output VD22 nSS1 – GPD13 Input/output VD21 – – GPD12 Input/output VD20 – – GPD11 Input/output VD19 – – GPD10 Input/output VD18 SPICLK1 – GPD9 Input/output VD17 SPIMOSI1 – GPD8 Input/output VD16 SPIMISO1 – GPD7 Input/output VD15 – – GPD6 Input/output VD14 – – GPD5 Input/output VD13 – – GPD4 Input/output VD12 – – GPD3 Input/output VD11 – – GPD2 Input/output VD10 – – GPD1 Input/output VD9 – – GPD0 Input/output VD8 – – 表4 端口D功能表 Port E Selectable Pin Functions GPE15 Input/output IICSDA – – GPE14 Input/output IICSCL – – GPE13 Input/output SPICLK0 – – GPE12 Input/output SPIMOSI0 – – GPE11 Input/output SPIMISO0 – – GPE10 Input/output SDDAT3 – – GPE9 Input/output SDDAT2 – – GPE8 Input/output SDDAT1 – – GPE7 Input/output SDDAT0 – – GPE6 Input/output SDCMD – – GPE5 Input/output SDCLK – – GPE4 Input/output I2SSDO AC_SDATA_OUT – GPE3 Input/output I2SSDI AC_SDATA_IN – GPE2 Input/output CDCLK AC_nRESET – 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 110 页 共 188 页 上海双实科技有限公司 GPE1 Input/output I2SSCLK AC_BIT_CLK – GPE0 Input/output I2SLRCK AC_SYNC – 表5 端口E功能表 Port F Selectable Pin Functions GPF7 Input/output EINT7 – – GPF6 Input/output EINT6 – – GPF5 Input/output EINT5 – – GPF4 Input/output EINT4 – – GPF3 Input/output EINT3 – – GPF2 Input/output EINT2 GPF1 Input/output EINT1 GPF0 Input/output EINT0 表6 端口F功能表 Port G Selectable Pin Functions GPG15 Input/output EINT23 – – GPG14 Input/output EINT22 – – GPG13 Input/output EINT21 – – GPG12 Input/output EINT20 – – GPG11 Input/output EINT19 TCLK1 – GPG10 Input/output EINT18 nCTS1 – GPG9 Input/output EINT17 nRTS1 – GPG8 Input/output EINT16 – – GPG7 Input/output EINT15 SPICLK1 – GPG6 Input/output EINT14 SPIMOSI1 – GPG5 Input/output EINT13 SPIMISO1 – GPG4 Input/output EINT12 LCD_PWREN – GPG3 Input/output EINT11 nSS1 – GPG2 Input/output EINT10 nSS0 – GPG1 Input/output EINT9 – – GPG0 Input/output EINT8 – – 表7 端口G功能表 Port H Selectable Pin Functions GPH10 Input/output CLKOUT1 – – GPH9 Input/output CLKOUT0 – – GPH8 Input/output UEXTCLK – – GPH7 Input/output RXD2 nCTS1 – 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 111 页 共 188 页 上海双实科技有限公司 GPH6 Input/output TXD2 nRTS1 – GPH5 Input/output RXD1 – – GPH4 Input/output TXD1 – – GPH3 Input/output RXD0 – – GPH2 Input/output TXD0 – – GPH1 Input/output nRTS0 – – GPH0 Input/output nCTS0 – – 表8 端口H功能表 Port J Selectable Pin Functions GPJ12 Input/output CAMRESET – – GPJ11 Input/output CAMCLKOUT – – GPJ10 Input/output CAMHREF – – GPJ9 Input/output CAMVSYNC – – GPJ8 Input/output CAMPCLK – – GPJ7 Input/output CAMDATA7 – – GPJ6 Input/output CAMDATA6 – – GPJ5 Input/output CAMDATA5 – – GPJ4 Input/output CAMDATA4 – – GPJ3 Input/output CAMDATA3 – – GPJ2 Input/output CAMDATA2 – – GPJ1 Input/output CAMDATA1 – – GPJ0 Input/output CAMDATA0 – – 表9 端口J功能表 3.2 端口选择 一般在系统初始化时,就要对端口进行初始化。在一般的应用中,有一些端口是有 通常的用途的,比如地址线,片选线和 SDRAM 接口信号线等等。我们在选用端口作为我 们自己的运用时,要留意系统的端口占有情况,以免造成冲突。 在 SinoSys-EA2440a 中,很多端口线已被指定了一定的作用。SinoSys-EA2440a 左 下角的四个 LED 灯就是和 GPF4-7 相连的。具体的硬件连线情况可参照随机光盘里电路 原理图。在系统初始化时,就要进行 I/O 端口初始化,设置端口控制寄存器(将再下面 讲到),将 GPF4-7 设置为工作方式 1,并设置为输出状态。 3.3 端口控制寄存器 端口配置寄存器(GPACON-GPJCON): 由于多数端口都是多功能口,因此,需要用端口配置寄存器GPnCON来设置每个引脚工作 在哪一个功能模式下。 端口数据寄存器(GPADAT-GPJDAT): 当端口被设置为输出脚时,输出数据的方法就是将数据写入到GPADAT-GPJDAT的相应位 中;当端口被设置为输入脚时,读人数据的方法就是将GPADAT-GPJDAT中的相应位读出。 端口上拉设置寄存器(GPBUP-GPJUP): 端口上拉寄存器用来设定PB—PJ这几组端口是否具有内部上拉。当GPnUP的对应位为0 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 112 页 共 188 页 上海双实科技有限公司 时,该引脚上的上拉使能;当为1时,该引脚上的上拉禁能。 外部中断控制寄存器: 该寄存器可用来设置EINT(外部中断)请求输入的模式:低电平触发、高电平触发、下降 沿触发、上升沿触发或是边沿触发。 下面以PB口的相关寄存器为例进行介绍。PB的寄存器有3个:GPBCON,GPBDAT和GPBUP; 与它们相关的信息列在了表10中,表11-表13分别描述了这3个寄存器的位定义。 Reset Register Address R/W Description GPBCON 0x56000010 R/W Configures the pins of port B 0x0 GPBDAT 0x56000014 R/W The data register for port B Undef. GPBUP 0x56000018 R/W Pull-up disable register for port B 0x0 Reserved 0x5600001c Value 表10 PB端口的相关寄存器信息 PBCON Bit GPB10 [21:20] Description 00 = Input 10 = nXDREQ0 GPB9 [19:18] 00 = Input 10 = nXDACK0 GPB8 [17:16] 00 = Input 10 = nXDREQ1 GPB7 [15:14] 00 = Input 10 = nXDACK1 GPB6 [13:12] 00 = Input 10 = nXBREQ GPB5 [11:10] 00 = Input 10 = nXBACK GPB4 [9:8] 00 = Input 10 = TCLK [0] GPB3 [7:6] 00 = Input 10 = TOUT3 GPB2 [5:4] 00 = Input 10 = TOUT2 GPB1 [3:2] 00 = Input 10 = TOUT1 GPB0 [1:0] 00 = Input 10 = TOUT0 01 = Output 11 = reserved 01 = Output 11 = reserved 01 = Output 11 = Reserved 01 = Output 11 = Reserved 01 = Output 11 = reserved 01 = Output 11 = reserved 01 = Output 11 = reserved 01 = Output 11 = reserved 01 = Output 11 = reserved] 01 = Output 11 = reserved 01 = Output 11 = reserved 表11 GPBCON的位定义 GPBDAT Bit GPB[10:0] [10:0] Description When the port is configured as input port, the corresponding bit is the pin 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 113 页 共 188 页 上海双实科技有限公司 state. When the port is configured as output port, the pin state is the same as the corresponding bit. When the port is configured as functional pin, the undefined value will be read. 表12 GPBDAT的位定义 GPBUP Bit GPB[10:0] [10:0] Description 0: The pull up function attached to the corresponding port pin is enabled. 1: The pull up function is disabled. 表13 GPBUP的位定义 4. 实验步骤 由 于 在 SinoSys- EA2440a 中 ,已 经 将 GPF4-7 和 要 实 现 跑 马 灯 功 能 的 4 个 LED 等 相 连 , 而 从 硬 件 连 接 图 中 我 们 可 以 看 出 , 这 4 个 LED 等 是 低 导 通 的 。 也 就 是 说 , 要 让 某 一 个 LED 灯 亮 , 只 要 使 相 应 的 I/O 为 0 即 可 。 步 骤 1: 设 置 寄 存 器 实验的第一步肯定是要设置对应端口的控制寄存器了。 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 “\SourceCode\Interface\IO_test”的工程文件 IO_test.mcp,打开 main_IO.c 文件。 可以看到程序在一开始即调用 Port_Init()子函数进行端口初始化。 和本实验有关的代码如下: //*** PORT F GROUP //Ports : GPF7 GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0 //Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0 //Setting: Output Output Output Output EINT3 EINT2 EINT1 EINT0 //Binary : 01 01 , 01 01 , 10 10 , 10 10 rGPFCON = 0x55aa; rGPFUP = 0xff; // The pull up function is disabled GPF[7:0] 将 GPF4-7 在 GPFCON 中都设置为 01,即为输出方式。 步骤 2:跑马灯的实现 控制寄存器设置好后,主函数调用 Led_Test1()。该函数实现了跑马灯功能。 程序的主要功能代码如下: Delay(1000); Led_Display(0x8); Delay(1000); Led_Display(0x4); Delay(1000); Led_Display(0x2); Delay(1000); Led_Display(0x1); Delay(1000); 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 114 页 共 188 页 上海双实科技有限公司 Led_Display(0xF); Delay(1000); Led_Display(0x0); 在控制灯亮灭的间隔有 1S 的延时,方面观察实验的效果。控制灯亮灭的函数是 Led_Display 函数。 rGPFDAT = (rGPFDAT & ~(0xf<<4)) | ((~data & 0xf)<<4); 可见,要控制灯的亮灭,只要设定对应端口为 0 就可以了。这个值由 data 控制。比如 要使 SinoSys-EA2440a 左下角最左边的灯亮,只要设定 data 值为 1 就可以了。 步骤 3:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\IO_test\ IO_test_Data\DebugRel”下,可以看到 IO_test.bin 可执行文件。 步骤 4:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 5:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 NorFlash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 1 所示。 图 1 I/O 测试程序的运行结果 观察 SinoSys-EA2440a,可以看到左下角的 LED 灯轮流点亮。 5. 实验思考 5.1 本实验是关于通用 I/O 口控制 LED 灯的实验,请读者思考一下,在嵌入式系统的设 计和调试过程中,LED 灯发挥了哪些作用,这才是本次实验的实用价值。 5.2 阅读关于 S3C2440A 的数据手册,掌握每个端口及控制寄存器的使用方法。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 115 页 共 188 页 上海双实科技有限公司 实验 17 LCD 接口编程 1. 实验目的 z 了解 ARM 处理器 LCD 驱动控制器的处理机制 z 掌握在 S3C2440A 平台下进行 LCD 应用编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 S3C2440A 内部含有一个 LCD 驱动控制器.能自动产生 LCD 驱动控制所需的控制 信号,因此 S3C2440A 可以与诸如黑白灰度、STN 型彩色、TFT 型彩色等 LCD 屏直接 接口,而不需要另外加 LCD 控制器。在这种接口方式下,LCD 显示缓冲区映射在系 统的存储器 空间上,程 序只需像素 点内容写入 存储器对应 地址就可以 实现对 应 LCD 屏上像素点颜色的显示,十分方便。 本实例以 S3C2440A 与一个 TFT 型 640 像素×480 行的彩色液晶显示屏接口为例, 介绍 S3C2440A 与彩色液晶显示屏的接口方法,如何在 LCD 上显示某种色彩及如何 绘 制简单图形等。 3.2 S3C2440A 的内部 LCD 控制器介绍 S3C2440A 内置 LCD 控制器可以支持规格为每像素 2 位(4 级灰度)或每像素 4 位(16 级灰 度)的黑白 LCD,也可以支持每像素 8 位(256 种颜色)或最多每像素 24 位(针对 TFT 型真彩 色液晶屏)的彩色 LCD 屏。LCD 控制器可以通过编程支持不同 LCD 屏的要求,例如行和列像 素数、数据总线宽度、接口时序和刷新频率等。 LCD 控制器的主要工作,是将定位在系统存储器中的显示缓冲区中的 LCD 图像数据传送 到外部 LCD 驱动器中。LCD 控制器的主要特性如下。 ●支持彩色/灰度/黑白 LCD 屏。 ●支持 3 种显示类型的 LCD 屏,即 4 位双扫描、4 位单扫描和 8 位单扫描显示模式。 ●支持复合虚拟显示屏(支持硬件方式的水平/垂直滚动)。 ●采用系统存储器作为显示缓冲区存储器。 ●专门的 DMA 操作用于支持图像数据的获取。 ●支持多种屏幕大小 —典型的屏幕尺寸为 640 像素×480 行,320 像素×240 行,2048 像素×2048 行,l024 像素×4096 行等; —最大虚拟屏幕大小(彩色模式)为 4096 像素×1024 行,2048 像素×2048 行,1024 像素×4069 行等。 ●支持黑白、4 级灰度和 16 级灰度。 ●支持 STN 型 256 种色彩的 LCD 显示屏。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 116 页 共 188 页 上海双实科技有限公司 ●支持 TFT 型 24 位色 LCD 显示屏 S3C2440A 内部 LCD 控制器的结构框图如图 1 所示。 3.2.1 LCD 控制器的外部接口信号 LCD控制器外部接口信号的定义及其与LCD模块各信号之间的对应关系如下(针对 STN型LCD举例,对于TFT型LCD见表1)。 z VFRAME LCD控制器和LCD驱动器之间的帧同步信号。该信号告诉LCD屏新的一帧开 始了。LCD控制器在一个完整帧显示完成后立即插入一个VFRAME信号,并开始新一 帧的显示。该信号与LCD模块的YD信号相对应。 z VLINE LCD控制器和LCD驱动器之间的线同步脉冲信号。该信号用于LCD驱动器将水 平线(行)移位寄存器的内容传送给LCD屏显示。LCD控制器在整个水平线(整行)数据 移入LCD驱动器后,插入一个VLINE信号。该信号与LCD模块的LP信号相对应。 z VCLK LCD控制器和LCD驱动器之间的像素时钟信号。由LCD控制器送出的数据在 VCLK的上升沿处送出,在VCLK的下降沿处被LCD驱动器采样。该信号与LCD模块的XCK 信号相对应。 z VM LCD驱动器的AC信号。VM信号被LCD驱动器用于改变行和列的电压极性,从而控 制像素点的显示或熄灭。VM信号可以与每个帧同步,也可以与可变数量的VLINE信 号同步。该信号与LCD模块的DISP信号相对应。 z VD0-23 LCD像素点数据输出端口。与LCD模块相对应。 图1 S3C2440A内部LCD控制器的结构框图 STN VFRAME (Frame sync. Signal) VLINE (Line sync pulse signal) VCLK (Pixel clock signal) TFT SEC TFT SEC TFT (LTS350Q1-P (LTS350Q1-P D1/2) E1/2) VSYNC (Vertical sync. Signal) STV STV HSYNC (Horizontal sync. Signal) CPV CPV LCD_HCLK LCD_HCLK VD[23:0] VD[23:0] VCLK (Pixel clock signal) VD[23:0] (LCD pixel data VD[23:0] (LCD pixel data output output ports) ports) 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 117 页 共 188 页 上海双实科技有限公司 VM (AC bias signal for LCD driver) - VDEN (Data enable signal) TP TP LEND (Line end signal) STH STH LCD_PWREN LCD_PWREN LCD_PWREN LCD_PWREN - - LPC_OE LCC_INV - - LPC_REV LCC_REV - - LPC_REVB LCC_REVB 表1 LCD控制器外部接口信号表 3.2.2 LCD 控制器的操作 显示方式: S3C2440A的LCD控制器支持三种LCD驱动器:4位双扫描、4位单扫描和8位单扫描显示模 式,其中,8位单扫描显示模式,这几种显示方式如图2所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 118 页 共 188 页 上海双实科技有限公司 图2 S3C2440A支持的显示方式 虚拟显示: S3C2440A支持硬件方式的水平或垂直滚动。如果要使屏幕滚动,可以通过修改LCDSADDR1 和LCDSADDR2寄存器中的LCDBASEU和LCDBASEL值来实现;而不是修改PAGEWIDTH和OFFSIDE值。 LCDBASEU,LCDBASEL,PAGEWIDTH和OFFSIZE的定义也可以通过图3所示。 从图中我们可以看出,如果要实现滚动,显示缓冲区的大小则要大于LCD显示屏的大小。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 119 页 共 188 页 上海双实科技有限公司 图3 在虚拟显示屏中实现滚动 调色板: S3C2440A支持查找表(即调色板表),用于各种色彩选择或灰度级别的选择。这种方法给 予用户很大的灵活性。在灰度模式中,通过查找表可以在16级灰度中选择4种灰度;在彩色 模式(256色情况)中,1个字节的图像数据是用3位表示红色,3位表示绿色,2位表示蓝色。 通过查找表,可以选择16级红色中的8种红色,16级绿色中的8种绿色和16级蓝色中的4种蓝 色。256色意味着所有颜色都是由8种红色,8种绿色和4种蓝色构成(8×8×4=256种),参考 关于查找表寄存器的说明,例如REDLUT(红色查找表寄存器),1个字节的3位是表示红色的, 这3位可以取值000,00l,010,……,11l共8个值。取某个值时,对应的色彩级别究竟是多 少,就根据查找表中的值决定。每个色彩级别由4位数据表示,因此共有16个色彩级别可供 选择。 3.2.3 LCD控制器专用寄存器 LCD控制寄存器1: LCDCON1 Bit Description 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 InitialState 第 120 页 共 188 页 上海双实科技有限公司 LINECNT [27:18] (read only) CLKVAL Provide the status of the line counter. Down count 0000000000 from LINEVAL to 0 [17:8] Determine the rates of VCLK and CLKVAL[9:0]. 0000000000 STN: VCLK = HCLK / (CLKVAL x 2) ( CLKVAL ≥2) TFT: VCLK = HCLK / [(CLKVAL+1) x 2] ( CLKVAL ≥ 0) MMODE [7] Determine the toggle rate of the VM. 0 = Each 0 Frame 1 = The rate defined by the MVAL PNRMODE [6:5] Select the display mode. 00 = 4-bit dual scan 00 display mode (STN) 01 = 4-bit single scan display mode (STN) 10 = 8-bit single scan display mode (STN) 11 = TFT LCD panel BPPMODE [4:1] Select the BPP (Bits Per Pixel) mode. 0000 = 1 0000 bpp for STN, Monochrome mode 0001 = 2 bpp for STN, 4-level gray mode 0010 = 4 bpp for STN, 16-level gray mode 0011 = 8 bpp for STN, color mode (256 color) 0100 = packed 12 bpp for STN, color mode (4096 color) 0101 = unpacked 12 bpp for STN, color mode (4096 color) 0110 = 16 bpp for STN, color mode (4096 color) 1000 = 1 bpp for TFT 1001 = 2 bpp for TFT 1010 = 4 bpp for TFT 1011 = 8 bpp for TFT 1100 = 16 bpp for TFT 1101 = 24 bpp for TFT ENVID [0] LCD video output and the logic enable/disable. 0 = 0 Disable the video output and the LCD control signal. 1 = Enable the video output and the LCD control signal. LCD控制寄存器2: LCDCON2 VBPD Bit Description Initial State [31:24] TFT: Vertical back porch is the number of inactive 0x00 lines at the start of a frame, after vertical synchronization period. STN: These bits should be set to zero on STN LCD. size LINEVAL [23:14] TFT/STN: These bits determine the of vertical LCD 0000000000 panel. VFPD [13:6] TFT: Vertical front porch is the number of inactive 00000000 lines at the end of a frame, before vertical synchronization period. STN: These bits should be set to zero on STN LCD. 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 121 页 共 188 页 上海双实科技有限公司 VSPW [5:0] TFT: Vertical sync pulse width determines the 000000 VSYNC pulse's high level width by counting the number of inactive lines. STN: These bits should be set to zero on STN LCD. LCD控制寄存器3: LCDCON3 HBPD (TFT) Bit [25:19] Description TFT: Horizontal back porch is the number of Initialstate 0000000 VCLK periods between the falling edge of HSYNC and the start of active data. WDLY (STN) STN: WDLY[1:0] bits determine the delay between VLINE and VCLK by counting the number of the HCLK. WDLY[7:2] are reserved. 00 = 16 HCLK, 01 = 32 HCLK, 10 = 48 HCLK, 11 = 64 HCLK HOZVAL [18:8] TFT/STN: These bits determine the horizontal 00000000000 size of LCD panel. HOZVAL has to be determined to meet the condition that total bytes of 1 line are 4n bytes. If the x size of LCD is 120 dot in mono mode, x=120 cannot be supported because 1 line consists of 15 bytes. Instead, x=128 in mono mode can be supported because 1 line is composed of 16 bytes (2n). LCD panel driver will discard the additional 8 dot. HFPD (TFT) [7:0] TFT: Horizontal front porch is the number of 0X00 VCLK periods between the end of active data and the rising edge of HSYNC. LINEBLANK STN: These bits indicate the blank time in one (STN) horizontal line duration time. These bits adjust the rate of the VLINE finely. The unit of LINEBLANK is HCLK x 8. Ex) If the value of LINEBLANK is 10, the blank time is inserted to VCLK during80HCLK. LCD控制寄存器4: LCDCON4 MVAL Bit Description Initial state [15:8] STN: These bit define the rate at which the VM 0X00 signal will toggle if the MMODE bit is set to logic '1'. HSPW (TFT) [7:0] TFT: Horizontal sync pulse width determines the HSYNC pulse's 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 0X00 第 122 页 共 188 页 上海双实科技有限公司 high level width by counting the number of the VCLK. WLH(STN) STN: WLH[1:0] bits determine the VLINE pulse's high level width by counting the number of the HCLK. WLH[7:2] are reserved. 00 = 16 HCLK, 01 = 32 HCLK, 10 = 48 HCLK, 11 = 64 HCLK LCD控制寄存器5: LCDCON5 Bit Reserved [31:17] VSTATUS [16:15] Description Initialstate This bit 0 is reserved and the value should be ‘0’. 00 TFT: Vertical Status (read only). 00 = VSYNC 10 = ACTIVE 01 = BACK Porch 11 = FRONT Porch HSTATUS [14:13] 00 TFT: Horizontal Status(read only). 00 = HSYNC 10 = ACTIVE 01 = BACK Porch 11 = FRONT Porch BPP24BL [12] 0 TFT: This bit determines the order of 24 bpp video memory. 0 = LSB valid 1 = MSB Valid FRM565 [11] TFT: This bit selects the format of 16 bpp output video 0 data . 0= 5:5:5:1Format INVVCLK [10] 1 =5:6:5 Format 0 STN/TFT: This bit controls the polarity of the VCLK active edge. 0 = The video data is fetched at VCLK falling edge 1 = The video data is fetched at VCLK rising edge INVVLINE [9] STN/TFT: This bit indicates the VLINE/HSYNC pulse 0 polarity. 0= Normal 1= Inverted INVVFRAM [8] E STN/TFT: This bit indicates the VFRAME/VSYNC pulse 0 polarity. 0 = Normal 1 = Inverted INVVD [7] STN/TFT: This bit indicates the VD (video data) pulse 0 polarity. 0= Normal 1= VD is inverted. INVVDEN [6] 0 TFT: This bit indicates the VDEN signal polarity. 0 = normal 1 = inverted INVPWREN [5] STN/TFT: This bit indicates the PWREN signal polarity. 0 0 = normal 1 = inverted INVLEND [4] 0 TFT: This bit indicates the LEND signal polarity. 0 = normal 1 = inverted PWREN [3] STN/TFT: LCD_PWREN output signal enable/disable. 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 123 页 0 共 188 页 上海双实科技有限公司 0 = Disable PWREN signal 1 = Enable PWREN signal ENLEND [2] 0 TFT: LEND output signal enable/disable. 0 = Disable LEND signal 1 = Enable LEND signal BSWP [1] 0 STN/TFT: Byte swap control bit. 0 = Swap Disable 1 = Swap Enable HWSWP [0] 0 STN/TFT: Half-Word swap control bit. 0 = Swap Disable 1 = Swap Enable 除了这几个寄存器,还有帧缓冲区起始地址寄存器1-3、红色查找表寄存器、绿色查找 表寄存器、蓝色查找表寄存器等等,读者在编程时可参照S3C2440A的产品手册。 4. 实验步骤 本 实 验 实 现 了 LCD 的 显 示 和 简 单 的 画 图 功 能 , 具 体 步 骤 如 下 。 步 骤 1: I/O 口 LCD 功 能 设 置 由 于 I/O 口 的 复 用 功 能 , 因 此 需 要 设 置 S3C2440A 的 I/O 控制寄存器。 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 “\SourceCode\Interface\LCD_test”工程文件 LCD_test.mcp 工程文件。 在程序的开始调用 Port_Init()函数,其中就有对 PC 和 PD 两个端口的功能设置,读者 可以参考。 步骤 2:LCD 初始化程序 根据上述分析,在点亮 LCD 之前,首先对 LCD 控制器相关的寄存器进行初始化,从而使 LCD 控制器的配置与外接 LCD 模块特性能够匹配;同时在内存中划出一块显示缓冲区,与显 示像素点一一对应。Lcd_Tft_LQ080V3DG1_Init()函数实现了 LCD 初始化功能。 Lcd_Init(); LcdBkLtSet( 70 ) ; Lcd_PowerEnable(0, 1); Lcd_EnvidOnOff(1); //turn on vedio Lcd_ClearScr(0xffff); //fill all screen with some color #define LCD_BLANK 12 #define C_UP ( LCD_XSIZE_TFT_640480 - LCD_BLANK*2 ) #define C_RIGHT ( LCD_XSIZE_TFT_640480 - LCD_BLANK*2 ) #define V_BLACK ( ( LCD_YSIZE_TFT_640480 - LCD_BLANK*4 ) / 6 ) Glib_FilledRectangle( LCD_BLANK, LCD_BLANK, ( LCD_XSIZE_TFT_640480 LCD_BLANK ), ( LCD_YSIZE_TFT_640480 - LCD_BLANK ),0x0000);//fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*0), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*1),0x001f); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*1), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*2),0x07e0); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*2), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*3),0xf800); //fill a Rectangle with some color 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 124 页 共 188 页 上海双实科技有限公司 Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*3), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*4),0xffe0); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*4), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*5),0xf81f); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*5), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*6),0x07ff); //fill a Rectangle with some color Glib_Line(LCD_BLANK,LCD_BLANK, (LCD_XSIZE_TFT_640480-LCD_BLANK), (LCD_YSIZE_TFT_640480-LCD_BLANK), 0x0000 ) ; Glib_Line(LCD_BLANK,(LCD_YSIZE_TFT_640480-LCD_BLANK), (LCD_XSIZE_TFT_640480-LCD_BLANK), LCD_BLANK, 0x0000 ) ; 首先该函数调用 Lcd_Init()进行基本初始化,其中包括对各个控制寄存器的设置,并 在 内 存 中 指 定 一 内 存 缓 冲 区 。 volatile static unsigned short LCD_BUFER[SCR_YSIZE_TFT_640480][SCR_XSIZE_TFT_640480]; 然后点亮 LCD 屏,并执行一系列画图操作。 步骤 3:LCD 测试程序 Lcd_Tft_LQ080V3DG1_Test()函数实现了 LCD 的测试功能。具体源码如下: Uart_Printf("\nTest LQ080V3DG1 (TFT LCD)!\n"); Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) ) ; //clear screen Uart_Printf( "\nLCD clear screen is finished! press any key to continue!\n" ); Uart_Getch() ; //wait uart input Lcd_ClearScr( (0x1f<<11) | (0x3f<<5) | (0x1f) ) ; //clear screen Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" ); Uart_Getch() ; //wait uart input Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x1f) ) ; //clear screen Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" ); Uart_Getch() ; //wait uart input Lcd_ClearScr( (0x00<<11) | (0x3f<<5) | (0x00) ) ; //clear screen Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" ); Uart_Getch() ; //wait uart input Lcd_ClearScr( (0x1f<<11) | (0x00<<5) | (0x00) ) ; //clear screen Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" ); Uart_Getch() ; //wait uart input Lcd_ClearScr( (0x00<<11) | (0x3f<<5) | (0x1f) ) ; //clear screen Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" ); Uart_Getch() ; //wait uart input Lcd_ClearScr( (0x1f<<11) | (0x00<<5) | (0x1f) ) ; //clear screen Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" ); Uart_Getch() ; //wait uart input Lcd_ClearScr( (0x1f<<11) | (0x3f<<5) | (0x00) ) ; //clear screen Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" ); Uart_Getch() ; //wait uart input Lcd_ClearScr(0xffff); //fill all screen with some color #define LCD_BLANK 12 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 125 页 共 188 页 上海双实科技有限公司 #define C_UP ( LCD_XSIZE_TFT_640480 - LCD_BLANK*2 ) #define C_RIGHT ( LCD_XSIZE_TFT_640480 - LCD_BLANK*2 ) #define V_BLACK ( ( LCD_YSIZE_TFT_640480 - LCD_BLANK*4 ) / 6 ) Glib_FilledRectangle( LCD_BLANK, LCD_BLANK, ( LCD_XSIZE_TFT_640480 LCD_BLANK ), ( LCD_YSIZE_TFT_640480 - LCD_BLANK ),0x0000); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*0), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*1),0x001f); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*1), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*2),0x07e0); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*2), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*3),0xf800); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*3), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*4),0xffe0); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*4), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*5),0xf81f); //fill a Rectangle with some color Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*5), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*6),0x07ff); //fill a Rectangle with some color Glib_Line( LCD_BLANK,LCD_BLANK, (LCD_XSIZE_TFT_640480-LCD_BLANK), (LCD_YSIZE_TFT_640480-LCD_BLANK), 0x0000 ) ; Glib_Line( LCD_BLANK,(LCD_YSIZE_TFT_640480-LCD_BLANK), (LCD_XSIZE_TFT_640480-LCD_BLANK), LCD_BLANK, 0x0000 ) ; Uart_Printf("Any Key To Next!\n") ; Uart_Getch() ; //Any Key To Next Paint_Bmp(0,0,640,480, girl3_640_480); //paint a bmp Uart_Printf( "LCD paint a bmp, please look! press any key to continue! \n" ); Uart_Getch() ; //wait uart input 程序中执行了颜色填充,矩形画图,画线及位图绘制等功能,具体程序读者可参照光盘 提供的源代码,但原理都是向显示缓冲区里写入一定的值而已,这一点读者应该自己掌握, 以便自己写出 LCD 操作的函数库用以后的程序使用。 步骤 4:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\LCD_test\ LCD_test_Data\DebugRel”下,可以看到 LCD_test.bin 可执行文件。 步骤 5:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 6:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 4 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 126 页 共 188 页 上海双实科技有限公司 图 4 LCD 编程实验的运行结果 5. 实验思考 5.1 LCD 显示采用的方式有哪些? 5.2 思考如何改善程序性能,提高 LCD 的刷新频率? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 127 页 共 188 页 上海双实科技有限公司 实验 18 触摸屏应用 1. 实验目的 z 了解 ARM 处理器触摸屏的处理机制 z 掌握在 S3C2440A 平台下进行触摸屏应用编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 触摸屏由于其体积小、轻便和接口简单的特点,成为一种在嵌入式系统中应用广泛的输 入设备。本实例首先介绍四线电阻式触摸屏的结构和工作原理,然后介绍 S3C2440A 通过内 部集成的触摸屏控制寄存器的设置,来完成对触摸屏触摸位置坐标的读取。本实例将说明触 摸屏的应用编程,实现每当用手指在触摸屏上按压,按下的触点位置坐标(x,y)就立即在 串口终端上显示出来。 3.2 触摸屏的基本原理 典型触摸屏的工作组件一般由 3 部分组成,如图 1 所示。两层透明的阻性导体层、两层 导体之间的隔离层和电极。阻性导体层选用阻性材料,如将铟锡氧化物(1TO)涂在衬底上构 成,或者上层衬底用塑料,下层衬底用玻璃。隔离层为粘性绝缘液体材料,如聚脂薄膜。电 极选用导电性能极好的材料(如银粉墨)构成,其导电性能大约为 ITO 的 1 000 倍。 图 1 触摸屏的内部结构图 触摸屏工作时,上下导体层相当于电阻网络,如图 2 所示。当某一层电极加上电压时, 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 128 页 共 188 页 上海双实科技有限公司 会在该网络上形成电压梯度。如有外力使得上下两层在某一点接触,则在另一层未加电压的 电极上可测得接触点处的电压,从而知道接触点处的坐标。比如,在顶层的电极(X+,X-) 上加上电压,则在顶层导体层上形成电压梯度;当有外力使得上下两层在某一点接触时,在 底层(Y+,Y-)电极上就可以测得接触点处的电压;再根据该电压与电极(X+)之间的距离关系, 知道该处的 x 坐标;然后,将电压切换到底层电极(Y+,Y-)上,并在顶层(X+,X-)电极上测 量接触点处的电压,从而确定 y 坐标。 图 2 触摸屏的工作原理 3.4 触摸屏的相关寄存器 ADC及触摸屏控制器的寄存器详解 ADCCON :ADC 控制寄存器 ENABLE_START : 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 129 页 共 188 页 上海双实科技有限公司 置 1:启动 ADC 转换 置 0:无操作 RESR_START : 置 1:允许读操作启动 ADC 转换 置 0:禁止读操作启动 ADC 转换 STDBM: 置 1:将 ADC 置为闲置状态(模式) 置 0:将 ADC 置为正常操作状态 SEL_MUX:选择需要进行转换的 ADC 信道 PRSCVL:ADC 转换时钟预分频参数 PRSCEN:ADC 转换时钟使能 ECFLG:ADC 转换完成标志位(只读) 为 1:ADC 转换结束 为 0:ADC 转换进行中 ADCTSC :触摸屏控制寄存器 XY_PST :对 X/Y 轴手动测量模式进行选择 AUTO_PST:X/Y 轴的自动转换模式使能位 PULL_UP :XP 端的上拉电阻使能位 XP_SEN :设置 nXPON 输出状态 XM_SEN :设置 XMON 输出状态 YP_SEN :设置 nYPON 输出状态 YM_SEN :设置 YMON 输出状态 ADCDLY :ADC 转换周期等待定时器 ADCDAT0 :ADC 数据寄存器 0 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 130 页 共 188 页 上海双实科技有限公司 XPDATA :X 轴转换资料寄存器 XY_PST :选择 X/Y 轴自动转换模式 AUTO_PST:X/Y 轴自动转换使能位 UPDOWN :选择中断等待模式的类型 为 0:按下产生中断 为 1:释放产生中断 ADCDAT1 : ADC 资料寄存器 1,定义类同于 ADCDAT0。 所有相关寄存器的位信息及使用说明在S3C2440A数据手册中都能找到,具体的使用方法 我们将在下面的实验中介绍。 4. 实验步骤 步 骤 1: 硬 件 连 接 将 触 摸 屏 的 4根 信 号 线 直 接 和 S3C2440A的TSYM、TSYP、TSXM和TSXP四个引脚相连,由 S3C2440A内部来控制电平的转换和AD的转换测量。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 131 页 共 188 页 上海双实科技有限公司 图3 触摸屏的硬件连接图 步骤 2: 寄存器设置 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 “\SourceCode\Interface\touchpanel_test”的工程文件 touchpanel_test.mcp 工程文件。 在 Touchpanel.c 的 Test_Touchpanel 子函数中对触摸屏相关的寄存器进行设置和初始 化。 rADCDLY=50000; //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms rADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value Uart_Printf("ADC touch screen test\n"); 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); 步骤 3:触摸屏中断服务程序 在对寄存器进行设置和指定中断服务程序的入口地址后,程序进入等待状态,当用触摸 笔点按触摸屏时,处理器接受中断,并进入中断服务程序的执行。中断服务程序源码如下: int i; U32 saveAdcdly; if(rADCDAT0&0x8000) { //Uart_Printf("\nStylus Up!!\n"); rADCTSC&=0xff; // Set stylus down interrupt bit } 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 启动 AD 转换 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);//AD 转换结束后得到(x,y)坐标 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 132 页 共 188 页 上海双实科技有限公司 ydata=(rADCDAT1&0x3ff); //YH 0627, To 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=%04d\n", count++, xdata, ydata); 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); 步骤 4:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “ \touchpanel_test\ touchpanel _test_Data\DebugRel ” 下 , 可 以 看 到 touchpanel _test.bin 可执行文件。 步骤 5:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 6:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验 4 DNW 的使用”) ,将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 9 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 133 页 共 188 页 上海双实科技有限公司 图 4 touch panel 编程实验的运行结果 通过触摸笔点击触摸屏,可以看到,触摸屏的坐标值也在发生相应的变化。 5. 实验思考 5.1 触摸屏的工作原理是什么? 5.2 总结触摸屏实验和 AD 转换实验在 AD 的处理上的异同点。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 134 页 共 188 页 上海双实科技有限公司 实验 19 UART 异步串行接口应用 1. 实验目的 z 了解 ARM 处理器 UART 异步串行接口的处理机制 z 掌握在 S3C2440A 平台下进行串口编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 S3C2440A 除了具备 ARM920T 内核以外,还集成了功能齐全的片上“外设”,例 如 UART 单元、LCD 控制器、RTC 和 A/D 转换器等。这种集成化的结构使得系统电路 能够大大地 减少处理器 以外的器件 和电路,从 而减少成本 和体积,降 低了设计 开 发 的风险和难 度,缩短产 品的上市时 间。这对于 大多数嵌入 式系统产品 而言是最 为 重 要的。本实例介绍 S3C2440A 的片上外设之一——UART。 S3C2440A 内部集成的 UART(通用异步收发器)单元提供三个独立的异步串行 I/O 端口,也就 是通常所说 的串口。串 口是用途广 泛的通讯口 ,很多工业 现场总线 都 以 串口为基础 。在这里, 串口不仅可 以用来与外 部设备进行 数据通讯, 还可以用 来 观 察系统的运 行状况,例 如前面已经 使用过的利 用串口终端 工具观察程 序运行情 况 的 方法。 S3C2440A 的 UART 单元提供三个独立的异步串行 I/O 端口,每个都可以在中 断或 DMA 两种模式下工作。它们支持的最高波特率为 115.2 kbps。每个 UART 通道 包含 2 个 64 位 FIFO 分别供接收和发送使用。 S3C2440A 的 UART 具有以下可配置的参数项目:可编程的波特率,红外收/发 模 式,l 或 2 个停止位,5 位、6 位、7 位或 8 位数据宽度和奇偶校验位。 每个UART模块包含以下几个部件:波特率发生器,发送器,接收器和控制单元。 波特率发生器可以以PCLK、FCLK或UEXTCLK作为时钟源。发送器和接收器包含64字 节 的FIFO和移位寄存器。要被发送的数据,首先被写入FIFO,然后被拷贝到发送移位 寄存器中,最后从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从数 据接收端口(RxDn)依次被移位输入到移位寄存器,然后被拷贝到FIFO中。 本实例介绍如何进行串口工作参数的配置和控制数据的收发。 3.2 UART 操作 以下将介绍 UART 的操作,包括数据发送、数据接收、中断发生、波特率发生、回送模 式以及自动流控制等内容。 3.2.1 数据发送 数据发送的帧格式是可编程的。它包含一个起始位、5 到 8 个数据位、一个可选的 奇偶位和 1 到 2 个停止位,这些都可以通过线控制寄存器(ULCONn)来设置。发送器也能 够产生发送中止条件。中止条件迫使串口输出保持在逻辑 0 状态,这种状态保持超过一 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 135 页 共 188 页 上海双实科技有限公司 个传输帧的时间长度。通常在一帧传输数据完整地传输完之后,再通过这个全 0 状态将 中止信号发送给对方。中止信号发送之后,传送数据将持续地放入到输出 FIFO 中(在不 使用 FIFO 模式下,将被放到输出保持寄存器)。 3.2.2 数据接收 与发送一样,接收的数据帧格式同样是可编程的。它包括了一个起始位、5到8个数据位、 一个可选的奇偶校验位和l到2个停止位,这些都可以通过线控制寄存器(ULCONn)来设置。接 收器还可以检测到溢出错误、奇偶校验错误、帧错误和中止状况,每种情况下都会将一个错 误标志置位。检测到的各种错误的描述如下。 ●溢出错误表示新的数据已经覆盖了旧的数据,因为旧的数据没有及时被读入。 ●奇偶校验错误表示接收器检测到了意料之外的奇偶校验结果。 ●帧错误表示接收到的数据没有有效的停止位。 ●中止状况表示RxDn的输入被保持为0状态的时间超过了一个帧传输的时间。 ●在FIFO模式下,接收FIFO不应为空,但当接收器在3个字时间内都没有接收到任何数 据时,就认为发生了接收超时状况。 3.2.3 自动流控制(AFC) S3C2440A的UART0和UART1通过nRTS和nCTS信号支持自动流控制,在这种情况下必须是 UART与UART连接。如果用户将UART连接到调制解调器,就应该在UMCONn寄存器中禁止自动流 控制位,并通过软件控制nRTS。在AFC中,nRTS由接收器的接收情况来控制,nCTS则控制了 发送器的工作。UART发送器在nCTS信号被置1的时候发送FIFO中的数据(在AFC中,nCTS意味 着对方UART的FIFO已经准备好接收数据)。在UART接收数据时,如果它的接收FIFO中还有多 于2个字节的空余空间就必须将nRTS置l,以便告诉对方“接收准备好”;当接收FIFO的剩余 空间少于l字节时,必须将nRTS清0,说明“不能再接收”。AFC接口如图1所示。 图1 UART AFC接口 3.2.4 非自动流控制(通过软件控制nRTS和nCTS) 接收操作其步骤如下: ① 选择接收模式(中断或DMA模式)。 ② 检查UFSTATn寄存器中接收FIFO计数器的值。如果值小于32,用户必须设置UMCONn 第0位的值为1(即激活nRTS);如果它等于或大于32,用户必须设置该位值为0(即失活nRTS)。 ③ 重复第②步。 发送操作其步骤如下: ① 选择发送模式(中断或DMA模式)。 ② 检查UMSTATn第0位的值,如果为1(nCTS被激活),用户就可以写数据到输出缓冲区或 输出FIFO寄存器中。 3.2.5 调制解调器接口 如果用户要连接到调制解调器接口,就需要用nRTS,nCTS,nDSR,nDTR,DCD和nRI信号。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 136 页 共 188 页 上海双实科技有限公司 在这种情况下,用户可以通过使用其他I/O口来由软件控制这些信号,因为AFC是不支持 RS-232C接口的。 3.2.6 中断/DMA请求产生器 S3C2440A的每个UART都有7个状态信号:接收FIFO/缓冲区数据准备好、发送FIFO/缓 冲区空、发送移位寄存器空、溢出错误、奇偶校验错误、帧错误和中止,所有这些状态都由 对应的UART状态寄存器(UTRSTATn/UERSTATn)中的相应位来表现。 当接收器要将接收移位寄存器的数据送到接收FIFO,它会激活接收FIFO满状态信号,如 果控制寄存器中的接收模式选为中断模式,就会引发接收中断。 当发送器从发送FIFO中取出数据送到发送移位寄存器,那么FIFO空状态信号将会被激 活。如果控制寄存器中的发送模式选为中断模式,就会引发发送中断。 如果接收/发送模式被选为DMA模式,“接收FIFO满”和“发送FIFO空”状态信号同样 可以产生DMA请求信号。 溢出错误、奇偶校验错误、帧错误和中止状况都被认为是接收错误状态,如果UCONn中 的“接收错误状态中断使能位”被置位,它们中的每一个都能够引发接收错误中断请求。当 “接收错误状态中断请求”被检测到,引发请求的信号可以通过读取UERSTATn来识别。 3.2.7 UART错误状态FIFO 除了接收FIFO寄存器之外,UART还具有一个状态FIFO。状态FIFO中表示了在FIF0寄存器 中,哪一个数据被毫无错误地接收。 假设UART的FIFO连续接收到A,B,C,D,E字符,并且在接收B字符时发生了帧错误(即 该字符没有停止位),在接收D字符时发生了奇偶校验错误。 虽然UART错误发生了,但错误中断不会产生,因为含有错误的字符还没有被CPU读取。 只有当字符被读出时错误中断才会发生。接收字符的示例过程如图2所示。 图2 UART错误状态FIFO 3.2.8 波特率发生器 每个UART的波特率发生器为传输提供了串行移位时钟。波特率发生器的时钟源可以通过 S3C2440A的串口时钟源来选择。波特率时钟由通过时钟源的16分频及一个由UART波特率除数 寄存器(UBRDIVn)指定的16位除数决定。UBRDIVn的值可以按照下式确定为 UBRDIVn=(取整)(MCLK/ (波特率×16))-1 除数的范围为1到(2^16-1)。例如,如果波特率为115 200 bps,且系统主频(MCLK)为64 MHz, 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 137 页 共 188 页 上海双实科技有限公司 则UBRDIVn的值为 UBRDIVn=(取整)(64 000 000/(115 200×16))一l=35-1=34 3.2.9 回送模式 S3C2440A的UART提供了一个测试模式,即回送模式。在这种模式下,发送出的数据会立 即被接收。这一特性用于校验运行处理器内部发送和接收通道的功能。这种模式可以通过设 置UART控制寄存器(UCONn)中的回送位来实现。 3.2.10 红外通信模式 S3C44BOX的UART模块支持红外线(IR)发送和接收。可以通过设置UART控制寄存器 (ULCONn)中的红外模式位来选择这一模式。 在IR发送模式下,发送阶段是通过正常串行发送占空比3/16的脉冲波进行调制(当传送 的数据位为0值);在IR接收模式下,接收必须通过检测3/16脉冲波来识别0值。 3.3 UART 寄存器 寄存器名称中的n表示0、1或2,例如ULCONn对应串口0为ULCON0,对应串口1位ULCON1。 3.3.1 UART线控制寄存器 前面几次提到了线控制寄存器,它的作用是用来规定传输帧的格式。下面就来看看线控 制寄存器的位定义,如表1所示。 ULCONn Bit Reserved [7] Infrared [6] Mode Description Initial State 0 Determine whether or not to use the Infrared 0 mode. 0 = Normal mode operation 1 = Infrared Tx/Rx mode Parity [5:3] Mode Specify the type of parity generation and 000 checking during UART transmit and receive operation. 0xx = No parity 100 = Odd parity 101 = Even parity 110 = Parity forced/checked as 1 111 = Parity forced/checked as 0 Number of [2] Stop Bit Specify how many stop bits are to be used for 0 end-of-frame signal. 0=Onestopbit per frame 1=Twostopbit per frame Word Length [1:0] Indicate the number of data bits to be 00 transmitted or received per frame. 00 = 5-bits 01 = 6-bits 10 = 7-bits 11 = 8-bits 表1 线控制寄存器位定义 3.3.2 UART控制寄存器 S3C2440A的UART控制寄存器比较复杂,详细的位定义情况请查看S3C2440A的数据手册。 3.3.3 其他控制寄存器 S3C2440A的其他控制寄存器还有FIFO控制寄存器,Modem控制寄存器,发送/接收状态寄 存器,错误状态寄存器,FIFO状态寄存器,Modem状态寄存器,UART发送/接收保持(缓冲区) 寄存器,波特率除数寄存器等,有兴趣的读者可直接参照数据手册,这里就不一一描述了。 4. 实验步骤 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 138 页 共 188 页 上海双实科技有限公司 SinoSys-EA2440a 只 从 S3C2440A 上 引 出 了 串 口 0 作 为 串 行 接 口 , 本 实 验 将 串 口 0 的发送和接收设定为中断模式,当串口 0 在进行数据的发送和接收时,触发 相应的发送和接收的中断服务程序来实现这一过程。 步 骤 1: 电 路 连 接 和 I/O 口 设 置 在 SinoSys-EA2440a 实 验 平 台 中 ,将 串 口 0 的 TXD0、RXD0、nRTS0 及 nCTS0 通 过 RS232 电 平 转 换 芯 片 MAX3232 和 DB9 串 行 接 口 相 连 ,具 体 连 接 方 法 见 图 3,也 可 参照随机光盘中的电路原理图。 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 “\SourceCode\Interface \UART_test”的工程文件 UART_test.mcp,打开 2440lib.c 文件。 在 Port_Init 子函数中对 GPH 中的四个 IO 口进行设置。 //*** PORT H GROUP //Ports : GPH10 GPH9 GPH8 GPH7 GPH6 GPH5 GPH4 GPH3 GPH2 GPH1 GPH0 //Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0 //Binary : 10 , 10 10 , 11 11 , 10 10 , 10 10 , 10 10 rGPHCON = 0x2afaaa; rGPHUP = 0x7ff; // The pull up function is disabled GPH[10:0] 图 3 串口电路连接图 步骤 2:UART 初始化 本实验中对于串口的使用分为两个部分,首先进行基本的初始化,主要针对波特率,数 据帧格式等进行设置。 在主函数中调用 Uart_Init 对串口进行初始化。Uart_Init 函数在 2440lib.c 文件中。 rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits rUCON0 = 0x245; // Control register rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); //Baud rate divisior register 0 此时的初始化只是为了往 PC 的串口端输出程序运行信息。 此后在主函数中调用 Test_Uart0_Int()子函数实现本实验的中断串口发送和接收的功 能,在 Uart0.c 文件中的 Test_Uart0_Int()子函数中将调用 Uart_Port_Set 子函数对串口 进行重新设置,并保存当前的串口设定值。 //Push UART GPIO port configuration save_rGPHCON=rGPHCON; 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 139 页 共 188 页 上海双实科技有限公司 save_rGPHDAT=rGPHDAT; save_rGPHUP=rGPHUP; //Configure UART port rGPHCON&=0x3c0000; rGPHCON|=0x2aaaa; // enable all uart channel rGPHUP|=0x1ff; //Uart port pull-up disable rGPGCON|=(0xf<<18); // nRTS1, nCTS1 rGPGUP|=(0x3<<9); //rINTSUBMSK=0x7ff; //SUBINT ALL MASK //Push Uart control registers save_ULCON0=rULCON0; save_UCON0=rUCON0; save_UFCON0=rUFCON0; save_UMCON0=rUMCON0; save_ULCON1=rULCON1; save_UCON1 =rUCON1; save_UFCON1=rUFCON1; save_UMCON1=rUMCON1; save_ULCON2=rULCON2; save_UCON2 =rUCON2; save_UFCON2=rUFCON2; save_UMCON2=rUMCON2; save_UBRDIV0=rUBRDIV0; save_UBRDIV1=rUBRDIV1; save_UBRDIV2=rUBRDIV2; 步骤 3:串口 0 发送中断测试 在串口 0 发送中断测试中,对串口 0 的 rULCON0 和 rUCON0 寄存器进行了重新的设置, 并指定发送中断服务程序的入口地址,等待 FIFO 空状态信号激活来触发中断。 /*********** UART0 Tx test with interrupt ***********/ isTxInt=1; uart0TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890->UART0 Tx interrupt test is good!!!!\r\n"; Uart_Printf("[Uart channel 0 Tx Interrupt Test]\n"); pISR_UART0=(unsigned)Uart0_TxInt; rULCON0=(0<<6)|(0<<3)|(0<<2)|(3);// Normal,No parity,One stop bit, 8bit rUCON0 |= (TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1); Uart_TxEmpty(0); //wait until tx buffer is empty. rINTMSK=~(BIT_UART0); rINTSUBMSK=~(BIT_SUB_TXD0); while(isTxInt); 步骤 4:串口 0 接收中断测试 在串口 0 接收中断测试中,对串口 0 的 rULCON0 和 rUCON0 寄存器进行了重新的设置, 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 140 页 共 188 页 上海双实科技有限公司 并指定接收中断服务程序的入口地址,等待 FIFO 满状态信号激活来触发中断。 /*********** UART0 Rx test with interrupt ***********/ isRxInt=1; uart0RxStr=(char *)UARTBUFFER; Uart_Printf("\n[Uart channel 0 Rx Interrupt Test]:\n"); Uart_Printf("After typing characters and ENTER key you will see the characters which was typed by you."); Uart_Printf("\nTo quit, press ENTER key.!!!\n"); Uart_TxEmpty(0); //wait until tx buffer is empty. pISR_UART0 =(unsigned)Uart0_RxIntOrErr; rULCON0=(0<<6)|(0<<3)|(0<<2)|(3);// Normal,No parity,One stop bit,8bit rUCON0 |= (TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(1<<6)|(0<<5)|(0<<4)|(1<<2)|(1); // Clear Int Pending and Unmask ClearPending(BIT_UART0); rINTMSK=~(BIT_UART0); rSUBSRCPND=(BIT_SUB_TXD0|BIT_SUB_RXD0|BIT_SUB_ERR0); rINTSUBMSK=~(BIT_SUB_RXD0|BIT_SUB_ERR0); while(isRxInt); rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_ERR0); rINTMSK|=(BIT_UART0); Uart_Printf("%s\n",(char *)UARTBUFFER); 测试程序的最后通过调用 Uart_Port_Return()恢复默认的串口参数设置情况。 步骤 5:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\UART_test\ UART_test_Data\DebugRel”下,可以看到 UART_test.bin 可执行文件。 步骤 6:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 7:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 3 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 141 页 共 188 页 上海双实科技有限公司 图 4 串口编程实验的运行结果 从运行结果中可以看出,程序首先进行发送中断实验,成功地将一个字符串发到 DNW 串口终端工具上。 接着进行串口接收中断实验,要求读者从 DNW 终端输入一个字符串,并以回车键结束, 程序将触发接收终端服务程序接收这一字符串,在恢复串口默认设置之后,再次向终端工具 输出这一字符串。 5. 实验思考 5.1 在何种情况下不能使用 AFC?在非自动流控制时该如何进行控制? 5.2 修改程序,使串口 0 工作于 DMA 模式完成数据的传输。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 142 页 共 188 页 上海双实科技有限公司 实验 20 I2C 接口编程 1. 实验目的 2 z 了解 ARM 处理器 I C 接口的处理机制 2 z 掌握在 S3C2440A 平台下进行 I C 接口应用编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 2 I C 是一种双向两线制的串行总线,由于它支持任何一种 IC 制造工艺,且能够提升硬件 2 2 的效率和简化电路的设计,因此众多厂商都提供了 I C 兼容芯片。S3C2440A 内部也具有 I C 2 总线接口模块,这使得它能够轻松地与其他支持 I C 的功能芯片接口,从而增强自身的接口 和功能扩展能力。 2 在 I C 总线上,只需要两条线——串行数据 SDA 线和串行时钟 SCL 线,它们用于总线上 器件之间的信息传递。每个器件都有一个惟一的地址以供识别,而且各器件都可以作为一个 2 发送器或接收器(由器件的功能决定)。例如,I C 接口的 LCD 驱动器是一个接收器,而存储 器则既可以接收又可以发送数据。发送器或接收器可以作为主器件(Master)或从器件 (S1ave)工作,主器件是用于初始化总线的数据传输并产生允许传输时钟信号的器件;而从 2 器件则被主器件寻址,并被动地发送或接收数据。I C 是一个多主总线,即它可以由多个与 总线连接的主模式器件控制。 2 2 本实例简要介绍 I C 总线的工作原理,最后通过实例介绍如何利用 S3C2440A 具备的 I C 2 接口来操作 I C 从器件。 2 3.2 I C 总线通用传输格式 2 下面来了解 I C 总线数据传输的信号特征和格式。 3.2.1 起始条件和停止条件 如图1所示,起始条件发生在SCL信号为高时,SDA产生一个由高变低的电平变化处。 2 起始条件由主器件产生,作用是启动与某个从器件之间的一次数据传输。当I C总线上产 生了一个起始条件,那么这条总线就被发出起始条件的主器件占用了,变成“忙”状态。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 143 页 共 188 页 上海双实科技有限公司 图1 起始条件和停止条件 停止条件发生在SCL信号为高时,SDA产生一个由低变高的电平变化处。停止条件也 2 由主器件产生,作用是停止与某个从器件之间的数据传输。当I C总线上产生了一个停止 条件,那么在几个时钟周期之后总线就被释放,变成“闲”状态。 当主器件送出一个起始条件,它还会立即送出一个从地址,来通知将与它进行数据 通讯的从器件。1个字节的地址包括7位的地址信息和l位的传输方向指示位。如果第7位 为0,表示马上要进行一个写操作;如果为l,表示马上要进行一个读操作。 3.2.2 数据传输格式 SDA线上传输的每个字节长度都是8位,每次传输中字节的数量是没有限制的。在起始条 件后面的第一个字节是地址域;之后,每个传输的字节后面都有一个应答(ACK)位。传输中 串行数据的MSB(字节的高位)首先发送。图2是主、从器件之间读/写传输下的数据格式。 图2 读写传输下的数据格式 3.2.3 应答信号 为了完成1个字节的传输操作,接收器应该在接收完1个字节之后发送ACK位到发送器, 告诉发送器,已经收到了这个字节。ACK脉冲信号在SCL线上第9个时钟处发出(前面8个时钟 完成1个字节的数据传输,SCL上的时钟都是由主器件产生的)。当发送器要接收ACK脉冲时, 应该释放SDA信号线,也就是将SDA置高。接收器在接收完前面8位数据后,将SDA拉低。发送 器探测到SDA为低,就认为接收器成功接收了前面的8位数据。ACK位的时序如图3所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 144 页 共 188 页 上海双实科技有限公司 图3 ACK位的时序图 2 3.3 S3C2440A 的 I C 接口 2 S3C2440A处理器支持多主模式的I C总线串行接口。S3C2440A采用专门的串行数据线 (SDA)和串行时钟线(SCL),与总线上的其他外设传输信息。 S3C2440A支持的操作模式如下。 ●主设备发送模式。 ●主设备接收模式。 ●从设备发送模式。 ●从设备接收模式。 3.3.1 读写操作 2 2 在发送模式下(即写操作),数据被发送之后,I C总线接口会等待直到IICDS(I C数据移 位寄存器)被程序写入新的数据。在新的数据被写入之前,SCL线都被拉低。新的数据写入之 后,SCL线被释放。S3C2440A利用中断来判别当前数据字节是否已经完全送出。CPU接收到中 断请求后,在中断处理程序中将下一个新的数据写入IICDS中,如此循环。 2 在接收模式下(即读操作),数据被接收到后,I C总线接口将等待直到IICDS寄存器被程 序读出。在数据被读出之前,SCL线保持低电平。新的数据被读出之后,SCL线才被释放。 S3C2440A也利用中断来判别是否接收到了新的数据。CPU收到中断请求之后,处理程序将从 IICDS中读取数据。 2 3.3.2 配置I C总线 2 要控制串行时钟SCL的频率,可以通过IICCON寄存器中的4位预分频值来设置。另外,I C 2 2 总线接口地址通过I C总线地址寄存器IICADD来配置(缺省状态下,I C总线接口地址是一个未 知值)。 3.3.3 各种模式下的操作流程 四种模式下的操作流程见图4-图7。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 145 页 共 188 页 上海双实科技有限公司 图4 主模式下发送数据流程 图5 主模式下接受数据流程 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 146 页 共 188 页 上海双实科技有限公司 图6 从模式下发送数据流程 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 147 页 共 188 页 上海双实科技有限公司 图7 从模式下接受数据流程 2 3.3.4 I C总线接口专用寄存器 2 2 2 I C总线接口专用寄存器主要包括多主I C总线控制寄存器(IICCON)、I C状态寄存器 2 2 (IICSTAT)、I C总线地址寄存器(IICADD)、I C总线发送/接收数据移位寄存器(IICDS)等, 各个寄存器具体的位定义情况参照S3C2440A的产品手册。 4. 实验步骤 步 骤 1: 硬 件 连 接 2 2 由 于 I C 总线比较简单,因此 I C 间设备的连接也比较简单。SinoSys-EA2440a 实验系 2 2 统将 S3C2440A 的 I C 接口和 I C 串行 EEPROM 器件相连,具体连接情况参照图 8。完整的电 路连接情况参照随机关盘里的电路原理图。 图8 2 I C 接口硬件连接图 2 步骤 2:I/O 端口 I C 功能设置 由 于 I/O 口 的 复 用 功 能 , 因 此 需 要 设 置 S3C2440A 的 I/O 控制寄存器。 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 “\SourceCode\Interface\IIC_test”的工程文件 IIC_test.mcp 工程文件。 在程序中调用 Test_Iic()函数,其中就有对 PE 的两个端口的功能设置,读者可以参考 光盘提供的源码程序。 save_E = rGPECON; //首先备份 save_PE = rGPEUP; rGPEUP |= 0xc000; //Pull-up disable rGPECON |= 0xa00000; //GPE15:IICSDA , GPE14:IICSCL 步骤 3:中断使能 由于采用中断方式来检测每个字节的传输,因此需要定义中断处理程序入口,并且使能 中断。采用以下程序语句实现。 pISR_IIC = (unsigned)IicInt; rINTMSK &= ~(BIT_IIC); 2 步骤 4:初始化 I C 接口 对 IICCON 等寄存器进行设置的语句如下: //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16 // If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf); rIICADD = 0x10; //2440 slave address = [7:1] 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 148 页 共 188 页 上海双实科技有限公司 rIICSTAT = 0x10; //IIC bus data output enable(Rx/Tx) rIICLC = (1<<2)|(1); // Filter enable, 15 clocks SDA output delay added by junon 步骤 5:写入数据子程序 写入数据子程序如下: _iicMode = WRDATA; _iicPt = 0; _iicData[0] = (U8)addr; _iicData[1] = data; _iicDataCount = 2; rIICDS = slvAddr; //0xa0 rIICSTAT = 0xf0; //MasTx,Start //Clearing the pending bit isn't needed because the pending bit has been cleared. while(_iicDataCount!=-1); _iicMode = POLLACK; while(1) { rIICDS = slvAddr; _iicStatus = 0x100; rIICSTAT = 0xf0; //MasTx,Start rIICCON = 0xaf; //Resumes IIC operation. while(_iicStatus==0x100); if(!(_iicStatus&0x1)) { break; //When ACK is received } } rIICSTAT = 0xd0; //Stop MasTx condition rIICCON = 0xaf; //Resumes IIC operation. Delay(1); //Wait until stop condtion is in effect. //Write is completed. 步骤 6:读出数据子程序 读出数据子程序如下: _iicMode = SETRDADDR; _iicPt = 0; _iicData[0] = (U8)addr; _iicDataCount = 1; rIICDS = slvAddr; rIICSTAT = 0xf0; //MasTx,Start //Clearing the pending bit isn't needed because the pending bit has been cleared. while(_iicDataCount!=-1); _iicMode = RDDATA; _iicPt = 0; _iicDataCount = 1; 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 149 页 共 188 页 上海双实科技有限公司 rIICDS = slvAddr; rIICSTAT = 0xb0; //MasRx,Start rIICCON = 0xaf; //Resumes IIC operation. while(_iicDataCount!=-1); *data = _iicData[1]; 步骤 7:中断处理子程序 U32 iicSt,i; rSRCPND = BIT_IIC; //Clear pending bit rINTPND = BIT_IIC; iicSt = rIICSTAT; if(iicSt & 0x8){} //When bus arbitration is failed. if(iicSt & 0x4){} //When a slave address is matched with IICADD if(iicSt & 0x2){} //When a slave address is 0000000b if(iicSt & 0x1){} //When ACK isn't received switch(_iicMode) { case POLLACK: _iicStatus = iicSt; break; case RDDATA: if((_iicDataCount--)==0) { _iicData[_iicPt++] = rIICDS; rIICSTAT = 0x90; //Stop MasRx condition rIICCON = 0xaf; //Resumes IIC operation. Delay(1); //Wait until stop condtion is in effect. //Too long time... //The pending bit will not be set after issuing stop condition. break; } _iicData[_iicPt++] = rIICDS; //The last data has to be read with no ack. if((_iicDataCount)==0) rIICCON = 0x2f; //Resumes IIC operation with NOACK. else rIICCON = 0xaf; //Resumes IIC operation with ACK break; case WRDATA: if((_iicDataCount--)==0) { rIICSTAT = 0xd0; //Stop MasTx condition rIICCON = 0xaf; //Resumes IIC operation. Delay(1); //Wait until stop condtion is in effect. 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 150 页 共 188 页 上海双实科技有限公司 //The pending bit will not be set after issuing stop condition. break; } rIICDS = _iicData[_iicPt++]; //_iicData[0] has dummy. for(i=0;i<10;i++); //for setup time until rising edge of IICSCL rIICCON = 0xaf; //resumes IIC operation. break; case SETRDADDR: if((_iicDataCount--)==0) break; //IIC operation is stopped because of IICCON[4] rIICDS = _iicData[_iicPt++]; for(i=0;i<10;i++); //For setup time until rising edge of IICSCL rIICCON = 0xaf; //Resumes IIC operation. break; default: break; } 步骤 8:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\IIC_test\ IIC_test_Data\DebugRel”下,可以看到 IIC_test.bin 可执行文件。 步骤 9:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 10:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 9 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 151 页 共 188 页 上海双实科技有限公司 图 9 IIC 编程实验的运行结果 5. 实验思考 5.1 简述在主和从两种模式下进行数据传输的异同。 5.2 修改程序,将 IIC 工作于非中断方式。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 152 页 共 188 页 上海双实科技有限公司 实验 21 RS-485 通讯实验 1. 实验目的 z 了解 RS-485 的工作机制 z 掌握在 S3C2440A 平台下进行 RS-485 应用编程 2. 实验设备 z 硬件:两台 SinoSys-EA2440a 实验平台,PC 机,两根长导线 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 智能仪表是随着80年代初单片机技术的成熟而发展起来的,现在世界仪表市场基本被智 能仪表所垄断。究其原因就是企业信息化的需要,企业在仪表选型时其中的一个必要条件就 是要具有联网通信接口。最初是数据模拟信号输出简单过程量,后来仪表接口是RS232接口, 这种接口可以实现点对点的通信方式,但这种方式不能实现联网功能。随后出现的RS485解 决了这个问题。下面我们就简单介绍一下RS485。 3.2 RS485 接口 RS485采用差分信号负逻辑,+2V~+6V表示“0”,- 6V~- 2V表示“1”。RS485有两线 制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两 线制接线方式,这种接线方式为总线式拓朴结构在同一总线上最多可以挂接32个结点。在 RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接 RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。而忽略了 信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,这有二 个原因:(1)共模干扰问题: RS-485接口采用差分方式传输信号方式,并不需要相对于某个 参照点来检测信号,系统只需检测两线之间的电位差就可以了。但人们往往忽视了收发器有 一定的共模电压范围,RS-485收发器共模电压范围为-7~+12V,只有满足上述条件,整个 网络才能正常工作。当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损 坏接口。(2)EMI问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低 阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向 外辐射电磁波。 由于PC机默认的只带有RS232接口,有两种方法可以得到PC上位机的RS485电路:(1) 通过RS232/RS485转换电路将PC机串口RS232信号转换成RS485信号,对于情况比较复杂的 工业环境最好是选用防浪涌带隔离珊的产品。(2)通过PCI多串口卡,可以直接选用输出 信号为RS485类型的扩展卡。 3.3 RS485 电缆 在一般场合采用普通的双绞线就可以,在要求比较高的环境下可以采用带屏蔽层的同轴 电缆。在使用RS485接口时,对于特定的传输线路,从RS485接口到负载其数据信号传输所 允许的最大电缆长度与信号传输的波特率成反比,这个长度数据主要是受信号失真及噪声等 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 153 页 共 188 页 上海双实科技有限公司 影响所影响。理论上RS485的最长传输距离能达到1200米,但在实际应用中传输的距离要比 1200米短,具体能传输多远视周围环境而定。在传输过程中可以采用增加中继的方法对信号 进行放大,最多可以加八个中继,也就是说理论上RS485的最大传输距离可以达到9.6公理。 如果真需要长距离传输,可以采用光纤为传播介质,收发两端各加一个光电转换器,多模光 纤的传输距离是5~10公里,而采用单模光纤可达50公里的传播距离。 3.4 RS485 布网 网络拓扑一般采用终端匹配的总线型结构,不支持环形或星形网络。在构建网络时, 应注意如下几点: (1)采用一条双绞线电缆作总线,将各个节点串接起来,从总线到每个节点的引出线长度 应尽量短,以便使引出线中的反射信号对总线信号的影响最低。有些网络连接尽管不正确, 在短距离、低速率仍可能正常工作,但随着通信距离的延长或通信速率的提高,其不良影响 会越来越严重,主要原因是信号在各支路末端反射后与原信号叠加,会造成信号质量下降。 (2)应注意总线特性阻抗的连续性,在阻抗不连续点就会发生信号的反射。下列几种情况 易产生这种不连续性:总线的不同区段采用了不同电缆,或某一段总线上有过多收发器紧靠 在一起安装,再者是过长的分支线引出到总线。 总之,应该提供一条单一、连续的信号通道作为总线。 在RS485组网过程中另一个需要主意的问题是终端负载电阻问题,在设备少距离短的情况下 不加终端负载电阻整个网络能很好的工作但随着距离的增加性能将降低。理论上,在每个接 收数据信号的中点进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹 配。但这在实际上难以掌握,美国MAXIM公司有篇文章提到一条经验性的原则可以用来判断 在什么样的数据速率和电缆长度时需要进行匹配:当信号的转换时间(上升或下降时间)超 过电信号沿总线单向传输所需时间的3倍以上时就可以不加匹配。 一般终端匹配采用终端电阻方法, RS-485应在总线电缆的开始和末端都并接终端电阻。 终接电阻在RS-485网络中取120Ω。相当于电缆特性阻抗的电阻,因为大多数双绞线电缆特 性阻抗大约在100~120Ω。这种匹配方法简单有效,但有一个缺点,匹配电阻要消耗较大功 率,对于功耗限制比较严格的系统不太适合。另外一种比较省电的匹配方式是RC匹配。利用 一只电容C隔断直流成分可以节省大部分功率。但电容C的取值是个难点,需要在功耗和匹配 质量间进行折衷。 还有一种采用二极管的匹配方法,这种方案虽未实现真正的“匹配”, 但它利用二极管的钳位作用能迅速削弱反射信号,达到改善信号质量的目的,节能效果显著。 4. 实验步骤 步 骤 1: 硬 件 连 线 首先将SinoSys-EA2440a开发板上跳线JP1中:两排插针最下方的两个插针分别用短路帽 短接,以实现485的电路的连接:电路图中如图1那样的效果。 图1 跳线情况 SinoSys-EA2440a开发板上使用MAX485芯片实现485电平的转换。具体的连线情况见图2。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 154 页 共 188 页 上海双实科技有限公司 图2 485转换电路连接图 通过S3C2440A的GPB5控制数据的流向,通过串口2的TXD1和RXD1来和485转换芯片的RO 和DI相连。 两台EA2440a之间的485接口CN5通过两根导线相连,注意相连时两跟导线不要交叉。 步骤 2: 发送程序寄存器设置 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 \ “\SourceCode\Interface\485send_test”的工程文件 485send_test.mcp 工程文件。 在 RS485bus.c 的 RS485_Init 子函数中对 485 相关的寄存器进行设置和初始化。 int i; //=== PORT H GROUP //Ports : GPH5 GPH4 // Rxd1 Txd1 // 10 10 rGPHCON = 0x2aaaaa; rGPHUP = 0x7ff; // The pull up function is disabled GPH[10:0] rGPBCON = 0x044555; //设置 GPB5 口作为输出功能,用于 485 输入/输出功能的控 制 rGPBUP = 0x7ff; // The pull up function is disabled GPB[10:0] //初始状态设置 GPB5 口为低电平,保证 485 在输入状态下工作 rGPBDAT = (rGPBDAT & (~0x020)); if(pclk == 0) pclk = PCLK; rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable rUMCON1 = 0x0; //UART chaneel 1 MODEM control register, AFC disable //UART1 rULCON1 = 0x3; rUCON1 = 0x245; rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 ); RS485_TxEmpty(1); for(i=0;i<100;i++); 步骤 3:485 发送程序 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 155 页 共 188 页 上海双实科技有限公司 在对 485 相关寄存器进行设置初始化之后,调用 RS485_SendF 函数发送数据。 while( Uart_GetKey() != ESC_KEY )// { for(i=0; i<8; i++) { RS485framearray[i] = i;//组织发送测试数据 } RS485_SendF(100);//发送数据 } RS485_SendF 程序如下: unsigned char tmp; rGPBDAT = (rGPBDAT | 0x020); for(tmp = 0;tmp < 8;tmp ++) { RS485_Send(RS485framearray[tmp]); Delay(delay); } rGPBDAT = (rGPBDAT & (~0x020));//发送数据包结束,拉低 GPB5 使 485 在接收状态 步骤 4:接收程序寄存器设置 接收程序的初始化设置同发送程序相同。 利用 ADS1.2 工具(ADS 工具的使用请参照前面的实验)打开随机关盘中本实验的工程 文件 485receive_test.mcp 工程文件。 在 RS485bus.c 的 RS485_Init 子函数中对 485 相关的寄存器进行设置和初始化。 步骤 5:485 接收程序 在对 485 相关寄存器进行设置初始化之后,调用 RS485_GetF()函数接收数据。 while( Uart_GetKey() != ESC_KEY ) { if(RS485_GetF())//接收数据 { Rx_data = RS485framearray[0]; Uart_Printf( "%d\n",Rx_data ) ; } else { RS485framearray[0] = 0; Rx_data = 0; } Delay(500); } RS485_GetF()函数代码如下: unsigned char tmp_count = 0; int tmp1; for(tmp_count = 0; tmp_count < 1; tmp_count ++) 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 156 页 共 188 页 上海双实科技有限公司 //测试用,接收 1 个字节。如果使用协议包,自行修改。 { if(!((tmp1 = RS485_Receive())+1)) { return 0; } RS485framearray[tmp_count] = tmp1; } return 1; RS485_Receive()函数代码如下: volatile U16 tmp = 0; while(tmp < 50000)//最大 65535 { if((rUTRSTAT1&0x1)) { return RdURXH1(); } tmp ++; } return -1; 步骤 6:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\485send_test\ 485send_test_Data\DebugRel”下,可以看到 485send_test.bin 可执行 文件。在工程文件夹“\485receive_test\ 485receive_test_Data\DebugRel”下,可以看 到 485receive_test.bin 可执行文件。 步骤 7:建立实验环境 连接好 SinoSys-EA2440a 的电源线,其中一台用附带的串口线将 SinoSys-EA2440a 串口 和开发 PC 机的 COM1 连接好,另一台用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机 的 COM2 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相 连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 8:下载程序运行 打开两个 DNW 软件(DNW 软件的使用可参照“实验 4 DNW 的使用”),将串口设置为 COM1 及 COM2,比特率设置为 115200,USB 下载地址设为 0x30100000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,分别使 用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 3、图 4 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 157 页 共 188 页 上海双实科技有限公司 图 4 485 发送程序的运行结果 图 5 485 接收程序的运行结果 5. 实验思考 5.1 RS485 的工作原理是什么? 5.2 总结 RS485 和 RS232 及 RS422 的异同点。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 158 页 共 188 页 上海双实科技有限公司 实验 22 CAN 总线通讯实验 1. 实验目的 z 了解 CAN 总线的工作机制 z 掌握在 S3C2440A 平台下进行 CAN 总线通讯编程 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:ADS1.2 开发工具,DNW 工具 3. 实验原理 3.1 概述 在计算机数据传输领域内,长期以来使用 RS-232 通信标准,尽管被广泛的使用,但却 是一种低数据率和点对点的数据传输标准,无能力支持更高层次的计算机之间的功能操作。 同时,在复杂或大规模应用中(如工业现场控制或生产自动化领域),需要使用大量的传感 器、执行器和控制器等,它们通常分布在非常广的范围内,所以,在最底层的确需要一种造 价低廉而又能适应工业现场环境的通信系统,现场总线(Field Bus)就是在这种背景下应 运而生的。 现场总线是连接智能现场设备和自动化系统的数字式、双向传输、多分支结构的通信网 络,现场总线技术自上世纪 70 年代诞生至今,由于它在减少系统线缆,简化系统安装、维 护和管理,降低系统的投资和运行成本,增强系统性能等方面的优越性,引起人们的广泛注 意,得到大范围的推广。 CAN 是一种有效支持分布式控制或实时控制的串行通信网络,最初是由德国 BOSCH 公司 为汽车监控、控制系统设计的。由于 CAN 总线本身的特点,其应用范围目前已不再局限于汽 车行业,而向过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械、 传感器及智能仪表等领域发展。 3.2 CAN 总线的技术特点 CAN 总线可有效支持分布式控制或实时控制。该总线的通信介质可以是双绞线、同轴电 缆或光纤,其主要特点如下: • CAN 总线为多主站总线,各节点可在任意时刻向网络上的其他节点发送信息,且不 分主从; • CAN 总线采用独特的非破坏性总线仲裁技术,高优先级节点优先传送数据,故实时 性好; • CAN 总线具有点对点、一点对多点及全局广播传送数据的功能; • CAN 总线采用短帧结构,每帧有效字节数最多为 8 个,数据传输时间短,并有 CRC 及其它校验措施,数据出错率极低; • CAN 总线上某一节点出现严重错误时,可自动脱离总线,而总线上的其他操作不受 影响; 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 159 页 共 188 页 上海双实科技有限公司 • • • CAN 总线系统扩充时,可直接将新节点挂在总线上,因而走线少,系统扩充容易, 改型灵活; CAN 总线的最大传输速率可达 1Mb/s,直接通信距离最远可达到 10km(速率在 5kbps 以下); CAN 总线上的节点数取决于总线驱动电路。在标准帧(11 位报文标识符)时可达到 110 个,而在扩展帧(29 位报文标识符)时,个数不受限。 3.3 CAN的分层结构 CAN的结构实际上是一种简化的网络结构,按ISO/OSI标准模型CAN可分为数据链路层(含 逻辑链路子层LLC、介质访问控制子层MAC)和物理层。 逻辑链路子层(LLC):提供数据传输和远程数据请求服务,确认报文已接收,提供超 载信息及恢复管理;介质访问控制子层(MAC):承担定时特性,每当新的通信开始前,MAC 子层要确定总线是否开放或是否马上开始接收。MAC 层规定了传输规则(控制帧结构、执行 仲裁、错误检测、出错标志及故障界定);物理层则规定了结点的全部电器特性。 数据帧结构(见图2)由7个位场构成:帧起始、仲裁场、控制场、数据场、CRC场、应 答场和帧尾。 在 CAN 总线中存在 5 种错误类型,分别为: 位错误:结点在发送每一位的同时对总线进行监视,每当检测到总线的位数值与发送的 位数值不同时,便在该位的时段内检测到一个位错误; 填充错误:在应用位填充方式编码的报文中,如出现 6 个连续相同的位电子,则判断为 一个填充错误; CRC 错误:接收器与发送器以相同的算法计算 CRC 序列,如结果与接收到的 CRC 序列不 同,则检测到一个 CRC 错误; 格式错误:当固定形式的位场中出现一个或多个非法位时,则检测到一个格式错误; 应答错误:在应答时隙内,如发送器未检测到应答显位,则检测到一个应答错误。 4. 实验步骤 SinoSys-EA2440a 通 过 MCP2510 芯 片 来 实 现 CAN 总 线 的 输 入 和 输 出 。 本 实 验 将 通 过 使 用 S3C2440A 的 通 用 IO 口 来 模 拟 SPI 的 输 出 同 MCP2510 相 连 接 ,通 过 对 MCP2510 寄 存 器 的 配 置 和 操 作 实 现 CAN 总 线 数 据 输 入 输 出 功 能 。 步 骤 1: 电 路 连 接 在 SinoSys-EA2440a 实 验 平 台 中 ,通 过 使 用 S3C2440A 的 通 用 IO 口 来 模 拟 SPI 的 输 出 同 MCP2510 相 连 接 , 具 体 连 接 方 法 见 图 1, 也 可 参 照 随 机 光 盘 中 的 电 路 原 理 图。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 160 页 共 188 页 上海双实科技有限公司 图 1 CAN 总线设备硬件连接图 由于本实验使用回环方式实现 CAN 发送接收数据的验证,因此不需要外部接线。 步骤 2:初始化函数 利 用 ADS1.2 工 具 ( ADS 工 具 的 使 用 请 参 照 前 面 的 实 验 ) 打 开 随 机 关 盘 中 “ \SourceCode\Interface\485send_test\can_test ” 的 工 程 文 件 can_test.mcp , Test_MCP2510 函数中调用 Init_MCP2510(BandRate_10kbps)对 MCP2510 芯片进行设置初始 化。 unsigned char i,j,a; MCP2510_IO_CS_Init() ; MCP2510_Reset(); MCP2510_SetBandRate(bandrate,FALSE); //设置波特率 // Disable interrups. MCP2510_Write(CANINTE, NO_IE); //禁止所有中断 // Mark all filter bits as don't care: MCP2510_Write_Can_ID(RXM0SIDH, 0,0); MCP2510_Write_Can_ID(RXM1SIDH, 0,0); // Anyway, set all filters to 0: MCP2510_Write_Can_ID(RXF0SIDH, 0, 0); MCP2510_Write_Can_ID(RXF1SIDH, 0, 0); MCP2510_Write_Can_ID(RXF2SIDH, 0, 0); MCP2510_Write_Can_ID(RXF3SIDH, 0, 0); MCP2510_Write_Can_ID(RXF4SIDH, 0, 0); MCP2510_Write_Can_ID(RXF5SIDH, 0, 0); MCP2510_Write(CLKCTRL, MODE_LOOPBACK| CLKEN | CLK8);//回环模式 //如果不能用两台设备联机实验的话,可以选择回环模式 //MCP2510_Write(CLKCTRL, MODE_NORMAL| CLKEN | CLK8);//标准模式 // Clear, deactivate the three transmit buffers a = TXB0CTRL; for (i = 0; i < 3; i++) { for (j = 0; j < 14; j++) { 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 161 页 共 188 页 上海双实科技有限公司 MCP2510_Write(a, 0); a++; } a += 2; // We did not clear CANSTAT or CANCTRL } // and the two receive buffers. MCP2510_Write(RXB0CTRL, 0); MCP2510_Write(RXB1CTRL, 0); // The two pins RX0BF and RX1BF are used to control two LEDs; set them as outputs and set them as 00. MCP2510_Write(BFPCTRL, 0x3C); //Open Interrupt MCP2510_Write(CANINTE, RX0IE|RX1IE); 步骤 3:MCP2510 写函数 功能:向地址 address 写入数据 value。实际源码如下: MCP2510_RW_Start() ; Spi_Write(MCP2510INSTR_WRITE); Spi_Write( address ); Spi_Write( value ); MCP2510_CS_H ; 步骤 4:MCP2510 读函数 程序代码如下: unsigned char result; MCP2510_RW_Start() ; Spi_Write(MCP2510INSTR_READ) ; //0x03 Spi_Write( address ) ; result = Spi_Read() ; MCP2510_CS_H ; return result ; 步骤 5:指定地址寄存器修改函数 /**************************************************************************** 【功能说明】修改指定地址寄存器的某些位 ****************************************************************************/ void MCP2510_WriteBits( U8 address, U8 data, U8 mask ) { MCP2510_RW_Start() ; Spi_Write( MCP2510INSTR_BITMDFY ); Spi_Write( address); Spi_Write( mask); Spi_Write( data); MCP2510_CS_H ; } 步骤 6:CAN 通讯主体函数 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 162 页 共 188 页 上海双实科技有限公司 /**************************************************************************** 【功能说明】MCP2510 实验程序 ****************************************************************************/ void Test_MCP2510(void) { int i; U32 id; unsigned char dlc; int rxRTR, isExt; int temp; U8 data_write[8]={1,2,3,4,5,6,7,8}; U8 data_read[8] ; Uart_Printf( "\nCAN BUS Test[ MCP2510 ], press 'ESC' key to exit !\n" ) ; Init_MCP2510(BandRate_10kbps); Can_Setup(); while( Uart_GetKey() != ESC_KEY ) { Can_Write( 0x5a5, data_write, 8, FALSE, FALSE); while( (i=Can_Poll())==-1 ) ; for( temp=0; temp<8; temp++) data_read[temp] = 0 ; temp = Can_Read(i, &id, data_read, &dlc, &rxRTR, &isExt); Uart_Printf( " ID=0x%x\n",id ); Uart_Printf( "Data=%x,%x,%x,%x,%x,%x,%x,%x\n",data_read[0],data_read[1],dat a_read[2],data_read[3],data_read[4],data_read[5],data_read[6],data_read[7] ); Delay(500); } } 步骤 7:编译工程 所有的函数都实现以后,通过 ADS1.2 进行编译,生成可执行文件。在工程文件夹 “\can_test\ can_test_Data\DebugRel”下,可以看到 can_test.bin 可执行文件。 步骤 8:建立实验环境 连接好 SinoSys-EA2440a 的电源线,用附带的串口线将 SinoSys-EA2440a 串口和开发 PC 机的 COM1 连接好,用附带的 USB 线将 SinoSys-EA2440a 的方形 USB 口和开发 PC 机的 USB 口相连。(具体 SinoSys-EA2440a 的使用和连线方法可参照该设备的使用说明书) 步骤 9:下载程序运行 打开 DNW 软件(DNW 软件的使用可参照“实验* DNW 的使用”),将串口设置为 COM1,比 特率设置为 115200,USB 下载地址设为 0x30000000。 将 SinoSys-EA2440a 设置为 Nor-Flash 启动,打开 SinoSys-EA2440a 电源开关,使用 DNW 将前面生成的可执行文件下载到内存中去运行。程序的运行结果如图 2 所示。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 163 页 共 188 页 上海双实科技有限公司 图 2 CAN 通讯实验的运行结果 从运行结果中可以看出,通过 CAN 总线发送出去的数据通过回环模式从接收缓冲器中取 回并回显在终端工具上。 5. 实验思考 5.1 CAN 总线通讯最少需要几根线?如果多个结点该如何连接? 5.2 为什么 CAN 总线的可靠性高,串口速率却可以比串口快? 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 164 页 共 188 页 上海双实科技有限公司 实验 23 GPRS 实验 1. 实验目的 z 了解 GSM/GPRS 原理 z 掌握基本的 AT 命令 z 应用 AT 命令发短信 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:windows2000\XP 3. 实验原理 3.1 GSM 的历史发展 从 20世 纪 20年 代 开 始 移 动 通 信 技 术 得 到 了 发 展 , 20世 纪 40年 代 进 入 了 建 设 公 用 移动通信系 统的阶段。 随着移动通 信的无线传 输、信道管 理及移动交 换等技术 的 发 展成熟,无 绳电话、无 线寻呼、陆 地蜂窝移动 通信、卫星 移动通信等 移动通信 系 统 相继发展起来。 自 20世 纪 80年 代 中 期 以 来 , 蜂 窝 移 动 通 信 从 第 一 代 的 模 拟 蜂 窝 移 动 通 信 系 统 发 展 成 第 二 代 的 数 字 蜂 窝 移 动 通 信 系 统 。 作 为 欧 洲 一 个 数 字 蜂 窝 移 动 通 信 标 准 的 GSM 系统于1991年正式在欧 洲面世,由 于其公开的 规范标准和 诸多优点, 很快就在 全 世 界范围内的 到了广泛的 应用,实现 了世界范围 内移动用户 的联网漫游 。截止2001年 一季度我国移动用户总数已达到1亿户。 3.2 GSM 的基本特点 可以与各种公用通信网互连互通,尤其与ISDN的兼容性,可提供更多的业务,各种接口 规范明确,网络适合未来数字化发展的要求。 GSM组网结构灵活方便,能更有效地使用无线频率,抗干扰性强,通信质量高,能提供 相当好的话音质量。 采用了鉴权、语音加密等技术使用户信息安全性得到保证。在采用GSM系统所有国家范 围内,可提供穿越国界的自动漫游功能。用户终端更小、更轻便、功能更强。 3.3 GSM 的系统功能 GSM是一种提供话音、数据、补充业务等多种服务的系统。 话音业务是GSM系统提供的基本业务,允许用户在世界范围内任何地点能同固定电话用 户、移动电话用户以及专用网用户进行双向通话联系。从电话中派生出的另一项业务是语音 信箱,声音信息被存储,以备收方提取,在呼叫不能接通时,用户可将声音信息存入GSM的 语音信箱;或者用户直接接入语音信箱。 数据业务提供了固定用户和ISDN用户所能享用的大部分业务,包括文字、图象、传真、 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 165 页 共 188 页 上海双实科技有限公司 计算机文件、访问Internet等服务。 补充业务如来电显示、呼叫追踪、短消息业务等。 3.4 GPRS 网络概述 GPRS (General Packet Radio Service)是一种基于包的无线通讯服务。它将使得通讯 速率从56一直上升到114Kbps,并且支持计算机和移动用户的持续连接。较高的数据吞吐能 力使得可以使用手持设备和笔记本电脑进行电视会议和多媒体页面以及类似的应用。GPRS 是基于Global System for Mobile(GSM),并且能完成现有的一些服务,例如:蜂窝电话电 路交换(circuit-switched)连接和短消息服务(SMS)。 在理论上,GPRS包服务的花费将比电路交换服务所花的费用要少。信道是共享使用的, 是需要的时候才有包产生。那么比专用的连接要节省很多资源。它将使得为用户提供应用服 务更加简单。因为以往为了适应终端设备的缓慢速度而增加的缓冲中间件(middleware)已经 没有必要了。一旦GPRS成为现实,移动用户就可以随时访问自己的虚拟专用网络(VPN),而 不是每次都需要拨号上网。 GPRS将完善Bluetooth技术(成为一种标准,代替现有的有线和无线连接技术)。另外对 于Internet协议(IP), GPRS支持X.25(一种基于包的协议,主要在欧洲地区广泛应用)。GPRS 要逐渐迈向高性能数据GSM环境(Enhanced Data GSM Environment,EDGE)和通用移动电话服 务(Universal Mobile Telephone Service,UMTS)。 3.5 早期的 AT 命令 最早生产调制解调器的公司是贺氏,后来组建的厂家制造的调制解调器都与HAYS兼容, 大部分的通信软件使用菜单来对调制解调器进行配置、检测。但是有些通信软件要求用户直 接发命令给调制解调器,在这种情况下必须使用AT命令。 AT命令集是调制解调器通信接口的工业标准,AT命令是调制解调器可以识别并执行的命 令。AT命令简单容易掌握,使用它可以配置调制解调器,配合通信软件工作与远端系统通信 发起或应答一个呼叫。 使用AT命令设置调制解调器时,用户使用的通信软件必须提供一个到调制解调器的直接 连接状态,使你能够从命令行输入所需的AT命令。如在WINDOWS95下的“超级终端”中建立 一个直接到串口的连接便可使用AT命令,也可使用ONLAN/PC软件的终端方式。但是不能在操 作系统下(如:DOS下)直接使用AT命令。 AT命令的基本格式为:AT+命令字符及相关设置参数,例如:ATDT0,2043506 这个命令 表示使用音频拨号方式拨外线电话2043506。AT是前导符,D是命令字符表示拨号,T这个参 数表示用音频拨号。先拨“0”,紧随其后的逗号表示延迟处理下一个字符称为拨号修正符。 (可以通过设置S8寄存器的值定义延迟的时间,默认为2秒。范围为0~65秒)。 3.6 GPS/GPRS AT 命令 GPS/GPRS 的AT命令是对早期调制解调器AT命令的一个扩充,在早其AT命令的基础上加 上对GSM/GPRS业务支持的扩展AT命令集,扩展AT命令集基本格式为“AT+”+命令字符及 相关设置参数。下面例举一些GPS/GPRS的AT命令。 读取波特率 AT+IPR=? 返回: +IPR: (0,19200,38400,57600,115200) 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 166 页 共 188 页 上海双实科技有限公司 读取短信中心号码 AT+CSCA? 返回: +CSCA: "+8613800571500",145 移动 AT+CSCA? 返回: +CSCA: "002B0038003600310033003800300030003500370031003500300030",145 联通 AT+CSCA? +CSCA: "002B0038003600310033003000310030003300360030003500300030",145 读取日期时间 AT+CCLK? 返回:+CCLK: "04/11/01,08:51:55" 读取电话簿容量 AT+CPBR=? 返回:+CPBR: (1-250),20,12 AT+CMGL=? +CMGL: (0-4) 键盘加锁 AT^SLCK="CS",1 键盘解锁 AT^SLCK="CS",0 拨号 ATD75977160 不成功返回NO CARRIER 重播上次号码 ATDL 关机 AT^SMSO 返回:^SMSO: MS OFF 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 167 页 共 188 页 上海双实科技有限公司 读取通讯类型(查询可使用的功能列表) AT+GCAP 返回:+GCAP: +CGSM 读取设备名称 AT+GMI 返回:SIEMENS AT+FMFR? 返回:SIEMENS AT+CGMI 返回“SIEMENS 读取软件名称 AT+GMM 返回:Gipsy Soft Protocolstack AT+FMDL? 返回:Gipsy Soft Protocolstack 读取软件版本 AT+GMR 返回:V2.550 读取序列号(IMEI): AT+GSN 返回:352030000110312 AT+CGSN 返回:352030000110312 ATD*#06# 返回:352030000110312 读取IMSI号码(国际移动电话支持认证) AT+CIMI 返回:460008883116357 读取SIM卡认证号码(西门子增强指令) AT^SCID 返回:^SCID: 89860088880351226357 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 168 页 共 188 页 上海双实科技有限公司 读取设备型号 AT+CGMM 返回:M55C 读取版本号 AT+CGMR 返回:08 挂断拨号 AT+CHUP OK 读取锁定代码 AT+CLCK=? 返回: +CLCK: ("CS","PS","PF","SC","AO","OI","OX","AI","IR","AB","AG","AC","FD","PN","P U","PP","PC") 读取声音音量 AT+CLVL? 返回:+CLVL: 4 读取是否静音 AT+CMUT? 返回:+CMUT: 0 读取操作名称 AT+COPN? 返回:+COPN: "736001","NUEVATEL" +COPN: "744001","HOLA PARAGUAY " +COPN: "33211","Blue Sky" +COPN: "34430","APUA-PCS" +COPN: "37001","ORANGE" +COPN: "52015","TH ACT 1900" +COPN: "54411","Blue Sky AS" +COPN: "70610","ESV PERSONAL" +COPN: "71610","TIM PERU" +COPN: "72234","PERSONAL" +COPN: "73001","ENTEL PCS" +COPN: "73010","ENTEL PCS" +COPN: "73602","EMOVIL" 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 169 页 共 188 页 上海双实科技有限公司 +COPN: "73601","NUEVATEL" +COPN: "74401","HOLA PARAGUAY " 读取手机状态 AT+CPAS 返回:+CPAS: 0 0 待机 3 有电话 4 拨号中 读取电话簿用户 AT+CPBR=1,1 返回: +CPBR: 1,"13023615986",129,"9A6C76F88D4B" AT+CPBR=1,2 返回: +CPBR: 1,"13023615986",129,"9A6C76F88D4B" +CPBR: 2,"057185977160",129,"534E676D516C53F8" 读取电话簿 AT^SPBG=1,10 ^SPBG: 1,"057178977160",129,"534E676D516C53F8" ^SPBG: 2,"13588079783",129,"80E15BA3" ^SPBG: 3,"13758127643",129,"9093521A" ^SPBG: 4,"13023615986",129,"9A6C76F88D4B" 读取电话簿登记条目,2为2条通讯录,250为可以容纳250条记录 AT+CPBS? 返回:+CPBS: "SM",2,250 读取PIN码状态 AT+CPIN? 返回:+CPIN: READY 读取费率设置 AT+CPUC? 返回:+CPUC: "","0" 读取密码设置 AT+CPWD=? 返回: +CPWD: ("PS",8),("PF",8),("SC",8),("AO",4),("OI",4),("OX",4),("AI",4),("IR",4),( 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 170 页 共 188 页 上海双实科技有限公司 "AB",4),("AG",4),("AC",4),("PN",8),("PU",8),("PP",8),("PC",8),("P2",8) 读取网络注册 AT+CREG? 返回:+CREG: 0,1 读取信号强度 AT+CSQ 返回:+CSQ: 26,99 AT+CSQ=? +CSQ: (0-31,99),(0-7,99) 0 -113 dBm or less 1 -111 dBm 2...30 -109... -53 dBm 31 -51 dBm or greater 99 not known or not detectable 读取短信支持格式0,PDU,1,TEXT AT+CMGF? 返回:+CMGF: 0 从首选设备中读取短信 AT+CMGL=1 +CMGL: 2,1,,28 0891683108501705F0040D91683177471549F0000040016251920200098A640F269BC5DA41 +CMGL: 3,1,,28 0891683108501705F0040D91683177471549F0000040016251928300098A640F0683C1DA41 ok 1) text 模式: “REC UNREAD” 未读信息 (默认) “REC READ” 已读信息 “STO UNSENT” 未发送信息 “STO SENT” 已发送信息 “ALL” 所有信息 2) PDU 模式: 0 未读信息 (默认) 1 已读信息 2 未发送信息 3 已发送信息 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 171 页 共 188 页 上海双实科技有限公司 4 全部信息 单条读取短信 AT+CMGR=8 返回:+CMGR: 1,,28 0891683108501705F0040D91683177471549F0000040017290146500098A640F0683C5DA41 发送短信 AT+CMGS=1 编辑短信到存储器 AT+CMGW= 从存储器中发短信 AT+CMSS=? 读取手机短信容量状况,"ME"74为手机中74条 "SM" 为SIM卡 AT+CPMS? 返回:+CPMS: "ME",74,100,"SM",0,50,"SM",0,50 联通 AT+CPMS? +CPMS: "ME",74,100,"SM",18,40,"SM",18,40 读取信息服务,0不支持 1支持 AT+CSMS? 返回:+CSMS: 0,1,1,1 情况已拨号码 AT^SDLD OK 列出已拨号码清单 AT^SCNI 返回: ^SCNI: 1 ^SCNI: 2 ^SCNI: 3 ^SCNI: 4 ^SCNI: 5 ^SCNI: 6 ^SCNI: 7 列表支持网络 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 172 页 共 188 页 上海双实科技有限公司 AT+CSCS=? 返回:+CSCS: ("GSM","UCS2") 读取当前支持网络 AT+CSCS? 返回:+CSCS: "UCS2" 查询错误原因 AT+CEER 返回:+CEER: 0,0 当前网络运营商 46000 移动 AT+CPOL? +CPOL: 1,2,"46000" 移动 46001 联通 OK AT+CPOL=? +CPOL: (1-14),(2) --------------------联通 AT+CPOL=? +CPOL: (1-10),(2) OK AT+CPOL? +CPOL: 1,2,"46001" 当前网络注册情况 AT+CREG=? +CREG: (0-2) OK AT+CREG? +CREG: 0,1 选择当有新的短信来时系统提示方式 AT+CNMI? +CNMI: 0,0,0,0,1 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 173 页 共 188 页 上海双实科技有限公司 OK AT+CNMI=? +CNMI: (0,1),(0,1),(0,2),(0,2),(1) 选择系统广播短信的类型 at+cscb? +CSCB: 0,"","" OK at+cscb=? +CSCB: (0,1) 显示当前呼叫认证 AT+CLIP? +CLIP: 0,1 OK AT+CLIP=? +CLIP: (0,1) 4. 实验步骤 - 、 在 PC 上 测 试 GPRS 步 骤 1: 把 GPRS 模 块 的 串 口 接 到 PC 的 串 口 2 中 , 把 用 说 测 试 的 GSM 卡 插 入 GPRS 模 块 的 GSM 插 槽 内 。 打 开 超 级 终 端 , 新 建 连 接 : 步 骤 2: 然 后 选 择 串 口 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 174 页 共 188 页 上海双实科技有限公司 步 骤 3: 设 定 波 特 率 为 115200,数 据 位 为 8 位 , 无 奇 偶 校 验 , 停 止 位 为 1,无 流 控 , 如下图: 步 骤 3: 在 超 级 终 端 内 输 入 下 面 命 令 学 习 和 测 试 AT 命 1.AT+CSCS? 读取当前支持网络 2.AT+CSQ 读取信号强度 3.ATDT (021)50271068; 拨打电话号码(请找一下电话的手柄插到模快的电话线上) 如下图: 二 、 在 实 验 平 台 上 测 试 GPRS 打 电 话 和 发 短 信 的 功 能 步 骤 1: 把 模 块 的 串 口 通 过 GPS/ GPRS- TTL 转 换 器 接 到 主 板 的 GPRS 接 口 上 ( 9 针 公 的 串 口 插 座 ) , 连 接 好 主 板 的 串 口 线 、 USB 线 、 电 源 线 。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 175 页 共 188 页 上海双实科技有限公司 步 骤 2: 打 开 DNW 和 主 板 电 源 。 把 GPRS 的 bin 文 件 ( gprs.bin) 下 载 到 主 板 上 , 如下图: 步 骤 3: 分 别 选 择 相 应 功 能 进 行 测 试 , 下 面 以 发 送 短 信 为 例 , 选 择 1.然 后 输 入 电 话号码,如下图 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 176 页 共 188 页 上海双实科技有限公司 此 时 在 对 方 的 手 机 中 就 会 收 到 含 有 www.SinoSys.com 的 一 条 短 信 。 步 骤 4: 用 ADS 查 看 这 个 程 序 的 源 代 码 , 深 入 了 解 AT 命 令 及 以 GPRS 模 块 5. 实验思考 5.1 读 懂 代 码 , 然 后 尝 试 修 改 代 码 , 由 用 户 输 入 短 信 的 内 容 5.2 尝 试 输 入 中 文 内 容 , 看 看 是 否 能 正 确 发 送 。 5.3 研 究 短 信 的 PDU 编 码 。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 177 页 共 188 页 上海双实科技有限公司 实验 24 GPS 实验 1. 实验目的 z 了解 GPS 定位原理的原理 z 了解 GPS 输出的 NMEA 格式数据 z 运用 GPS 进行定位 2. 实验设备 z 硬件:SinoSys-EA2440a 实验平台,PC 机 z 软件:windows2000\XP 3. 实验原理 3.1 GPS 介绍 全 球 定 位 系 统 ( NAVSTAR GPS , NAVigation Satellite Timing And Ranging Global Positioning System,以下简称 GPS)原是美国国防部为了军事定时、 定位 与导航的目的所发展,希望以卫星导航为基础的技术可构成主要的无线电导航系 统, 未来并能满足下一个世纪的应用。第一颗 GPS 卫星在 1978 年发射,首十颗卫星 称为 BLOCK I 试验型卫星,从 1989 年到 1993 年所发射的卫星称为 BLOCK II/IIA 量产型 卫星,第二十四颗 BLOCK II/IIA 卫星在 1994 年发射后,GPS 已达到初步操作能 力 (Initial Operational Capability,IOC),24 颗 GPS 卫星提供全世界 24 小 时全 天候的定位与导航信息。美国空军太空司令部于 1995 年 4 月 27 号宣布 GPS 已达 到 完整操作能力(Full Operational Capability),将 BLOCK I 卫星加以汰换而 24 颗卫星全部为 BLOCK II/IIA 卫星,之后又发射四颗 BLOCK IIA 及一颗 BLOCK IIR 卫星,成功 地满足军事 实务的操作 。由于此技 术的迅速发 展,使得民 间应用的 需 求 与日遽增,对于传统导航方式更有革命性的影响。 3.2 全球卫星 定 位系统介 绍 全球卫星定位系统实际上是由 24 颗卫星所组成,其中有 3 颗为备用卫星,这 些卫星分布于距地表 20,200 公里的上空,而且分属于 6 个轨道面;卫星轨道面倾 斜 角为 55 度﹐提供全球全天候﹐每秒一次﹐持续不断的定位讯号。这些卫星每 11 小 时 58 分环绕地球一次,即每天绕过您的头顶二次,就像是月球一样不停地绕着 地球 旋转,其速度约每秒 1.8 哩。这些卫星需要地面管制站随时加以监控是否 GPS 卫星 在其正确的 轨道上及正 常运作,另 外监控中心 可上传资料 给卫星,卫 星再将这 些 信 息下传给 GPS 使用者使用。地面共有五个监控中心,四个上传资料站及一个控制 中 心,这些控 制站以纬度 来划分其所 控制的卫星 。在概念上 ﹐GPS 是代 表着整个 系 统 ﹐包括天空上的卫星、地面控制站及 GPS 接收机。不过一般而言﹐GPS 即意指一个 GPS 接收机﹐这是因为我们在使用上多半只会接触 GPS 接收机的缘故。一般所使用 之 GPS 接收机在任何时刻接收到 4 颗或更多的卫星。 3.3 GPS 定位原理 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 178 页 共 188 页 上海双实科技有限公司 简单的说 GPS 如何运作:每一颗卫星会告诉您使用的接收机三件事,我是第 几 号卫星,我现位置在那里,我什么时候送这讯息给您。当您的 GPS 接收机接收到 这 些资料后会将星历资料及 Almanac 存起来使用,这些资料也用做修正 GPS 接收机上 的时间。GPS 接收机比 较每一卫星 讯号接收到 的时间及本 身接收机的 时间的不 同 , 而计算出每 一卫星道接 收机的距离 。接收机若 在接收到更 多卫星时, 它可利用 三 角 公式计算出接收机所在位置。三颗卫星可做所谓 2D 定位(经度及纬度),四颗或更 多 卫星可做所谓 3D 定位(经度、纬度及高度)。接收机继续不段地更新您的位置,所以 它可计算出您的移动方向及速度。 3.4 GPS 和 GIS 绝大多 数单独的GPS接收机以经纬度和GPS高度表示位置。但是 坐标如北 纬 24度,东经121度和100公尺高对你 决定所在位 置并不很好 用,你还需 要知道你 在 地 图上的 位置 。GIS地理信息系 统是 存于计 算机 中的地 图数 据库(Database),GIS能比 纸上地图更 为精致复杂 。它可以是 三度空间以 显示地形图 ,也可包括 其它有用 的 信 息,如加油 站、旅游胜 地的照片等 等,汽车导 航系统就是 GPS和GIS之组合,这 种 应 用被人看好 是21世纪GPS市场中最 庞大的一部 分。另需特 别注意GPS的高度。它 并 不 是真正距地 面上的高度 ,也不是海 平面上的高 度,因为GPS接收机不 是GIS,并不 知 道外面世界的真象。 3.5 NMEA 协议 几乎所有的gps设备都是向串口发送nmea数据,而几乎所有的gps软件都是从串口取得 nmea数据进行处理。稍稍了解一下nmea数据,虽然没多大用。从nmea数据所包括的信息来看, 正常的gps软件之间不存在定位精度、定位速度、车辆行驶信息不同等差别,因为这些数据 都来自gps,软件只是调用。所以不会再说xx软件定位慢,xx软件速度误差大,xx软件收星 不良等。 nmea数据如下: $GPGGA,121252.000,3937.3032,N,11611.6046,E,1,05,2.0,45.9,M,-5.7,M,,0000*77 $GPRMC,121252.000,A,3958.3032,N,11629.6046,E,15.15,359.95,070306,,,A*54 $GPVTG,359.95,T,,M,15.15,N,28.0,K,A*04 $GPGGA,121253.000,3937.3090,N,11611.6057,E,1,06,1.2,44.6,M,-5.7,M,,0000*72 $GPGSA,A,3,14,15,05,22,18,26,,,,,,,2.1,1.2,1.7*3D $GPGSV,3,1,10,18,84,067,23,09,67,067,27,22,49,312,28,15,47,231,30*70 $GPGSV,3,2,10,21,32,199,23,14,25,272,24,05,21,140,32,26,14,070,20*7E $GPGSV,3,3,10,29,07,074,,30,07,163,28*7D 说明:NMEA0183格式以“$”开始,主要语句有GPGGA,GPVTG,GPRMC等 1、 GPS DOP and Active Satellites(GSA)当前卫星信息 $GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7><1>模式 :M = 手动, A = 自动。 <2>定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 179 页 共 188 页 上海双实科技有限公司 <3>PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。 <4>PDOP位置精度因子(0.5~99.9)<5>HDOP水平精度因子(0.5~99.9)<6>VDOP垂直精度因子(0.5~99.9)<7> Checksum.(检查位). 2、 GPS Satellites in View(GSV)可见卫星信息 $GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,?<4>,<5>,<6>,<7>,<8><1>GSV语句的总数<2>本句GSV的编号<3> 可见卫星的总数,00 至 12。 <4> 卫星编号, 01 至 32。 <5>卫星仰角, 00 至 90 度。 <6>卫星方位角, 000 至 359 度。实际值。 <7>讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。 <8>Checksum.(检查位). 第<4>,<5>,<6>,<7>项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一 行出现,若未使用,这些字段会空白。 3、Global Positioning System Fix Data(GGA)GPS定位信息 $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<1>UTC时间,hhmmss(时分秒)格式<2>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)<3>纬度半球N(北半球)或S(南半球)<4>经度dddmm.mmmm(度分)格式(前面的0也将被传输)<5>经度半球E(东经)或W(西经)<6>GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算<7>正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)<8>HDOP水平精度因子(0.5~99.9)<9>海拔高度(-9999.9~99999.9)<10>地球椭球面相对大地水准面的高度<11>差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)<12> 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空) 4、Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息 $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 180 页 共 188 页 上海双实科技有限公司 <1>UTC时间,hhmmss(时分秒)格式<2>定位状态,A=有效定位,V=无效定位<3>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)<4>纬度半球N(北半球)或S(南半球)<5>经度dddmm.mmmm(度分)格式(前面的0也将被传输)<6>经度半球E(东经)或W(西经)<7>地面速率(000.0~999.9节,前面的0也将被传输)<8>地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)<9>UTC日期,ddmmyy(日月年)格式<10>磁偏角(000.0~180.0度,前面的0也将被传输)<11>磁偏角方向,E(东)或W(西)<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效) 5、 Track Made Good and Ground Speed(VTG)地面速度信息 $GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<1>以真北为参考基准的地面航向(000~359度,前面的0也将被传输)<2>以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)<3>地面速率(000.0~999.9节,前面的0也将被传输)<4>地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)<5> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效) 4. 实验步骤 - 、 在 PC 上 测 试 GPS 步 骤 1: 把 GPRS 模 块 的 串 口 接 到 PC 的 串 口 2 中 , USB 接 头 接 到 PC 的 USB 接 口 内 。 打开超级终端,新建连接: 步 骤 2: 然 后 选 择 串 口 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 181 页 共 188 页 上海双实科技有限公司 步 骤 3:设 定 波 特 率 为 4800,数 据 位 为 8 位 ,无 奇 偶 校 验 ,停 止 位 为 1,无 流 控 ,如 下图: 步骤 4:查看从超级终端收到的 NMEA 数据,如下图: 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 182 页 共 188 页 上海双实科技有限公司 二 、 在 实 验 平 台 上 测 试 GPS 步 骤 1:把 模 块 的 串 口 通 过 GPS/ GPRS- TTL 转 换 器 接 到 主 板 的 GPRS 接 口 上( 靠 近 网 口 的 20 针 插 座 ) , GPS 的 USB 头 接 到 实 验 平 台 的 主 USB 接 口 上 。 连 接 好 主 板 的 串 口 线 、 USB 线 、 电 源 线 。 步 骤 2: 打 开 DNW 和 主 板 电 源 。 把 GPS 的 bin 文 件 ( gps.bin) 下 载 到 主 板 上 , 如 下图: 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 183 页 共 188 页 上海双实科技有限公司 步 骤 3: 用 ADS 查 看 这 个 程 序 的 源 代 码 , 深 入 了 解 GPS 模 块 5. 实验思考 5.1 读 懂 代 码 , 然 后 尝 试 修 改 代 码 。 5.2 深 入 了 解 NMEA 数 据 , 获 得 更 多 的 信 息 ( 如 卫 星 的 数 量 和 状 态 ) 。 5.3 尝 试 把 GPS 输 出 的 WGS- 84 坐 标 体 系 数 据 转 换 成 中 国 的 BJ-54 坐 标 系 。 上 海 张 江 高 科 技 园 区 毕 升 路 299 弄 3 号 楼 202 室 电 话 : 86-21-33932278 邮 件: supports@sinosys.com.cn 网 址: www.sinosys.com.cn 传 真 : 86-21-33932273 第 184 页 共 188 页

相关文章