1 / 180

嵌入式系统结构

嵌入式系统结构. 大连理工大学软件学院嵌入式教研室 邱铁 E_mail: qiutie@sohu.com Tel: 87571521 参考教材: 1. 嵌入式系统开发与应用,田泽.北京航空航天大学出版社 2. 嵌入式系系结构与编程,杜春蕾 . 清华大学出版社.

damara
Download Presentation

嵌入式系统结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 嵌入式系统结构 • 大连理工大学软件学院嵌入式教研室 • 邱铁 E_mail: qiutie@sohu.com • Tel: 87571521 • 参考教材: • 1.嵌入式系统开发与应用,田泽.北京航空航天大学出版社 • 2.嵌入式系系结构与编程,杜春蕾. 清华大学出版社

  2. 本讲介绍了嵌入式硬件启动代码设计与嵌入式平台接口电路,详细介绍了ARM7ARM9的启动流程,各种电路接口如电源电路、时仲钟电路、JTAG接口、LED电路、键盘、串口通信、USB通信,Flash的扩展,以及电机驱动电路、LCD接口电路,CPLD对器件功能的扩展等。 第六讲 启动代码与嵌入式硬件接口电路

  3. 试验平台连接图

  4. ARM开发板功能模块

  5. 分为两部分 • 上篇:基于ARM7与ARM9芯片启动流程 • 下篇:嵌入式硬件平台接口电路

  6. 上篇:基于ARM7与ARM9芯片启动流程 • 启动代码 • 程序的链接定位 • 开发调试中用到的几个文件 • 软件调试技术

  7. 1.启动代码说明 • 启动代码是用来初始化电路以及用来为高级语言写的软件做好运行前准备的一小段汇编语言,是任何处理器上电复位时的程序运行入口点 • 功能 初始化电路 为高级语言编写的软件运行做准备 • 特征 汇编语言 处理器上电复位的程序运行入口点

  8. 看门狗及外围电路初始化 设置中断、异常向量 系统寄存器配置 存储区电路初始化 变量初始化 数据区准备 高级语言入口函数调用 初始化栈指针 2.启动代码流程

  9. 存储区配置 初始化堆栈 高级语言入口函数调用 Main( ) Rtos_Init( ) MyRoot( ) …… 3.启动代码最小流程 异常向量表初始化

  10. 全局寄存器初始化 存储区设置、自检 看门狗设置、外围电路初始化 中断禁止 初始化堆栈,数据区清零 允许中断 高级语言入口函数调用 4.启动代码典型流程 中断向量设置

  11. 5.启动代码常见形式 • 实时操作系统的板级支持包——BSP • 计算机主板的BIOS

  12. 6.Embest IDE 相关文件 • 源代码文件(C和汇编语言文件) • C代码及包含文件 *.c、*.h • 汇编代码及头文件 *.s • 工程文件 (*.ews、*.pjf) • 工作区文件*.ews 工程文件*.pjf • 工程创建与配置自动生成,禁止用户修改 • 链接脚本文件 (*.ld) • 遵照脚本文件格式,用户复制示例或手工输入 • 编写根据用户软件设计和电路存储区安排 • 函数库文件( *.lib、*.a) • Embest IDE附带的标准嵌入式C函数库 • 用户自己编写的函数库

  13. 程序的链接定位 • 链接定位是系统级软件开发过程中必不可少的一部分,嵌入式软件开发均属于系统级开发。 • 链接定位过程一般由链接器根据链接定位文件完成,比较简单的系统可以通过设置链接器开关选项取代链接定位文件。 • 链接定位的关键是链接定位文件的编写

  14. 常见链接程序段 以下程序段存在于各个目标文件中(*.obj *.o),链接定位后按段的类别收集在一起,同时指定在存储区中的位置 • text : 代码段,所有代码块部分 • rodata : 已初始化的全局只读数据 • data : 已初始化的全局数据 • bss : 未初始化的全局变量

  15. 常见链接程序段 .STACK .BSS .RODATA 存放静态变量/常量 .DATA RAM/DRAM/SDRAM .TEXT .DATA’ RO RO 存放应用程序代码 FLASH/ROM

  16. 链接脚本文件 • 在系统级别的嵌入式开发中需要使用链接定位文件,该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码做正确的定位,该文件称为链接脚本文件(*.ld)

  17. SECTIONS { . = 0x0C000000; Image_RO_Base = .; .text: { *(.text) }; .rodata : { *(.rodata) }; Image_RO_Limit = .; Image_RW_Base = .; .data : { *(.data) }; Image_ZI_Base = .; .bss : { *(.bss) }; Image_ZI_Limit = .; Image_RW_Limit = .; __bss_start__ = .; __bss_end__ = .; __EH_FRAME_BEGIN__ = .; __EH_FRAME_END__ = .; PROVIDE (__stack = .); end = .; _end = .; .debug_info 0 : { *(.debug_info) } .debug_line 0 : { *(.debug_line) } .debug_abbrev 0 : { *(.debug_abbrev)} .debug_frame 0 : { *(.debug_frame) } } 当前地址, 只读区域基地址, 代码段入口地址, 只读区域长度, 读写区域基地址, 数据段, 只读数据段, 清零区域基地址, 清零区域长度, 读写区域基长度 gcc 库 专 用 调 试 信 息 典型链接脚本文件

  18. 简单链接脚本文件 SECTIONS { .= 0x10000 .text:{*(.text)} .= 0x8000000 .data:{*(.data)} .bss:{*(.bss)} }

  19. RAM地址 只读数据 链接脚本文件比较 SECTIONS { . = 0x0C000000; Image_RO_Base = .; .text : { *(.text) }; Image_RO_Limit = .; Image_RW_Base = .; .data : { *(.data) }; .rodata : { *(.rodata) }; Image_ZI_Base = .; .bss : { *(.bss) }; Image_ZI_Limit = .; Image_RW_Limit = .; …… SECTIONS { . = 0x00000000; Image_RO_Base = .; .text : { *(.text) }; .rodata : { *(.rodata) }; Image_RO_Limit = .; . = 0x0C000000; Image_RW_Base = .; .data : { *(.data) }; Image_ZI_Base = .; .bss : { *(.bss) }; Image_ZI_Limit = .; Image_RW_Limit = .; …… FLASH地址

  20. 分段存储的链接脚本文件 SECTIONS { . = 0x01000000; .text : { *(EXCLUDE_FILE (*fiq.o) .text)} .rodata : { *(.rodata) } . = 0x02000000; .data : { *(.data) } .bss : { *(.bss) } }

  21. 链接脚本与程序 变量A1(未初始化的变量) 将保存在 .bss 段中 变量A2(已初始化的变量) 将保存在 .data 段中 常量A3 保存在.rodata 段中 局部变量A4(执行到main函数时) 存放在main函数对应函数栈中 寄存器变量A5 直接保存在ARM的一个寄存器 main函数对应的代码 保存在 .text 段中 int A1; int A2 =5; const int A3 = 10; void main() { int A4; register int A5; A4 = A3; } .text : { *(.text) }; 代码段,在这里标识从0开始放置程序代码 .rodata : { *(.rodata) };只读数据段,程序中静态全局变量等固定值放在该段 .data : { *(.data) }; 数据段, 程序中已初始化的全局变量放在该段 .bss : { *(.bss) }; 包含未初始化的全局可用数据, 如未初始化全局变量

  22. 命令脚本文件 • 在集成环境与目标连接时、软件调试过程中以及目标板复位后,有时需要集成环境自动完成一些特定的操作,比如复位目标板、清除看门狗、屏蔽中断寄存器、存储区映射等。这些操作可以通过执行一组命令序列来完成,保存一组命令序列的文本文件称为命令脚本文件(*.cs) 命令脚本的执行方法 方法一 在工程设置对话框调试选项中在“连接后行为”中指定连接后 执行命令脚本文件 方法二 在集成环境连接目标板后,在调试命令窗口里执行 Script 命令脚本文件名

  23. 命令脚本文件示例 reset ; reset board memwrite 0x01D30000 0x00000000 ; WTCON disable watch dog memwrite 0x01E0000C 0x07ffffff ; INTMSK (disable all interrupt) memwrite 0x01E00024 0xffffffff ; clear all interrupt memwrite 0x01C80000 0x11110102 ; BWSCON (Bus Width & Wait Status Control Register) memwrite 0x01C80004 0x00000600 ; BANKCON0 memwrite 0x01C80008 0x00007FFC ; BANKCON1 memwrite 0x01C8000C 0x00007FFC ; BANKCON2

  24. 件 格 式 存储区映象文件 • 在软件调试过程中访问非法存储区在部分处理器和目标板上会产生异常,如果异常没有处理,则会导致软件调试过程无法继续,为了防止以上问题并调整仿真器访问速度以达到最合适的水平,而提供的一种用于描述各个存储区性质的文件叫存储区映像文件(*.map)

  25. 用户一般不用关注以下选项 总线宽度、访问尺寸、读等待、写等待、高速访问等待 存储区映象文件示例 名称 起始地址 长度 属性

  26. MEMWRITE – 存储区写 语 法: memwrite [–e] 地址 数值 说 明: 向存储区指定地址写入数值 地址 要写入数值的存储区地址 数值 待写数值 选 项: -e 大印第安方式写入 示例: memwrite 0x1000 0x5A 向地址0x1000处写入数值0x5A memwrite -e 0x2000000 0x22334455 等效于memwrite 0x2000000 0x55443322 调试台命令 调试命令列表 BKPTCLEAR –清除断点 BKPTDATA –设置数据断点 BKPTINST –设置指令断点 BKPTLIST –断点列表 DISASM –反汇编 DOWNLOAD –文件下载 GO –执行程序 HELP –显示帮助信息 MEMREAD –存储区读 MEMWRITE –存储区写 REFRESH –刷新窗口 REGLIST –寄存器列表 REGREAD –寄存器读 REGWRITE –寄存器写 RESET –复位目标设备 SCRIPT –执行脚本文件 STEP –单步执行程序 STOP –停止执行程序 SYMBOL –载入符号文件

  27. 观察调试信息 函数栈窗 观察窗 变量窗 存储区窗 寄存器窗 外围寄存器窗

  28. 外围寄存器窗口

  29. Data Abort 数据访问中止 0x10 • Prefetch Abort 指令预取中止 0x0C 7.异常的捕获与处理 • 定位出错程序常用调试手段 • 捕获异常 • 观察信息 • R14 (LR) 寄存器,保存返回地址 • SPSR 寄存器,保存处理器当前状态及标志等

  30. RAM区程序调试 • 程序各段均在RAM区 • 由IDE直接下载程序 • 下载速度快,断点设置方便 • 执行速度比在 Flash 中快 • 需要较大的RAM区

  31. ldr r0,=0x0 ldr r1,=Image_RO_Base ldr r3,=Image_ZI_Limit LOOP: cmp r1, r3 ldrcc r2, [r0], #4 strcc r2, [r1], #4 bcc LOOP ldr pc,=(NEXT) NEXT: ...... 存储区电路初始化 RAM 程序复制与跳转 • 程序链接时必须按照RAM区运行地址定位 初始化栈指针 • 通过链接脚本定义的符号确定代码长度 Flash • 定义符号来确定程序跳转的地址 在RAM中执行程序 • 目的 • 提高运行速度 • 方法 • 通过启动程序完成 • 通过操作系统完成

  32. 下篇:嵌入式硬件平台接口电路 电源电路、时仲钟电路、JTAG接口、LED电路、键盘、串口通信、USB通信,Flash的扩展,以及电机驱动电路、LCD接口电路,CPLD对器件功能的扩展

  33. S3C44B0X的存储空间分布 S3C44B0X概述 特殊功能寄存器

  34. DRAM,动态随机存取存储器,需要不断的刷新,才能保存数据。 而且是行列地址复用的,许多都有页模式。 • SRAM,静态的随机存取存储器,加电情况下,不需要刷新,数据不会丢失,而且,一般不是行列地址复用的。 • SDRAM,同步的DRAM,即数据的读写需要时钟来同步。

  35. 1.RAM/Flash的扩展 • 型号HY57V641620HG • 4Banks x 1M x 16Bit • Synchronous DRAM

  36. 内部结构

  37. SDRAM接口电路

  38. nGCS Timing Diagram

  39. S3C2410X SDRAM Timing Diagram

  40. FLASH(AM29LV160DB) 16 Megabit (2 M x 8-Bit/1 M x 16-Bit)

  41. 内部结构框图

  42. FLASH 电路 采用AMD 公司的nor flash

  43. Read operation timings

  44. Byte/Word read operation

  45. 关于TTL电平关系的几点说明 u0(V) u0(V) UOH “1” UOH (3.4V) 1 ui(V) 2 3 1 ui(V) 2 3 输出高电平 输出低电平 UOL (0.3V) UOL (0.3V) 阈值UT=1.4V 传输特性曲线 理想的传输特性

  46. 1. 输出高电平UOH、输出低电平UOL UOH2.4V UOL0.4V 便认为合格。 典型值UOH=3.4V UOL0.3V 。 2. 阈值电压UT ui<UT时,认为ui是低电平。 ui>UT时,认为ui是高电平。 UT=1.4V

  47. 关于电流的技术参数

  48. +5V R2 R4 T3 IiH1 T4 R5 IiH2 T1 T1 T1 IOH IiH3 前级 2. 扇出系数:门电路输出驱动同类门的个数 前级输出为 高电平时 例如:     

  49. +5V R1 IiL1 R2 3k b1 c1 T2 IOL IiL2 T1 T5 IiL3 R3 前级输出为 低电平时    前级 

More Related