Về cơ bản kiến trúc của một vi xử lý gồm những phần cứng sau: - Đơn vị xử lý trung tâm CPU (Central Processing Unit). - Các bộ nhớ (Memories). - Các cổng vào/ra song song (Parallel I/O Ports). - Các cổng vào/ra nối tiếp (Serial I/O Ports). - Các bộ đếm/bộ định thời (Timers).
Ngoài ra với mỗi loại vi điều khiển cụ thể còn có thể có thêm một số phần cứng khác như bộ biến đổi tương tự-số ADC, bộ biến đổi số-tương tự DAC, các mạch điều chế dạng sóng WG, điều chế độ rộng xung...
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
A4 B4
D3
74LS245 B5
A5
D2
8088 A6 B6
D1
Minimum A7 B7
D0
Mode
E DIR
IOR
mov dx, F000
IOW
L1: in al, dx
cmp al, FF
je L1
A A A A A A A A A A A A A A A A IOR :
1111119876543210
:
543210
5V
A19
A18
The Circuit
:
A0
A0 B0
D7
A1 B1
D6
A2 B2
D5
A3 B3
D4
A4 B4
D3
74LS245 B5
A5
D2
8088 A6 B6
D1
Minimum A7 B7
D0
Mode
E DIR
D0 Q0
D1 Q1
IOR
D2 Q2
IOW D3 Q3
D4 Q4
D574LS373
Q5
D6 Q6
D7 Q7
LE OE
A A A A A A A A A A A A A A A A IOR
1111119876543210
543210
AAAAAAAAAAAAAAAAIOW
1111119876543210
543210
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 L4: mov bl, al
mov ah, 00
in al, dx
mov al, 01
cmp al, FF
L1: out dx, al
je L6
mov cx, FFFF
test al, 01
L2: dec cx
jnz L5
jnz L2
xor ah, FF
cmp ah, 00
jmp L6
jne L3
rol al, 1 L5: test al, 80
cmp al, 01 jz L7
jne L1 L6: mov al, bl
jmp L4 jmp L1
L3: ror al, 1
L7:
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ò
mov dx, F000 L4: mov bl, al
mov ah, 00 in al, dx
mov al, 01 cmp al, FF
L1: out dx, al je L6
mov cx, FFFF
test al, 01
L2: dec cx
jnz L5
jnz L2
xor ah, FF
cmp ah, 00
jmp L6
jne L3
L5: test al, 80
rol al, 1
jz L7
cmp al, 01
L6: mov al, bl
jne L1
jmp L4 jmp L1
L3: ror al, 1 L7:
cmp al, 80
jne L1
Ngắt là gì?
Thăm dò
instruction
Input Memory
While studying, I’ll
check the bucket every Device
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
Input Memory
I’ll just study. When the
speaker starts playing Device
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.
•
Bộ vi xử lý được khởi động:
1.
– (IP) = 0000h
– (CS) = FFFFh
– IF = 0
Bộ vi xử lý tìm và lấy 1 byte lệnh.
2.
IP tăng lên 1.
3.
Bộ vi xử lý giải mã và thực hiện lệnh nếu tất cả các byte lệnh
4.
của một lệnh đã được lấy.
Quay trỏ lại bước 2.
5.
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.
Bộ vi xử lý sẽ hoàn thành lệnh đang thực hiện trước khi chấp
6.
nhận ngắt
Bộ vi xử lý chấp nhận ngắt bằng cách đưa ra tín hiệu chấp
7.
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.
Thiết bị I/O sẽ đưa số ngắt được gán cho nó đến bộ vi xử lý
8.
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
Bộ vi xử lý lưu giá trị hiện thời của thanh ghi cờ vào stack.
9.
Bộ vi xử lý xoá cờ ngắt
10.
Bộ vi xử lý lưu giá trị hiện thời của CS vào stack.
11.
Bộ vi xử lý lưu giá trị hiện thờI của IP vào stack.
12.
Bộ vi xử lý nhân số ngắt với 4. Kết quả này chính là địa chỉ
13.
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.