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ò

5V

A19 A18

:

A0

A0 B0 D7

A1 B1 D6

A2 B2 D5

A3 B3 D4

74LS245

A4 B4 D3

A5 B5 D2

A6 B6 D1

A7 B7 D0

8088 Minimum Mode

E DIR

mov dx, F000

IOR

IOW

L1: in al, dx cmp al, FF je L1 : :

IOR A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 A 1 5 A 1 4 A 1 3 A 1 2 A 1 1 A 1 0

5V A19

A18

The Circuit

:

A0

A0 B0 D7

A1 B1 D6

A2 B2 D5

A3 B3 D4

74LS245

A4 B4 D3

A5 B5 D2

A6 B6 D1

A7 B7 D0

8088 Minimum Mode

E DIR

IOR

IOW

D0 D1 D2 D3 D4 D5 D6 D7 Q0 Q1 Q2 Q3 Q4 74LS373 Q5 Q6 Q7

LE OE IOR A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 A 1 0 A 1 1 A 1 2 A 1 3 A 1 5 A 1 4

IOW A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 A 1 5 A 1 4 A 1 3 A 1 2 A 1 1 A 1 0

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

L1:

L2:

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

L3:

L7:

mov dx, F000 mov ah, 00 mov al, 01 out dx, al mov cx, FFFF dec cx jnz L2 cmp ah, 00 jne L3 rol al, 1 cmp al, 01 jne L1 jmp L4 ror al, 1 cmp al, 80 jne L1

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ò

L4:

L1:

L2:

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

L6:

jz L7 mov al, bl jmp L1

L3:

L7:

mov dx, F000 mov ah, 00 mov al, 01 out dx, al mov cx, FFFF dec cx jnz L2 cmp ah, 00 jne L3 rol al, 1 cmp al, 01 jne L1 jmp L4 ror al, 1 cmp al, 80 jne L1

Ngắt là gì?

Thăm dò

instruction

Memory

Input Device

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.

µP

THĂM DÒ

Ngắt

instruction

Memory

Input Device

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.

Interrupt request

µP

INTERRUPT

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

IP tăng lên 1.

2. Bộ vi xử lý tìm và lấy 1 byte lệnh. 3. 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

A19 A18

:

A0

D0 Q0 D7

D1 Q1 D6

D2 Q2 D5

D3 Q3 D4

74LS373

D4 Q4 D3

D5 Q5 D2

D6 Q6 D1

D7 Q7 D0

8088 Minimum Mode

LE OE

IOR

IOW

IOW A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 A 1 5 A 1 4 A 1 3 A 1 2 A 1 1 A 1 0

8088 và một thiết bị vào đơn giản

5V

A19 A18

:

A0

A0 B0 D7

A1 B1 D6

A2 B2 D5

A3 B3 D4

74LS245

A4 B4 D3

A5 B5 D2

A6 B6 D1

A7 B7 D0

8088 Minimum Mode

E DIR

IOR

IOW

IOR A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 A 1 5 A 1 4 A 1 3 A 1 2 A 1 1 A 1 0

8088 và thiết bị vào hoạt động theo cơ chế ngắt

5V A19

A18

:

A0

A7 B7 D7

A6 B6 D6

A5 B5 D5

A4 B4 D4

74LS245

A3 B3 D3

A2 B2 D2

A1 B1 D1

A0 B0 D0

8088 Minimum Mode

E DIR

IOR

IOW

INTR

INTA

INTR

IOR A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 A 1 5 A 1 4 A 1 3 A 1 2 A 1 1 A 1 0

8088 và một thiết bị vào hoạt động theo cơ chế ngắt

5V

A19

A18

:

A0

B0

A7

D7

B1

A6

D6

B2

A5

D5

B3

A4

D4

B4

A3

D3

74LS245

B5

A2

D2

B6

A1

D1

B7

A0

D0

8088 Minimum Mode

E

DIR

IOR

5V

IOW

INTR

5V

INTA

D

set

Q

INTR

clr

Q

IOR

A 9

A 8

A 7

A 6

A 5

A 4

A 3

A 2

A 1

A 0

A 1 4

A 1 3

A 1 2

A 1 1

A 1 0

A 1 5

5V

8088 và một thiết bị vào hoạt động theo cơ chế ngắt

5V

A19

A18

:

A0

B7

A7

D7

A6

B6

D6

A5

B5

D5

A4

B4

D4

A3

B3

D3

74LS245

A2

B2

D2

A1

B1

D1

A0

B0

D0

8088 Minimum Mode

E

DIR

IOR

5V

IOW

INTR

5V

INTA

D

set

Q

INTR

clr

Q

IOR

A 9

A 8

A 7

A 6

A 5

A 4

A 3

A 2

A 1

A 0

A 1 5

A 1 4

A 1 3

A 1 2

A 1 1

A 1 0

INTA

8088 và một thiết bị vào hoạt động theo cơ chế ngắt

5V

A19

A18

:

5V

A0

A7

B7

D7

A7

B7

D7

A6

B6

D6

A6

B6

D6

A5

B5

D5

A5

B5

D5

A4

B4

D4

A4 A3

B4 B3

D4 D3

74LS245

A3 A2

B3 B2

D3 D2

74LS245

A2

B2

D2

A1

B1

D1

A1

B1

D1

A0

B0

D0

A0

B0

D0

8088 Minimum Mode

E

INTA

DIR

E

DIR

IOR

5V

IOW

5V

INTR INTA

D

set

Q

INTR

clr

Q

IOR

A 9

A 8

A 7

A 6

A 5

A 4

A 3

A 2

A 1

A 0

A 1 0

A 1 1

A 1 2

A 1 3

A 1 5

A 1 4

INTA

8088 và một thiết bị vào hoạt động theo cơ chế ngắt

5V

A19

A18

INT 3

5V

: A0

B7

A7

D7

B7

A7

D7

B6

A6

D6

B6

A6

D6

B5

A5

D5

B5 B4

A5 A4

D5 D4

B4 B3

A4 A3

D4 D3

B3

A3

D3

74LS245

B2

A2

D2

74LS245

B2

A2

D2

B1

A1

D1

B1

A1

D1

B0

A0

D0

B0

A0

D0

8088 Minimum Mode

E

INTA

E

DIR

DIR

5V

IOR IOW

INTR

5V

INTA

D

set

Q

INTR

clr

Q

IOR

A 9

A 8

A 7

A 6

A 5

A 4

A 3

A 2

A 1

A 0

A 1 0

A 1 1

A 1 2

A 1 3

A 1 5

A 1 4

INTA

RESET

5V

A19

:

A0

A0 B0 D7

A1 B1 D6

A2 B2 D5

A3 B3 D4

74LS245

A4 B4 D3

A5 B5 D2

A6 B6 D1

A7 B7 D0

8088 Minimum Mode

E DIR

IOR

74LS373

IOW

Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 D0 D1 D2 D3 D4 D5 D6 D7

IOR LE OE A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 A 1 0 A 1 1 A 1 2 A 1 3 A 1 5 A 1 4

IOW A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 A 1 5 A 1 4 A 1 3 A 1 2 A 1 1 A 1 0

Chương trình chính

ISR bắt đầu từ 52800h

Kết thúc

L1:

L2:

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

L3:

cmp ah, 88 je L4 out dx, al mov cx, FFFF dec cx jnz L2 cmp ah, 00 jne L3 rol al, 1 jmp L1 ror al, 1 jmp L1

L4:

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