文章目录
前情提要
本人是一名大三学生,由于期末复习需要,所以按照老师的ppt总结整理此笔记,希望对你有所帮助
第六章 硬件系统设计
- 典型嵌入式硬件系统组成,主要单元及特点,如 CPU,串口,网络,串口, 看门狗,RTC 时钟,Flash,SDRAM,中断控制器
- 嵌入式系统硬件调试过程:从最小系统开始
典型嵌入式硬件系统的组成
典型嵌入式系统的体系结构
典型嵌入式系统硬件组成
硬件的选择
操作系统
- 如果希望使用 WinCE 或 Linux 等操作系统,就需要选择 ARM 720 T 以上带有 MMU(Memory Management Unit:内存管理单元)功能的 ARM 芯片,如 ARM 720 T、Strong-ARM、ARM 920 T、ARM 922 T、ARM 946 T 都带有 MMU 功能,
- 而 ARM 7 TDMI 没有 MMU,不支持 Windows CE 和大部分的 Linux,但目前有 uClinux 等少数几种 Linux 不需要 MMU 的支持。
主要单元及特点
看门狗与复位电路
- 硬件看门狗 (WDT, WATCHDOG TIMER) 是利用了一个定时器,来监控主程序的运行
- 也就是说在主程序的运行过程中,CPU 要在定时时间到来之前对定时器进行复位 (喂狗)
- 如果出现死循环,或者说 PC 指针不能回来。那么定时时间到达后,如果 CPU 还没有产生喂狗信号给 WDT,WDT 就会输出信号使 CPU 复位。
嵌入式系统中两类看门狗:
- CPU 内部自带的看门狗:将一个芯片中的定时器来作为看门狗,通过程序的初始化,写入初值,设定溢出时间,并启动定时器。程序按时对定时器赋初值(或复位),以免其溢出。
优点:可以通过程序**改变溢出时间**;可以随时禁用 缺点:需要**初始化**;如果程序在初始化、启动完成前跑飞或在禁用后跑飞,看门狗就无法复位系统,这样看门狗的作用就没有了,系统恢复能力降低。
- 独立的看门狗芯片:这种看门狗主要有一个用于喂狗的引脚(一般与CPU的GPIO相连)和一个复位引脚(与系统的RESET引脚相连),如果没有在一定时间内改变喂狗脚的电平,复位引脚就会改变状态复位CPU。此类看门狗一上电就开始工作,无法禁用。
优点:**无须配置**,上电即用。无法禁用,系统必须按时喂狗,系统恢复能力高。 缺点:**无法灵活配置溢出时间,** 无法禁用,灵活性降低。
硬件看门狗与复位电路中,按键 S 1 是手动复位按键,ADM 706 TAR 芯片的第 7 脚周期性的按设定的时间间隔检查该引脚的输入信号,如果 CPU 在规定的时间内没有输入高电平(又称为喂狗),则说明程序跑飞了,ADM 706 TAR 的第 6 脚便产生一个复位信号,使 CPU 复位。
看门狗定时器
- 看门狗定时器控制寄存器 WTCON
- 看门狗定时器数据寄存器 WTDAT
- 看门狗定时器计数寄存器 WTCNT
看门狗定时器控制寄存器
------WTCON 0 x 01 D 30000 R/W 初始值 0 x 8021
BIT 描述
[15:8] 预分频 prescaler 值(0 to (2 ^8 -1)
[7:6] 保留
[5] 看门狗定时器的允许(启动)位
0 = Disable watchdog timer
1 = Enable watchdog timer Clock select
[4:3] 时钟除因子 (分割) 00: 1/16 01: 1/32 10: 1/64 11: 1/128
[2] 看门狗中断允许位
0 = Disable interrupt generation
1 = Enable interrupt generation
[1] 保留
[0] 看门狗输出复位信号的允许位----- 1: 允许 0: 不允许
看门狗定时器数据寄存器
-------WTDAT 0 x 01 D 30004 R/W 初始值 0 x 8000
- WTDAT 规定看门狗定时器超时周期。
- WTDAT 的内容在初始操作时,不能自动加载进定时器计数寄存器 WTCNT。
- 可是定时器计数寄存器在使用初始值 0 X 8000 第一次超时出现以后,WTDAT 的值将自 动加载进 WTCNT。
存储单元
嵌入式系统内存映射的示意图,显示不同的内存区域及其对应的地址范围
例子:
-
在程序空间 flash ROM 内(在主板上对应 2 M 字节大小的 HY 29 LV 160 器件)可以固化一段启动系统并对系统进行初始化的程序——Boot Loader 程序。
-
上图中 Flash ROM 存储器映射在了系统的 bank 0 上,也就是说,系统上电时处理器即从 Flash ROM 的 0 x 00000000 地址处取得指令开始运行。
- 这个地址上的 Boot Loader 程序完成了时钟设置初始化、中断矢量的定义、存储器的参数设置、堆栈地址定义等工作,这些设置对于系统正常启动是非常重要的。
-
由于 Flash ROM 是非易失性的存储器,因此程序就算掉电也不会丢失。
- 但是如果由于某个误操作覆盖了 Flash ROM 中启动程序的内容,系统就将无法正常启动,这时就需要重新将 Boot Loader 程序烧写到 Flash ROM 中
- 系统的 SDRAM 器件映射在 bank 6 上,也就是 0 x 0 C 000000 地址处。
- SDRAM 是易失性的可快速擦写的存储器,因此它通常作为系统的数据空间,同时也作为系统程序的运行空间,当系统上电后,程序将从 flash ROM 存储器被拷贝到 SDRAM 中运行,这样将大大提高程序的运行速度。
- 当然,系统掉电后,SDRAM 中的程序就消失了,下次上电时,程序将又从 flash ROM 存储器被拷贝到 SDRAM 中运行。
网络接口电路
从硬件的角度看,以太网接口电路两大部分:
- MAC(Medium Access Control)控制器
- 物理层接口(Physical Layer,PHY)
PWM 定时器
- 6个16 位定时器;
- 3个8 位预分频器
- 2个5位分割器
- 1个4位分割器;
- 输出波形的占空比可编程控制(PWM)
- 自动加载模式或单触发脉冲模式;
- 支持外部中断源;
- 看门狗定时器溢出产生复位信号。
PWM 定时操作
定时器0和1分享一个8位预分频器 + 一个5位分割器
定时器2和3分享一个8位预分频器 + 一个5位分割器
定时器4和5分享一个8位预分频器 + 一个4位分割器
RTC
- RTC 单元能在系统断电时, 通过备份电池来供电
- RTC 能通过 ARM 的 STRB/LDRB 指令传输 8 位数据到 CPU
- RTC 使用一个外部 32.768 kHz 的晶体
- 报警功能。
中断控制器
- S 3 C 44 B 0 X 的中断控制器可以接收来自 30 个中断源的请求。
- 中断控制器的作用,就是响应来自 FIQ 或 IRQ 的中断,并请求内核对中断进行处理。
- 当有多个中断同时发生的时候,中断控制器要决定首先处理哪一个中断。
ARM7TDMI 有 2 种类型的中断模式:
- FIQ(快速中断请求)
- IRQ(普通中断请求)
CPSR 指 ARM7TDMI 处理器的程序状态寄存器。
- 如果 CPSR 的 F 位被设置为 1,处理器将不接受来自中断控制器的 FIQ。
- 如果 CPSR 的 I 位被设置为 1,处理器将不接受来自中断控制器的 IRQ。
因此,为了使能中断响应机制:
- CPSR 的 F 位或 I 位必须被清 0,
- 同时 INTMASK( 中断屏蔽寄存器 )的相应位必须被清 0。
在 30 个中断源中 合并后以26 个中断源信号提供给中断控制器。
中断源 | 对应控制位 | 中断源 | 对应控制位 |
---|---|---|---|
外部中断0 | [ 25 ] | 定时器1中断 | [ 12 ] |
外部中断1 | [ 24 ] | 定时器2中断 | [ 11 ] |
外部中断2 | [ 23 ] | 定时器3中断 | [ 10 ] |
外部中断3 | [ 22 ] | 定时器4中断 | [ 9 ] |
外部中断4/5/6/7 | [ 21 ] | 定时器5中断 | [ 8 ] |
RTC时间滴答中断 | [ 20 ] | UART0接收中断 | [ 7 ] |
ZDMA0中断 | [ 19 ] | UART1接收中断 | [ 6 ] |
ZDMA1中断 | [ 18 ] | IIC-中断 | [ 5 ] |
BDMA0中断 | [ 17 ] | SIO-中断 | [ 4 ] |
BDMA1中断 | [ 16 ] | UART0 发送中断 | [ 3 ] |
看门狗中断 | [ 15 ] | UART1发送中断 | [ 2 ] |
UART0/1错误中断 | [ 14 ] | RTC报警中断 | [ 1 ] |
定时器0中断 | [ 13 ] | ADC转换结束中断 | [ 0 ] |
中断优先级产生模块包含5个单元: |
• 1个主单元–(主单元管理4个辅单元和2个中断源)
• 4个辅单元–(每个辅单元管理6个中断源)
最小系统
- S 3 C 44 B 0 X 最小系统 + SDRAM + FLASH 电路可构成一个完全的嵌入式系统
- 可运行 SDRAM 中的程序,也可以运行 FLASH 中的程序
- 程序规模可以很大,如果将程序保存到 FLASH 中,掉电后不会丢失,因此,既可以通过 JTAG 接口调试程序,也可以将程序烧写到 FLASH,然后运行 FLASH 中的程序
- 在此基础上加入必要的接口及其他电路,就构成了具体的 S 3 C 44 B 0 X 应用系统
硬件调试
-
尽可能的从简单到复杂,一个单元一个单元地焊接调试,以便在调试过程中遇到困难时缩小故障范围,在调试过程中,应先确定电路没有短路,才能通电调试。
-
先从最小系统调试: S 3 C 44 B 0 X + 电源电路 + 晶振电路 + 复位电路 + JTAG 接口
-
然后加上 SDRAM,再加上 FLASH,然后再加上其它接口
-
芯片在工作时有一定的发热是正常的,但如果有芯片特别发烫,则一定有故障存在,需断电检查确认无误后方可继续通电调试。
-
调试电源电路之前,尽量少接器件,通电之前检查有无短路现象
-
用示波器观测,晶振的输出应为10MHz
-
复位电路的nRESET端在未按按钮时输出应为高电平(3.3V),按下按钮后变为低电平,按钮松开后应恢复到高电平