Download - 嵌入式系统与结构 第六课 嵌入式系统的接口
1
嵌入式系统与结构
第六课 嵌入式系统的接口
2
主要内容通信基础微处理器接口仲裁多级总线结构通信协议
3
嵌入式系统的功能涵盖 处理功能
利用处理器实现 存储功能
用 Memory 实现 通信
处理器和存储器之间的数据传递 用总线来实现 称为接口技术 interfacing
1. 通信基础
4
2. 通信基础:一个简单的总线
bus structure
Processor Memoryrd'/wr
enable
addr[0-11]
data[0-7]
bus
线 ( Wires ) : 单项或双向的,可以代表多条 Wire
s总线 ( Bus ); 单一功能的一组线
地址总线 , 数据总线 也可指用于通信的所有线集合
地址,数据和控制 相关协议 : 是指一组通信规则
端口 (Ports) 可以是引脚,也可是芯片内部连接
port
5
2. 通信基础 --- 总线时序图
write protocol
rd'/wr
enable
addr
data
tsetup twrite
最常用的描述通信协议的方法控制信号:高或低数据信号 : 有效或无效协议可以有子协议
称为总线周期 , 如读周期和写周期
每个总线周期由多个时钟周期组成
读操作举例
read protocol
rd'/wr
enable
addr
data
tsetup tread
6
3. 接口 --- 基本协议概念 ( 1 )
执行设备 : 主设备启动数据传输 , 从设备响应启动数据方向 : 发送者 , 接收者地址 : 一种特殊的数据类型
指定一个内存、外设或外设内寄存器的位置时分复用
多个数据部分共享一条总线 节省了线但耗费了时间
数据串行 地址 / 数据多工
Master Servantreq
data(8)
data(15:0) data(15:0)
mux demux
Master Servantreq
addr/data
req
addr/data
addr data
mux demux
addr data
req
data 15:8 7:0 addr data
Time-multiplexed data transfer
7
3. 基本协议概念:控制方法( 2 )
使能协议 握手协议
Master Servantreq
ack
req
data
Master Servant
data
req
data
taccess
req
data
ack
1. 主设备将 req 设置,以接收数据2. 从设备在时间内 taccess 将数据输出
1
2
3
4
3. 主设备接收数据,取消 req4. 从设备准备下一次请求
1
2
3
4
1. 主设备将 req 设置,以接收数据2. 从设备将数据挂上并发送 ack3. 主设备接收数据,取消 req4. 从设备准备下一次请求
8
3. 使能与握手折衷 ( 3 )
快响应方式
req
datawait
1 3
42
慢响应方式
Master Servantreq
wait
data
req
datawait
13
42
taccess taccess
5
1. 主设备将 req 设置,以接收数据2. 从设备在时间内 taccess 将数据输出3. 主设备接收数据,取消 req4. 从设备准备下一次请求
1. 主设备将 req 设置,以接收数据2. 从设备不能在时间内 taccess 将数据输出,则将 wait 线置为有效
4. 主设备接收数据,取消 req5. 从设备准备下一次请求
3. 从设备将数据输出,则将 wait 线置为无效
9
4.ISA 总线协议 – 存储器访问Microprocessor Memory I/O Device
ISA bus
ADDRESS
CYCLE
CLOCK
D[7-0]
A[19-0]
ALE/MEMR
CHRDY
C1 C2 WAIT C3 C4
DATA
ISA: 工业标准结构 用于 80x86’s
特点 20-bit 地址 使能 / 握手折衷控制
4 总线周期 CHRDY 信号有效会导
致 额外等待周期 ( 达到 6)
memory-read bus cycle
CYCLE
CLOCK
D[7-0]
A[19-0]
ALE/MEMW
CHRDY
C1 C2 WAIT C3 C4
DATA
ADDRESS
memory-write bus cycle
10
主要内容1. 接口基础2. 微处理器接口 2.1 I/O 寻址 2.2 中断 2.3 直接内存访问( DMA )
3. 仲裁4. 多级总线结构5. 通信协议
11
1. 微处理器接口: I/O 寻址处理器的很多引脚用于数据的 I/O 基于端口的 ( 并行 I/O)
处理器有一个或多个 N-bit 端口 软件以读写寄存器的方式读写端口 E.g., P0 = 0xFF; v = P1.2; -- P0 和 P1 是 8-bit 端口
基于总线的 I/O 处理器有一组地址、数据和控制端口对应与总线信号
线; 处理器将总线协议建在其硬件内 一条指令执行总线上的读写协议
12
并行端口的扩展并行 I/O 外设 处理器仅支持基于总线的 I/O,
但是又需要并行 I/O 时 并行 I/O 外设连接到外设内
部的寄存器,由处理器设置该寄存器对端口进行操作
扩展并行 I/O 处理器支持基于端口的 I/O ,
但是不够使用 e.g., 扩展 4 端口到 6 端口
Processor Memory
Parallel I/O peripheral
Port A
System bus
Port CPort B
Adding parallel I/O to a bus-based I/O processor
Processor
Parallel I/O peripheral
Port A Port B Port C
Port 0Port 1Port 2Port 3
Extended parallel I/O
13
基于总线类型 I/O : 内存映射 I/O 和标准 I/O
处理器用相同总线与存储器和外设进行通信,与外设之间采用两种方式: 内存映射 I/O
外设寄存器占用内存地址空间的地址 e.g., 总线有 16-bit 地址
低 32K 地址可能对应到内存 高 32k 地址可以对应到外设
标准 I/O (I/O映射 I/O) 用总线上的额外引脚 (M/IO) 来指示 是访问一个内存还是外设 e.g., 总线有 16-bit 地址
全部 64K 对应到存储器(当 M/IO 设置成 0 ) 全 64K对应到外设(当 M/IO 设置成 1 )
14
ISA bus 的标准 I/O 实例ISA 支持标准 I/O 用 /IOR 而不是 /MEMR 来对外设读
/IOW 用于外设写 16-bit I/O 地址空间 vs. 20-bit 内存地址空间 其它与内存控制协议相同
折衷的使能 / 握手控制协议
CYCLE
CLOCK
D[7-0]
A[15-0]
ALE
/IOR
CHRDY
C1 C2 WAIT C3 C4
DATA
ADDRESS
ISA I/O bus read protocol
15
实例: 8051 基本内存协议
8051 接口到外部存储器 端口 P0 和 P2支持 基于端口的 I/O 当使用外部存储器时,这些端口用于数据 / 地址总线 16-bit 地址和 8-bit 数据被时分复用 ; 必须在 ALE 信号
的帮助下锁存地址低 8 位信号
P0
P2
Q
ALE
/RD
Adr. 7..0
Adr. 15…8
Adr. 7…0
Data
8051
74373
P0
HM6264
D Q
8P2
ALE G
A<0...15>
D<0...7>
/OE
/WE
/CS
/WR
/RD
/CS1
/PSEN
CS2
27C256
/CS
A<0...14>
D<0...7>
/OE
16
实例:更复杂的存储器协议
产生控制信号来驱动流水线读取模式的 TC55V2325FF存储器芯片 Addr0 是起始地址 GO 是使能输入
Specification for a single read operation
CLK
/ADSP
/ADSC
/ADV
addr <15…0>/WE
/OE
/CS1 and /CS2
CS3
data<31…0>
ADSP=1,ADSC=1
ADV=1, OE=1, Addr = ‘Z’
ADSP=1,ADSC=0
ADV=1, OE=1, Addr = ‘Z’
ADSP=1,ADSC=1
ADV=0, OE=0, Addr = ‘Z’
GO=1
GO=0
Data is ready here!
GO=1
GO=1
GO=0
GO=0
S0 S1
S2 S3
ADSP=0,ADSC=0
ADV=0, OE=1, Addr = Addr0
GO=0
GO=1
FSM description
17
主要内容1. 接口基础2. 微处理器接口 2.1 I/O 寻址 2.2 中断 2.3 直接内存访问( DMA )
3. 仲裁4. 多级总线结构5. 通信协议
18
1. 微处理器接口: 中断当外设间歇的接收数据,必须由处理器进行处理 处理器可以周期的轮询外设检查数据是否到达–很浪
费! 外设能够在数据到达时中断处理器需要额外的一个管脚: Int 引脚 若 Int 为 1, 处理器停止当前程序,跳到中断服务子程
序( ISR ) 中断驱动的 I/O 本质上对中断引脚的轮询功能内嵌在硬件中,不需要
额外周期。
19
1. 微处理器接口:中断 ( 1 )中断地址向量 固定中断
中断地址内嵌于处理器中,不会发生改变 可以将 ISR保存在这个地址,若字节空间不够也可以
将跳转地址指令存放在中断地址中。 向量中断
外设必须提供地址 处理器的系统总线上连接了多个外设
折中 : 中断地址向量表
20
2. 使用固定 ISR 位置的中断驱动 I/O 1(a): 微处理器执行一个主程序 1(b): P1 接收数据到 0x8000.
的寄存器
2: P1 将 Int 设置为有效,请求处理器服务
3: 完成 100 的指令 , 微处理器检查出 Int 有效,则保存 PC 的当前值 100 ,并将 PC值设为 ISR 的固定地址 16
4(a): The ISR 从 0x8000 读取数据并修改将结果写回 0x8001.
5: ISR返回,恢复 PC 为 100+1=101 微处理器继续执行
4(b): 读取数据后, P1 取消 Int 信号 .
Time
21
2.固定 ISR 位置的中断驱动 I/O ( 2 )
1(a): 微处理器执行主程序
1(b): P1 用地址为 0x8000 的寄存器接收数据 .
μP
P1 P2
系统总线
Int
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
程序存储器
PC
22
2.固定 ISR 位置的中断驱动 I/O ( 3 )
2: P1 置 Int 引脚向微处理器请求服务
μP
P1 P2
系统总线
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
程序存储器
PC
IntInt1
23
2.固定 ISR 位置的中断驱动 I/O ( 4 )
3: 完成指令 100后,微处理器检查到 Int 引脚被置位于是保存 PC值 100, 将 PC 设置成 ISR 的固定位置 16 。
μP
P1 P2
系统总线
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主存储器
...
程序存储器
PC
Int
100100
24
μP
P1 P2
System bus
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
程序存储器
PC
Int
2.固定 ISR 位置的中断驱动 I/O ( 4 )
4(a): The ISR 从 0x8000 读数据并修改然后写回到 0x8001.
4(b): 读完后 , P1 释放 Int 引脚 .
100
Int0
P1
System bus
P1
0x8000
P2
0x8001
25
2.固定 ISR 位置的中断驱动 I/O ( 5 )
5: ISR返回 , 然后被保存的 PC 100+1=101, 微处理器回到 101 处开始执行。 .
μP
P1 P2
系统总线
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...
...
程序存储器
PC
Int
100100+1
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
100
26
3.矢量中断驱动 I/O1(a): 微处理器执行一个主程序 . 1(b):P1 接收数据到 0x80
00 的寄存器 .
2: P1 将 Int 设置为有效,请求处理器服务3: 完成 100 的指令 , 微处理器检
查出 Int 有效,则保存 PC 的当前值 100 ,并将 Inta设置有效。 .
5(a): 微处理器跳到总线上的地址 16, ISR 从地址为 0x8000 的寄存器中读出数据,修改,然后回写到寄存器 0x8001 中。
6: ISR 返回,然后回复 PC 到100+1=101, 微处理器开始执行 。
5(b): 读取数据后, P1 取消 Int 信号
Time
4: P1 探测到 Inta 并且将中断地址向量 16放在数据总线上。
27
3.矢量中断驱动 I/OμP
P1 P2
系统总线
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
程序存储器
PC
100
IntInta
16
1(a): 微处理器执行一个主程序1(b):P1 接收数据到 0x8000. 的寄存器 ..
28
3.矢量中断驱动 I/OμP
P1 P2
系统总线
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
程序存储器
PC
100
Inta
16
2:P1 将 Int 设置为有效,请求处理器服务
Int1
Int
29
3.矢量中断驱动 I/O3: 完成 100 的指令 , 微处理器检查出 Int 有效,则保存 PC 的当前值 100 ,并将 Inta 设置有效。
μP
P1 P2
系统总线
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
程序存储器
PCInt
Inta
16
100100
1Inta
30
μP
P1 P2
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
程序存储器
PCInt
Inta
16
3.矢量中断驱动 I/O
100
4: P1 探测到 Inta 并且将中断地址向量 16放在数据总线上。 16
16
系统总线
31
3.矢量中断驱动 I/O5(a): 微处理器跳到总线上的地址 16 , ISR 从地址为 0x8000的寄存器中读出数据,修改,然后回写到寄存器 0x8001 中。
5(b): 读取数据后, P1 取消 Int 信号
μP
P1 P2
系统总线
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...Main program
...
程序存储器
PCInt
Inta
16
100
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
P1 P2
0x8000 0x8001
系统总线
0Int
32
3.矢量中断驱动 I/O6: ISR 返回,然后回复 PC 到 100+1=101, 微处理器开始执行。
μP
P1 P2
系统总线
数据存储器
0x8000 0x8001
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
程序存储器
PC
Int
100100+1
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x8001, R0 19: RETI # ISR return
ISR
100:101:
instruction instruction
...主程序
...
100
33
4. 中断向量表
在固定和向量中断进行折衷 一个中断引脚 内存中的表来保存 ISR 地址 ( 可以有 256 个字 )
外设不提供 ISR 地址,而只提供表内索引 外设发送更少的位 不改变外设就能移动 ISR 位置
34
5. 屏蔽和非屏蔽中断
可屏蔽中断 : 通过设置屏蔽位使处理器忽略外设产生的中
断。 在执行实时任务时很重要非屏蔽中断 一个独立的中断,不能被屏蔽 在一些突发状态使用,如断电情况下,要通知处理器在电源消失之前跳转到子程序来备份关键数据到非易失性存储器中。
35
主要内容1. 接口基础2. 微处理器接口 2.1 I/O 寻址 2.2 中断 2.3 直接内存访问( DMA )
3. 仲裁4. 多级总线结构5. 通信协议
36
1. 直接内存访问 ( DMA ) 缓冲
在处理之前在存储器中临时保存数据 在外设内积累的数据通常会被缓冲
微处理器通过 ISR 处理这些数据 保存与恢复微处理器状态造成低效率 正常的程序必须等待
DMA 控制器具有更高的效率 独立的单用途处理器- DMA 控制器 微处理器将系统总线控制权交给 DMA 控制器 微处理器能继续执行它的正常程序
不会由于 ISR调用造成低效率的存储和恢复状态 正常程序只有在需要系统总线时才会停下
哈佛结构 – 处理器能够取回并执行指令,只要它们不访问数据- 如果访问数据,就要暂停。
37
2. 外设到存储器传输(采用向量中断)
1(a): 微处理器执行一个主程序 .
1(b):P1 接收数据到 0x8000 的寄存器 .
μP
P1
System bus
0x8000
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x0001, R0 19: RETI # ISR return
ISR
100:
101: instruction
...Main program
...
Program memory
PC
Data memory0x0000 0x0001
16Int
Inta
instruction
38
2. 外设到存储器传输(采用向量中断)2: P1 将 Int 设置为有效,请求处理器服务
μP
P1
System bus
0x8000
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x0001, R0 19: RETI # ISR return
ISR
100:
101: instruction
...Main program
...
Program memory
PC
Data memory0x0000 0x0001
16Int
Inta
instruction 1
Int
100
39
2. 外设到存储器传输(采用向量中断)3: 完成 100 的指令 , 微处理器检查出 Int 有效,则保存 PC 的当前值 100 ,并将 Inta 设置有效。
μP
P1
System bus
0x8000
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x0001, R0 19: RETI # ISR return
ISR
100:
101: instruction
...Main program
...
Program memory
PC
Data memory0x0000 0x0001
16Int
Inta
instruction
100
Inta1
100
40
2. 外设到存储器传输(采用向量中断)4: P1 探测到 Inta 并且将中断地址向量 16放在数据总线上。.
μP
P1
System bus
0x8000
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x0001, R0 19: RETI # ISR return
ISR
100:
101: instruction
...Main program
...
Program memory
PC
Data memory0x0000 0x0001
16Int
Inta
instruction
100
16
16System bus
41
μP
P1
System bus
0x8000
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x0001, R0 19: RETI # ISR return
ISR
100:
101: instruction
...Main program
...
Program memory
PC
Data memory0x0000 0x0001
16Int
instruction
Inta
2. 外设到存储器传输(采用向量中断)5(a): 微处理器跳到总线上的地址 16 , ISR 从地址为 0x8000的寄存器中读出数据,修改,然后回写到寄存器 0x0001 中。 .
5(b): 读取数据后, P1 取消 Int 信号。
100
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x0001, R0 19:
ISR
100:
101: instruction
...Main program
...instruction
RETI # ISR return
System bus
0x8000
P1
Data memory0x0001
Int
0
42
μP
P1
System bus
0x8000
16: MOV R0, 0x8000 17: # modifies R0 18: MOV 0x0001, R0 19: RETI # ISR return
ISR
100:
101: instruction
...Main program
...
Program memory
PC
Data memory0x0000 0x0001
16Int
instruction
Inta
2. 外设到存储器传输(采用向量中断)6: ISR 返回,然后回复 PC 到100+1=101, 微处理器开始执行
100100+1
43
3. 外设到存储器传输(采用 DMA )1(a): μP 正执行主程序,已配置了 DMA 的控制寄存器
1(b): P1 收到输入数据放在寄存器 0x8000. 中
2: P1 设置 req 引脚有效,请求 DMA 控制器的服务
7(b): P1 将 req 无效 .
Time
3: DMA 控制器将Dreq 引脚设置为有效,请求系统总线控制权
4: 执行网指令 100后,微处理器检查到 Dreq 信号有效,交出系统总线,将 Dack 引脚有效,继续执行,只有在需要系统总线时才暂停 5: (a) DMA 控制
器将 ack 引脚设置为有效, (b) 从地址 0x8000 读数据 (c) 将数据写入存储器地址 0x0001中。 6:. DMA 将 Dreq 和 ack 无效,结束与 P1 的握手。
7(a): 微处理器将 Dack 无效,重新获得系统总线控制权。
44
3. 外设到存储器传输(采用 DMA )1(a): μP 正执行主程序,已配置了 DMA 的控制寄存器
1(b): P1 收到输入数据放在寄存器 0x8000 中
Data memoryμP
DMA ctrl P1
System bus
0x8000101:instruction instruction
...Main program
...
Program memory
PC
100
DreqDack
0x0000 0x0001
100:
No ISR needed!
0x0001
0x8000
ack
req
45
3. 外设到存储器传输(采用 DMA )2: P1 设置 req 引脚有效,请求DMA 控制器的服务.
3: DMA 控制器将 Dreq 引脚设置为有效,请求系统总线控制权
Data memoryμP
DMA ctrl P1
System bus
0x8000101:instruction instruction
...Main program
...
Program memory
PC
100
DreqDack
0x0000 0x0001
100:
No ISR needed!
0x0001
0x8000
ack
reqreq1
P1Dreq
1
DMA ctrl P1
46
3. 外设到存储器传输(采用 DMA )4: 执行网指令 100后,微处理器检查到 Dreq 信号有效,交出系统总线,将 Dack 引脚有效,继续执行,只有在需要系统总线时才暂停
Data memoryμP
DMA ctrl P1
System bus
0x8000101:instruction instruction
...Main program
...
Program memory
PC
100
DreqDack
0x0000 0x0001
100:
No ISR needed!
0x0001
0x8000
ack
req
Dack1
47
Data memoryμP
DMA ctrl P1
System bus
0x8000101:instruction instruction
...Main program
...
Program memory
PC
100
DreqDack
0x0000 0x0001
100:
No ISR needed!
0x0001
0x8000
ack
req
Data memory
DMA ctrl P1
System bus
0x8000
0x0000 0x0001
0x0001
0x8000
ack
req
3. 外设到存储器传输(采用 DMA )5: (a) DMA 控制器将 ack引脚设置为有效, (b) 从地址 0x8000读数据 (c) 将数据写入存储器地址 0x0001 中。
( 处理器仍然执行无需暂停)ack
1
48
3. 外设到存储器传输(采用 DMA )6: DMA 将 Dreq 和 ack 无效,结束与 P1 的握手 .
Data memoryμP
DMA ctrl P1
System bus
0x8000101:instruction instruction
...Main program
...
Program memory
PC
100
DreqDack
0x0000 0x0001
100:
No ISR needed!
0x0001
0x8000
ack
req
ack0Dreq
0
49
4. ISA 总线的 DMA 周期Processor Memory
I/O Device
ISA-Bus
DMAR
A
R A
DMA Memory-Write Bus Cycle
ADDRESS
CYCLE
CLOCK
D[7-0]
A[19-0]
ALE
/IOR
/MEMW
CHRDY
C1 C2 C3 C4 C5 C6 C7
DATA
DMA Memory-Read Bus Cycle
ADDRESS
CYCLE
CLOCK
D[7-0]
A[19-0]
ALE
/MEMR
/IOW
CHRDY
C1 C2 C3 C4 C5 C6 C7
DATA
50
小结 接口技术 ( 1 )
总线与端口的区别总线接口的基本控制方法总线时序图基于端口 I/O 寻址与基于总线 I/O 寻址基于中断向量表的总断响应过程在 DMA 控制器控制下的外设与存储器的数据传输
51