Tài liệu Các phương pháp điều khiển vào ra dữ liệu - Pdf 85


CÁC PHƯƠNG PHÁP ĐIỀU KHIỂN
VÀO RA DỮ LIỆU
Mục lục
1. GIỚI THIỆU CÁC PHƯƠNG PHÁP ĐIỀU KHIỂN VÀO/RA DỮ LIỆU.
2. VÀO RA DỮ LIỆU BẰNG PHƯƠNG PHÁP QUÉT VÒNG.
3. VÀO RA DỮ LIỆU BẰNG PHƯƠNG PHÁP NGẮT.
Nội dung
CÁC PHƯƠNG PHÁP ĐIỀU KHIỂN VÀO RA DỮ LIỆU
1. GIỚI THIỆU CÁC PHƯƠNG PHÁP ĐIỀU KHIỂN VÀO/RA DỮ LIỆU.
Như đã biết hệ thống CPU bao gồm 3 phần chính : CPU, bộ nhớ và vào ra. Trong đó
CPU đóng vai trò là nơi chỉ đạo tất cả các hoạt động của các nơi còn lại. Đối với bộ nhớ
chúng có tốc độ hoạt động khá nhanh, có thể đáp ứng gần như tức thời khi CPU truy
cập, mặt khác bộ nhớ sử dụng lưu trữ các hằng và biến nên khi cần chúng sẽ được truy
xuất bằng một lệnh truyền dữ liệu, khi đó dữ liệu đã có sẵn trong bộ nhớ mà không
phải chờ đáp ứng từ bên ngoài. Còn đối với vào ra thông thường có tốc độ đáp ứng
chậm, mặt khác đôi khi chúng còn phải chờ tác động từ bên ngoài (ví dụ như khi đọc
bàn phím CPU phải chờ cho người sử dụng nhấn phím …). Khi hệ thống CPU có nhiều
thiết bị vào ra có thể thực hiện ba giải pháp quản lý thiết bị bao gồm:
- Vào ra dữ liệu bằng phương pháp quét vòng (polling).
- Vào ra dữ liệu bằng ngắt (interrupt).
- Vào ra dữ liệu bằng phương pháp thâm nhập trực tiếp bộ nhớ ( DMA -Direct
Memory Access).
Với phương pháp quét vòng CPU sẽ hoạt động theo chế độ phân chia thời gian, nó sẽ
kiểm tra lần lượt từng thiết bị và thực hiện chương trình phục vụ khi có thiết bị hoạt
động. Với phương pháp ngắt thiết bị hoạt động sẽ thông báo để CPU biết phục vụ nó.
Còn với phương pháp vào ra bằng DMA, CPU sẽ được yêu cầu ngưng hoạt động để
thiết bị vào ra (thường là ổ đĩa) truyền dữ liệu theo từng khối với bộ nhớ.

bằng các bộ vào ra có lập trình, việc thiết kế mạch sẽ đơn giản hơn rất nhiều vì các mạch
tạo tín hiệu bắt tay được tích hợp ngay trong chip vào ra này. Hình 6.2 trình bày sơ đồ
vào ra có bắt tay sử dụng 8255. Trên sơ đồ, 8255 đóng vai trò giao tiếp với một thiết bị
vào và một thiết bị ra. Cổng A của 8255 dành cho việc truyền dữ liệu vào, PC
4
, PC
5
sử
dụng làm các thiết bị bắt tay vào. Khi thiết bị vào có dữ liệu truyền, trước hết nó kiểm
tra tín hiệu ACK, nếu tín hiệu này tích cực thì dữ liệu truyền trước đó chưa được CPU
đọc vào, nếu ACK không tích cực thiết bị sẽ cung cấp tín hiệu STB để cài dữ liệu vào
PA của 8255, 8255 sẽ nhận dữ liệu và tác động ACK. Tín hiệu STB sẽ được giữ nguyên
cho đến khi ACK hết tích cực, do đó CPU có thể kiểm tra tín hiệu này để xác định đã có
dữ liệu sẵn sàng chưa. Khi CPU đọc dữ liệu từ cổng A, STB và ACK sẽ được xoá. Một
giao tiếp gần tương tự sẽ sử dụng cho thiết bị ra.
3. VÀO RA DỮ LIỆU BẰNG PHƯƠNG PHÁP NGẮT.
i. Khái quát.
Với phương pháp quét vòng dù chỉ kết nối thụ động theo dữ liệu hay có bắt tay, CPU
đều đóng vai trò chủ động nó đi quét thường xuyên các thiết bị xem có cần phục vụ hay
Thiết bị
vào
STB
Mạch cài
G
Mạch
đệm
OC
pr
Q D
clk

PA
0
-PA
7
PC1
PC2
CPU
D
0
-D
7
Hình 6.2: Vào ra có bắt tay sử dụng 8255
PB
0
-PB
7
không. Giải pháp này sẽ làm lẵng phí thời gian của CPU khi các thiết bị không có nhu
cầu phục vụ thường xuyên, mà CPU vẫn phải thực hiện chương trình kiểm tra. Có một
giải pháp vào ra khác tránh được nhược điểm trên, đó là cơ chế ngắt. Trong giải pháp
này các thiết bị có yêu cầu phục vụ sẽ nhắc chừng CPU bằng cách cung cấp tín hiệu từ
ngoài, lúc này CPU sẽ tạm ngưng công việc nó đang thực hiện để phục vụ thiết bị, khi
thiết bị được phục vụ xong CPU sẽ quay về với công việc mà nó đang thực hiện dở.
Hầu hết các họ vi xử lý đều cho phép ngưng chương trình bình thường đang thực hiện
để chuyển qua một chương trình tại vị trí đặc biệt, bằng một số tín hiệu cung cấp từ
bên ngoài hoặc một số lệnh đặc biệt trong chương trình. Việc chuyển điều khiển này
giống như cơ chế gọi chương trình con, hoạt động được chuyển từ chương trình chính
qua chương trình con phục vụ cho ngắt.
Thông thường các CPU có hai tín hiệu để nhận các tín hiệu yêu cầu ngắt là: ngắt
không che (NMI - Non Mask able Interrupt), và ngắt có thể che được bằng phần mềm
(INT - Interrupt). Tín hiệu yêu cầu ngắt NMI có độ ưu tiên cao hơn INT, và khi nhận

trình đang thực hiện. Trường hợp này được gọi là ngắt ngoại lệ (exception).
Tại cuối mỗi chu kỳ thực hiện lệnh 8086/8088 sẽ kiểm tra các yêu cầu ngắt. Khi có yêu
cầu 8086 sẽ đáp ứng bằng các bước sau:
- Nạp thanh ghi cờ vào đỉnh ngăn xếp và giảm thanh ghi con trỏ ngăn xếp đi 2.
- Không cho phép ngắt INT bằng cách xóa cờ ngắt IF trong thanh ghi cờ.
- Xóa cờ bẫy TF trong thanh ghi cờ.
- Nạp thanh ghi đoạn lệnh CS vào đỉnh ngăn xếp và giảm con trỏ ngăn xếp đi 2.
- Nạp thanh ghi con trỏ lệnh IP vào đỉnh ngăn xếp và giảm con trỏ ngăn xếp đi 2.
- Nhảy xa tới chương trình con phục vụ ngắt tương ứng theo yêu cầu.
Quá trình trên được tổng kết trong hình 6.4. Như trên hình vẽ, 8086 cất thanh ghi cờ
vào đỉnh ngăn xếp, không cho phép ngõ vào yêu cầu ngắt INTR và chức năng chạy
từng bước, rồi thực hiện lệnh gọi xa tới chương trình phục vụ ngắt. Lệnh IRET tại cuối
chương trình phục vụ ngắt sẽ chuyển điều khiển quay về chương trình chính.
Như đã biết khi thực hiện lệnh gọi xa 8086/8088 sẽ lập giá trị mới cho thanh ghi đoạn
CS và thanh ghi con trỏ lệnh IP. Để thực hiện việc gọi xa gián tiếp, 8086 lấy giá trị mới
cho CS và IP từ 4 ô nhớ. Tương tự như vậy khi đáp ứng ngắt 8086/8088 cũng lấy địa
chỉ chương trình ngắt từ 4 ô nhớ liên tiếp. Trong hệ thống 8086/8088, 1KB bộ nhớ từ
địa chỉ 00000H tới địa chỉ 003FFH được dành riêng để chứa các địa chỉ của các chương
trình ngắt được gọi là bảng vector ngắt, hay bảng con trỏ ngắt. Mỗi địa chỉ sẽ chứa
trong 4 ô nhớ, nên bảng này sẽ chứa được địa chỉ của 256 chương trình ngắt. Hình 6.5
trình bày bảng vector ngắt. Chú ý là giá trị nạp cho thanh ghi con trỏ lệnh (IP) luôn đặt
PUSH FLAGS
CLEAR IF
CLEAR TF
PUSH CS
PUSH IP
Nhảy tới chương
trình ngắt
POP IP
POP CS

Ngắt này sẽ thực hiện chương trình theo từng lệnh, khi này có thể xem nội dung của các
ô nhớ và các thanh ghi để kiểm tra kết quả của lệnh. Khi lệnh đã thực hiện đúng có thể
cho phép CPU thực hiện lệnh tiếp theo. Nói cách khác trong chế độ chạy từng bước
Con trỏ ngắt kiểu 255
Con trỏ ngắt kiểu 33
Con trỏ ngắt kiểu 32
Con trỏ ngắt kiểu 31 (dự trữ)
Con trỏ ngắt kiểu 5 (dự trữ)
Con trỏ ngắt kiểu 4 (tràn)
Con trỏ ngắt kiểu 3 (1byte lệnh INT)
Con trỏ ngắt kiểu 2 (ngắt không che)
Con trỏ ngắt kiểu 1 (chạy từng bước)
Con trỏ ngắt kiểu 0 (lỗi chia)
03FFH
03FCH
084H
080H
014H
010H
00CH
008H
004H
000H
244 vector
ngắt đã sử
dụng
27 vector
ngắt dự
phòng
5 vector

nhị phân có dấu. Đối với số nhị phân có dấu, bit cao nhất bằng 1 sẽ chỉ thị số âm và
giá trị sẽ là bù 2, như vậy kết quả ở trên sẽ là -67 thập phân. Có hai cách để phát hiện
và đáp ứng một lỗi tràn. Cách thứ nhất có thể sử dụng lệnh JO (nhảy khi cờ tràn = 1)
ngay sau các lệnh số học, nếu cờ tràn được thiết lập sau lệnh số học điều khiển chương
trình sẽ được chuyển tới địa chỉ thị trong lệnh JO để có thể xử lý lỗi tràn. Cách thứ hai
là việc phát hiện và đáp ứng một lỗi tràn được đặt vào một ngắt. Trong chương trình sau
các lệnh số học sẽ đặt lệnh INT 0 để chuyển tới chương trình ngắt khi cờ ngắt được lập.
- Các ngắt mềm từ 0 tới 255.
Lệnh INT của 8086/8088 có thể sử dụng để gọi các ngắt mềm từ 0 tới 255. Ngắt được
gọi sẽ chỉ thị bằng số hiệu của nó trong lệnh INT, ví dụ INT 32H sẽ gọi chương trình
ngắt 32H. Địa chỉ chương trình ngắt trong bảng vector ngắt sẽ nằm tại địa chỉ bằng số
hiệu ngắt nhân 4. Lệnh INT có nhiều cách sử dụng, có thể dùng INT 0 để chạy thử
chương trình phục vụ ngắt chia cho 0, mà không cần phải thực hiện lệnh chia cho 0
thực sự, hoặc cũng có thể thử chương trình ngắt NMI bằng lệnh INT 2 mà không cần có
tín hiệu yêu cầu ngắt đưa vào chân NMI.
- Các yêu cầu ngắt kiểu 0 tới 255.
Ngõ vào INTR của 8086 cho phép nhận các tín hiệu yêu cầu ngắt từ bên ngoài để thực
hiện các chương trình ngắt tương ứng với chúng. Khác với ngõ vào NMI, INTR có thể
che được bằng phần mềm. Nếu cờ ngắt IF bị xóa thì các yêu cầu đưa tới INTR sẽ
không được đáp ứng. Cờ ngắt IF có thể thiết lập bằng lệnh STI, và xóa bằng lệnh
CLI. Khi reset cờ ngắt IF sẽ tự động được xóa, như vậy trước khi muốn 8086 đáp ứng
ngắt cần phải lập IF.
Khi chuyển điều khiển qua chương trình ngắt, cờ ngắt cũng tự động được xóa. Điều này
được thực hiện do 2 nguyên nhân sau: nguyên nhân thứ nhất là do nếu không xóa cờ
ngắt thì khi chương trình phục vụ một ngắt này đang thực hiện có thể sẽ có một yêu
cầu ngắt mới, làm điều khiển chương trình sẽ chuyển tiếp tới một chương trình ngắt
mới nữa. Nếu muốn điều đó xảy ra thì chỉ việc thực hiện lệnh lập IF tại đầu chương
trình ngắt. Nguyên nhân thứ hai là nếu không xóa IF thì khi trạng thái mức cao tại ngõ
vào INTR còn được giữ chương trình ngắt sẽ bị gọi lại trong chính nó nhiều lần. Lệnh
IRET tại cuối chương trình ngắt sẽ phục hồi thanh ghi cờ, điều này làm cho cờ ngắt trở

ra thiết bị chỉ cần cung cấp 7 bit cao, còn bit có trọng số nhỏ nhất (D0) luôn có giá trị là
0, vì giá trị mới trong thanh ghi PC phải được giữ trong hai ô nhớ liên tiếp.
Dựa theo nguyên tắc hoạt động trên, người sử dụng có thể lập một loạt địa chỉ của các
chương trình phục vụ ngắt cho các thiết bị khác nhau tại một vùng nhớ nào đó gọi là
bảng vector ngắt. Khi hệ thống bắt đầu hoạt động có thể nạp địa chỉ trang ngắt bằng lệnh
LD I,A. Mỗi thiết bị sẽ yêu cầu chương trình phục vụ ngắt của mình bằng cách cung
cấp 7 bit địa chỉ còn lại.
Có thể biểu diễn hoạt động của ngắt mode 2 của Z80 trên hình 6.6 :
- Ngắt không che: NMI
Ngắt không che của Z80 sẽ được thực hiện bất chấp giá trị của cờ ngắt IFF, khi đáp
ứng ngắt này cờ ngắt IFF sẽ bị xóa, thanh ghi PC được nạp vào đỉnh ngăn xếp và điều
khiển chương trình sau đó sẽ chuyển qua địa chỉ 0066H. Tương tự như ngắt INT
mode 1, tại địa chỉ này có thể là chương trình phục vụ ngắt cũng có thể chỉ là một lệnh
nhảy tới chương trình phục vụ ngắt.
iv. BỘ ĐIỀU KHIỂN NGẮT 8259.
• Khái quát và nối ghép với hệ thống.
8259 được gọi là bộ điều khiển ngắt ưu tiên, nó nhận các tín hiệu yêu cầu ngắt từ
thiết bị để cung cấp tới CPU theo trình tự ưu tiên. Sơ đồ khối của 8259 được thực hiện
như hình 6.7:
.
.
.
Byte thấp của địa chỉ
chương trình phục vụ ngắt
(UVh)
Byte cao của địa chỉ
chương trình phục vụ ngắt
(XYh)
Chương trình phục vụ
ngắt

WR
RD
A0
CS
CAS0
CAS1
CAS2
CP/EN
IR0
IR7
INTA INT
Hình 6.7: Sơ đồ khối bộ điều khiển ngắt 8259.
Trước hết xem xét chức năng của các tín hiệu. Các tín hiệu của 8259 được chia thành 3
nhóm chính:
- Bus dữ liệu D0 - D7 sử dụng để CPU lập trình 8259 hoạt động theo các chế độ
khác nhau, và theo chiều ngược lại sử dụng để 8259 cung cấp vector ngắt tới CPU.
- Các tín hiệu yêu cầu ngắt IR0 - IR7 nhận tín hiệu yêu cầu ngắt từ các thiết bị.
- Các tín hiệu điều khiển bao gồm :
+ RD, WR nhận điều khiển từ CPU để xác định chiều truyền dữ liệu giữa CPU và 8259.
+ A0 xác định các vị trí khác nhau trong 8259 truyền nhận dữ liệu với CPU.
CS chọn mạch: nhận tín hiệu từ giải mã địa chỉ chọn mạch cho phép 8259 được phép
hoạt động.
+ CAS0 - CAS3 (Cascade): tín hiệu sử dụng cho việc ghép tầng 8259.
+ SP/EN: khi 8259 làm việc ở chế độ không có đệm trên bus dữ liệu thì tín hiệu này sử
dụng để chọn 8259 là mạch chủ hay mạch tớ. Còn khi 8259 có đệm thì tín hiệu này đóng
vai trò là tín hiệu cho phép EN để mở cổng đệm dữ liệu tại thời điểm thích hợp.
+ INT sử dụng cung cấp yêu cầu ngắt tới CPU, INTA nhận tín hiệu chấp nhận tín
hiệu yêu cầu ngắt từ CPU.
• Chức năng các thanh ghi bên trong 8259 bao gồm:
- Thanh ghi mặt nạ ngắt (IMR) sử dụng để cho phép (unmask) hoặc không cho phép

8080/8085 thì IC4=0 và như vậy các bit của ICW4 sẽ bị xóa về 0. Bit D1 (SNGL)
định nghĩa 8259 hoạt động trong chế độ chỉ có 1 mạch chủ hay có thêm các mạch tớ. D2
(ADI) định nghĩa khoảng cách địa chỉ của bảng vector ngắt. D3 (LITM) định nghĩa
ngõ vào yêu cầu ngắt tác động mức hay cạnh. Các bit còn lại là các bit địa chỉ
A7A6A5 trong hệ thống 8080/85, đối với các hệ thống 16/32 bit chúng không xác
định.
ICW1:
ICW2:
ICW2 là 8 bit địa chỉ cao của vector ngắt (AD15 - AD8) trong hệ thống 8080/85, là
vector ngắt (T7- T3)trong hệ thống 8086/88.
ICW3 mạch chủ:
T0T1T2T3T4T5T6T7
A0=1
IC4SNGLADILTIM1A5A6A7
A0=0
1: Cần ICW4
0: bỏ ICW4
Address Interval:
K/c giữa các vector ngắt
1: 4 byte (80x86/88)
0: 8 byte (8080/85)
Single:
1: chỉ có 1 mạch 8259
0: nhiều mạch 8259
Là địa chỉ vector đối với 8080/85
Không xác định với hệ 16/32 bit
Level Trigger Mode: Chế độ của xung yêu cầu ngắt
1: theo mức dương
0: theo cạnh lên
S0S1S2S3S4S5S6S7

000 cho mạch tớ tại ngõ vào IR0 …
111 cho mạch tớ tại ngõ vào IR7.
µPM
AEOIM/SBUFSFNM
N
000A0=1
µP mode
1: 8086/88
0: 8080/8085
Auto End Of Interrupt:
1: EOI tự động
0: EOI thông thường
0x: Chế độ không đệm
10: Chế đệm mạch tớ
11: Chế độ đệm mạch chủ
Special Fully Nested Mode
Chế độ lồng hoàn toàn.
1: SFNM


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status