Bài giảng Kỹ thuật vi xử lý_ Chương 6 Các kiểu I/O
6.1 Thăm dò (Polling) 6.2 I/O điều khiển bằng ngắt (Interrupt) 6.3 DMA (Direct Memory Access)
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật vi xử lý_ Chương 6 Các kiểu I/O, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Bài giảng Kỹ thuật Vi xử lý
Ngành Điện tử-Viễn thông
Đại học Bách khoa Đà Nẵng
của Hồ Viết Việt, Khoa ĐTVT
Tài liệu tham khảo
[1] Kỹ thuật vi xử lý, Văn Thế Minh, NXB Giáo dục, 1997
[2] Kỹ thuật vi xử lý và Lập trình Assembly cho hệ vi xử
lý, Đỗ Xuân Tiến, NXB Khoa học & kỹ thuật, 2001
Chương 6
Các kiểu I/O
6.1 Thăm dò (Polling)
6.2 I/O điều khiển bằng ngắt (Interrupt)
-
6.3 DMA (Direct Memory Access)
Thăm dò
mov dx, F000
L1: in al, dx
cmp al, FF
je L1
:
:
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
74LS245
B0
B1
B2
B3
B4
B5
B6
B7
A0
A1
A2
A3
A4
A5
A6
A7
E DIR
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
The Circuit
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
74LS245
B0
B1
B2
B3
B4
B5
B6
B7
A0
A1
A2
A3
A4
A5
A6
A7
E DIR
A15
A14
A13
A12
A11
A10
A9A8A7A6A5A4A3A2A1A0IOW
74LS373
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D0
D1
D2
D3
D4
D5
D6
D7
OELE
Bài toán
• Chương trình tạo ra hiệu ứng “LED chạy”:
- Ban đầu LED chạy từ trên xuống
- Khi nhấn phím thấp nhất thì LED thay đổi
hướng chạy
- Khi nhấn phím cao nhất thì chương trình
kết thúc
Chương trình
mov dx, F000
mov ah, 00
mov al, 01
L1: out dx, al
mov cx, FFFF
L2: dec cx
jnz L2
cmp ah, 00
jne L3
rol al, 1
cmp al, 01
jne L1
jmp L4
L3: ror al, 1
cmp al, 80
jne L1
L4: mov bl, al
in al, dx
cmp al, FF
je L6
test al, 01
jnz L5
xor ah, FF
jmp L6
L5: test al, 80
jz L7
L6: mov al, bl
jmp L1
L7:
Khuyết điểm của thăm dò
• Tốn nhiều thời gian
• NgườI sử dụng có thể nhả phím trước khi
lệnh in al, dx được thực hiện, do đó
bộ vi xi xử lý sẽ không biết rằng ngườI sử
dụng đã nhấn phím
• Làm sao để khắc phục các khuyết điểm
đó?
Khuyết điểm của thăm dò
mov dx, F000
mov ah, 00
mov al, 01
L1: out dx, al
mov cx, FFFF
L2: dec cx
jnz L2
cmp ah, 00
jne L3
rol al, 1
cmp al, 01
jne L1
jmp L4
L3: ror al, 1
cmp al, 80
jne L1
L4: mov bl, al
in al, dx
cmp al, FF
je L6
test al, 01
jnz L5
xor ah, FF
jmp L6
L5: test al, 80
jz L7
L6: mov al, bl
jmp L1
L7:
Ngắt là gì?
Thăm dò
While studying, I’ll
check the bucket every 5
minutes to see if it is
already full so that I can
transfer the content of
the bucket to the drum.
Input
Device
Memory
µP
instruction
THĂM DÒ
Ngắt
I’ll just study. When the
speaker starts playing
music it means that the
bucket is full. I can then
transfer the content of
the bucket to the drum.
Input
Device
Memory
µP
instruction
INTERRUPT
Interrupt
request
Interrupt- Ngắt
• Bộ vi xử lý không cần phải kiểm tra tính
sẵn sàng của thiết bị I/O.
• Các thiết bị I/O sẽ báo cho vi xử lý biết khi
chúng đã sẵn sàng
• Bộ vi xử lý có thể làm công việc khác khi
thiết bị I/O không có nhu cầu trao đổI dữ
liệu
Interrupt- Ngắt
• Một số thuật ngữ cần nhớ:
– Yêu cầu ngắt
– Đầu vào ngắt
– Đầu ra chấp nhận ngắt
– Chương trình con phục vụ ngắt
– Vector ngắt
– Số ngắt
– Bảng các vector ngắt
Interrupt Service Routine (ISR) - Chương trình con phục vụ ngắt
Interrupt vector - Vector ngắt
• Là chương trình được thực hiện khi có
một yêu cầu ngắt được chấp nhận
• Kết thúc bằng lệnh IRET
• Địa chỉ của chương trình con phục vụ ngắt
• Bao gồm 4 byte:
– 2 byte cho địa chỉ Offset
– 2 byte cho địa chỉ Segment
Interrupt Vector Number
Số ngắt
• Là một số được dùng để phân biệt các
yếu cầu ngắt. Bởi vì có thể có nhiều hơn
một thiết bị phát yêu cầu ngắt đến bộ vi xử
lý cho nên để cho bộ vi xử lý có thể nhận
biết được thiết bị thì mỗI thiết bị sẽ được
gán cho một số ngắt
• Trong hệ thống 8088, co thể có đến 256
số ngắt (từ 00h đến FFh)
Interrupt Vector Table
Bảng các vector ngắt
• Là vùng nhớ được dành riêng để lưu trữ
các vector ngắt
• Có thể xem như là một mảng các vector
ngắt
– Mảng này có 256 phần tử
– Mỗi phần tử gồm 4 byte: 2 byte đầu lưu địa
chỉ offset, 2 byte sau lưu địa chỉ segment
– Các vector ngắt được lưu trữ theo trật tự tăng
dần của số ngắt
Bảng các vector ngắt
Phản ứng của vi xử lý khi không có
ngắt
• Khi bật công tấc nguồn hoặc nhấn nút reset.
1. Bộ vi xử lý được khởi động:
– (IP) = 0000h
– (CS) = FFFFh
– IF = 0
2. Bộ vi xử lý tìm và lấy 1 byte lệnh.
3. IP tăng lên 1.
4. Bộ vi xử lý giải mã và thực hiện lệnh nếu tất cả các byte lệnh
của một lệnh đã được lấy.
5. Quay trỏ lại bước 2.
Phản ứng của vi xử lý khi có ngắt
• Thiết bị I/O đưa yêu cầu ngắt đến bộ vi xử lý bằng cách làm
cho đầu vào ngắt INTR chuyển sang mức cao.
6. Bộ vi xử lý sẽ hoàn thành lệnh đang thực hiện trước khi chấp
nhận ngắt
7. Bộ vi xử lý chấp nhận ngắt bằng cách đưa ra tín hiệu chấp
nhận ngắt ở mức thấp từ chân INTA. Lúc này thiết bị I/O sẽ
làm cho tín hiệu ở INTR chuyển về mức thấp.
8. Thiết bị I/O sẽ đưa số ngắt được gán cho nó đến bộ vi xử lý
thông qua D-Bus. Bộ vi xử lý sẽ lưu trữ số ngắt này vào một
thanh ghi tạm thời
Phản ứng của vi xử lý khi có ngắt
9. Bộ vi xử lý lưu giá trị hiện thời của thanh ghi cờ vào stack.
10. Bộ vi xử lý xoá cờ ngắt
11. Bộ vi xử lý lưu giá trị hiện thời của CS vào stack.
12. Bộ vi xử lý lưu giá trị hiện thời của IP vào stack.
13. Bộ vi xử lý nhân số ngắt với 4. Kết quả này chính là địa chỉ
của nơi lưu trữ vector ngắt tương ứng trong bảng các vector
ngắt. Hai byte đầu tiên của vector ngắt được copy vào IP và
hai byte tiếp theo được copy vào CS.
14. Quay trở về bước 2.
8088 và một thiết bị ra đơn giản
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOW
74LS373
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D0
D1
D2
D3
D4
D5
D6
D7
OELE
8088 và một thiết bị vào đơn giản
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
74LS245
B0
B1
B2
B3
B4
B5
B6
B7
A0
A1
A2
A3
A4
A5
A6
A7
E DIR
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
8088 và thiết bị vào hoạt động theo cơ chế ngắt
INTR
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
74LS245
B7
B6
B5
B4
B3
B2
B1
B0
A7
A6
A5
A4
A3
A2
A1
A0
E
DIR
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
INTR
INTA
8088 và một thiết bị vào hoạt động theo cơ chế ngắt
INTRD Qset
Qclr
5V
5V
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
74LS245
B0
B1
B2
B3
B4
B5
B6
B7
A7
A6
A5
A4
A3
A2
A1
A0
E
DIR
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
5V
INTR
INTA
8088 và một thiết bị vào hoạt động theo cơ chế ngắt
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
74LS245
B7
B6
B5
B4
B3
B2
B1
B0
A7
A6
A5
A4
A3
A2
A1
A0
E
DIR
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
INTRD Qset
Qclr
5V
5V
INTR
INTA
INTA
8088 và một thiết bị vào hoạt động theo cơ chế ngắt
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
74LS245
B7
B6
B5
B4
B3
B2
B1
B0
A7
A6
A5
A4
A3
A2
A1
A0
E
DIR
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
INTRD Qset
Qclr
5V
5V
INTR
INTA
INTA
74LS245
B7
B6
B5
B4
B3
B2
B1
B0
A7
A6
A5
A4
A3
A2
A1
A0
E
DIR
D7
D6
D5
D4
D3
D2
D1
D0
INTA
5V
8088 và một thiết bị vào hoạt động theo cơ chế ngắt
A
1
5
8088
Minimum
Mode
A18
A0
:
D7
D6
IOR
IOW
A19
D5
D4
D3
D2
D1
D0
74LS245
B7
B6
B5
B4
B3
B2
B1
B0
A7
A6
A5
A4
A3
A2
A1
A0
E
DIR
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
INTRD Qset
Qclr
5V
5V
INTR
INTA
INTA
74LS245
B7
B6
B5
B4
B3
B2
B1
B0
A7
A6
A5
A4
A3
A2
A1
A0
E
DIR
D7
D6
D5
D4
D3
D2
D1
D0
INTA
5V
RESET
INT 3
A
1
5
8088
Minimum
Mode
A19
A0
:
D7
D6
IOR
IOW
D5
D4
D3
D2
D1
D0
A
1
4
A
1
3
A
1
2
A
1
1
A
1
0
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0IOR
5V
74LS245
B0
B1
B2
B3
B4
B5
B6
B7
A0
A1
A2
A3
A4
A5
A6
A7
E DIR
A15
A14
A13
A12
A11
A10
A9A8A7A6A5A4A3A2A1A0IOW
74LS373
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D0
D1
D2
D3
D4
D5
D6
D7
OELE
Chương trình chính
mov ax,0000
mov ds, ax
mov bx, 000C
mov ax, 2800
mov [bx], ax
mov ax, 5000
mov [bx+02], ax
sti
mov dx, F000
mov ah, 00
mov al, 01
L1: cmp ah, 88
je L4
out dx, al
mov cx, FFFF
L2: dec cx
jnz L2
cmp ah, 00
jne L3
rol al, 1
jmp L1
L3: ror al, 1
jmp L1
L4:
ISR bắt đầu từ 52800h Kết thúc
Chương trình con phục vụ ngắt (ISR)
mov bl, al
in al, dx
test al, 01
jnz S1
xor ah, FF
jmp S2
S1: test al, 80
jnz S2
mov ah, 88
S2: mov al, bl
iret
8259
8259
Khởi động 8259
ICW
ICW1, ICW2
ICW3, ICW4
OCW1 và OCW2
OCW3
8259 đơn
ICW1: 13H
ICW2: 08H
ICW3: 09H
Ví dụ: Mạch điều khiển ngắt ở PC
8259s nối tầng
8259s nối tầng