1. Trang chủ
  2. » Công Nghệ Thông Tin

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

30 1,8K 16
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Các phương pháp điều khiển vào ra dữ liệu
Trường học Trường Đại học Bách Khoa Hà Nội
Chuyên ngành Kỹ thuật Điều Khiển Tự Động
Thể loại Giáo trình
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 30
Dung lượng 783,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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... Lệnh IRET tại

Trang 1

CÁC PHƯƠNG PHÁP ĐIỀU KHIỂN

VÀO RA DỮ LIỆU

Trang 2

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ớ

Mỗi phương pháp điều khiển vào ra dữ liệu nêu trên có các đặc điểm khác nhau và sẽ được ứng dụng trong các trường hợp khác nhau, chúng sẽ được mô tả cụ thể trong các mục kế tiếp của chương

2 VÀO RA DỮ LIỆU BẰNG PHƯƠNG PHÁP QUÉT VÒNG.

Như đã nói trong phương pháp quét vòng CPU sẽ kiểm tra lần lượt từng thiết bị có trong hệ thống của nó Đối với các thiết bị luôn sẵn sàng hoạt động thiết bị có thể truyền dữ liệu một cách hoàn toàn thụ động tới vào ra, CPU sẽ mở cửa vào ra để đọc dữ liệu hoặc ghi dữ liệu tới thiết bị khi chúng tới vòng phục vụ Lúc này các bộ vào ra chỉ đóng vai trò là các cổng ngăn cách giữa Bus hệ thống và thiết bị, để các hoạt động của thiết bị không ảnh hưởng tới hệ thống trong khi CPU phục vụ các thiết bị khác Ví dụ như trong hệ thống đo nhiệt độ và hiển thị lên LED 7 đoạn: cứ tới vòng phục vụ CPU sẽ đọc được giá trị số tương ứng với nhiệt độ đầu dò luôn sẵn sàng tại ngõ ra bộ biến đổi A/D, và sau đó sẽ cung cấp ra LED 7 đoạn để hiển thị Và nếu vòng phục vụ đủ ngắn, có thể luôn thấy nhiệt độ cần đo hiển thị trên LED trong khi các thiết bị khác của hệ thống vẫn được phục vụ Tuy nhiên trong thực tế không phải tất cả các thiết bị làm việc với CPU đều luôn ở trạng thái sẵn sàng như trên Nên rất dễ xảy ra khả năng tới vòng phục vụ mà thiết bị chưa sẵn sàng truyền dữ liệu với CPU Để chắc chắn truyền được dữ liệu với

Trang 3

thiết bị trong phương pháp thăm dò khi tới vòng phục vụ, trước khi thực hiện việc truyền dữ liệu CPU sẽ kiểm tra trạng thái của thiết bị bằng cách đọc vào các tín hiệu bắt tay (Handshake Signal) Ví dụ trên hình 6.1 trình bày mạch giao tiếp vào (Input) có bắt tay giữa một thiết bị và CPU.

Trên hình 6.1 khi thiết bị vào có dữ liệu truyền cho CPU, nó cung cấp tín hiệu STB để cài dữ liệu vào bộ cài đồng thời kích cho mạch lật tạo tín hiệu sẵn sàng làm việc mức 1 Khi tới vòng phục vụ của thiết bị này, trước hết CPU đọc cổng 0 (CS0 = 0) nếu được dữ liệu với bit D0 = 1 thì nó hiểu rằng thiết bị này đã sẵn sàng làm việc Khi CPU đọc cổng

1 (CS1 = 0) để lấy dữ liệu nó sẽ xoá luôn tín hiệu sẵn sàng để chuẩn bị cho lần truyền dữ liệu tiếp theo

Trong các hệ thống vi xử lý các mạch vào ra có bắt tay thông thường được thực hiện 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, PC4, PC5 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.

Mạch càiG

Mạch đệmOC

pr

Q D clk clr

D0 –D7

8255PC4PC5

PA0-PA7

PC1PC2

CPU

D0-D7

Hình 6.2: Vào ra có bắt tay sử dụng 8255

PB0-PB7

Trang 4

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 được tín hiệu NMI thì CPU bắt buộc phải chuyển điều khiển qua chương trình ngắt Còn khi nhận được tín hiệu INT thì CPU còn đi xét cờ ngắt, nếu cờ ngắt đã được lập nó sẽ chuyển điều khiển qua chương trình ngắt, còn nếu cờ ngắt chưa được lập thì yêu cầu ngắt sẽ không được phục vụ Cờ ngắt có thể được lập hay xóa bằng lệnh hợp ngữ trong chương trình, với các công việc quan trọng không cho phép tạm ngưng chúng ta có thể cấm ngắt bằng lệnh xoá cờ ngắt ở đầu chương trình

Để phục vụ ngắt được nhiều thiết bị, trong các hệ thống vi xử lý thường sử dụng bộ điều khiển ngắt Các tín hiệu yêu cầu sẽ được đưa tới bộ điều khiển ngắt và tùy theo thứ tự ưu tiên sẽ gửi tới CPU như hình 6.3

Nếu chỉ có một yêu cầu ngắt nó sẽ được chuyển ngay tới CPU, nếu có nhiều yêu cầu ngắt xảy ra đồng thời thì yêu cầu nào có độ ưu tiên cao hơn sẽ được bộ điều khiển ngắt gửi tới CPU phục vụ trước Độ ưu tiên sẽ được lập trình khi khởi động bộ điều khiển ngắt

ii Ví dụ về cơ chế ngắt của CPU 8086/8088 và Z80.

Cơ chế ngắt của CPU 8086/8088.

Khái quát:

Một yêu cầu ngắt trong hệ thống 8086/8088 có thể cung cấp từ một trong 3 nguồn sau:

- Nguồn thứ nhất cung cấp từ bên ngoài qua các ngõ vào INTR (Interrupt Request), hoặc NMI, chúng được gọi là các ngắt cứng

ngắt

INTRINTA

Các yêu cầu ngắt

Hình 6.3: Cung cấp các yêu cầu ngắt cho CPU thông qua bộ điều khiển ngắt

Trang 5

- Nguồn thứ 2 thực hiện bằng một lệnh ngắt trong chương trình (INT), trường hợp này được gọi là ngắt mềm.

- Nguồn thứ ba xuất phát từ một số điều kiện lỗi trong một số lệnh mà chương trình thực hiện Ví dụ như khi thực hiện lệnh chia cho 0, 8086/8088 sẽ tự động ngắt chương 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 FLAGSCLEAR IFCLEAR TFPUSH CSPUSH IPNhảy tới chương trình ngắt

POP IPPOP CSPOP FLAGS

PUSH các thanh ghi

POP các thanh ghiIRET

Hình 6.4: Qui trình phục vụ ngắt của 8086/8088

Trang 6

tại địa chỉ thấp, còn cho thanh ghi đoạn lệnh (CS) nằm ở địa chỉ cao Mỗi từ kép cho một vector ngắt được nhận dạng bằng một số trong khoảng từ 0 tới 255 Nó được gọi là số hiệu ngắt hay số kiểu ngắt.

Trong bảng 5 vector ngắt đầu tiên dành cho các ngắt đặc biệt, các vector từ 5 tới 31 dự phòng cho các thế hệ vi xử lý sau của Intel, các vector từ 32 tới 255 đã được sử dụng cho các ngắt cứng và các ngắt mềm Do mỗi vector ngắt gồm 4 byte, vì thế 8086/8088 sẽ xác định địa chỉ của các vector ngắt trong bảng bằng cách nhân số hiệu ngắt với 4 Người sử dụng cũng có thể thay thế địa chỉ chương trình của mình vào bảng vector ngắt, lúc này mỗi lần xảy ra ngắt điều khiển sẽ được chuyển tới chương trình của người sử dụng thay vì chuyển tới chương trình phục vụ ngắt cũ

Các kiểu ngắt của 8086/8088.

- Ngắt kiểu 0 : chia cho 0.

8086/8088 sẽ tự động thực hiện ngắt kiểu 0 khi kết quả các phép chia vượt quá khả năng chứa trong thanh ghi đích Khi đó các cờ, CS, IP sẽ được nạp vào đỉnh ngăn xếp,

IF và TF sẽ bị xóa Sau đó CS và IP sẽ được nạp giá trị mới từ các địa chỉ 00002Hvà 00000H trong bảng vector ngắt

Vì ngắt 0 xảy ra một cách tự động không thể cấm được, do đó để tránh ngắt này trong chương trình phải kiểm tra để chắc rằng số chia khác 0 Hoặc viết một chương trình phục vụ ngắt mới, sau đó đổi vector ngắt hiện có trong bảng, nhưng khi đó chương trình sẽ khá phức tạp

- Ngắt kiểu 1: Chạy từng bước.

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 33Con 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 ngắt dành riêng

Hình 6.5: Bảng vector ngắt trong hệ thống 8086/8088

Trang 7

8086 ngưng lại sau khi chạy xong mỗi lệnh, và chờ quyết định tiếp theo từ người sử dụng Nhờ việc lập xóa thanh ghi cờ nên thủ tục chạy từng bước thực hiện khá dễ dàng trong hệ thống 8086.

Khi cờ bẫy được lập, 8086 sẽ tự động thực hiện ngắt 1 sau khi thực hiện xong một lệnh, với vector ngắt được lấy trong bảng vector ngắt tại các địa chỉ từ 00004H tới 00008H Khi đó cờ bẫy sẽ được lập các thanh ghi được lưu vào đỉnh ngăn xếp, chương trình con phục vụ cho ngắt 1 sẽ tùy thuộc theo hệ thống Chú ý là không có lệnh thiết lập hay xóa cờ bẫy, muốn thực hiện công việc trên cần nạp thanh ghi cờ vào đỉnh ngăn xếp sau đó sử dụng một lệnh xử lý dữ liệu để lập bit, và cuối cùng phục hồi lại thanh ghi cờ từ đỉnh ngăn xếp Trong quá trình thực hiện chương trình phục vụ ngắt cờ bẫy sẽ được xóa

- Ngắt kiểu 2: Phục vụ ngắt không che.

8086/8088 sẽ tự động thực hiện ngắt 2 khi nhận được một cạnh lên tại ngõ vào NMI Ngắt này luôn được thực hiện mà không bị che bởi phần mềm, vì thế ngắt này thường được sử dụng cho các công việc quan trọng Ví dụ có thể sử dụng ngắt 2 để backup chương trình khi mất nguồn

- Ngắt kiểu 3 : Thiết lập điểm dừng trong chương trình.

Ngắt này được sử dụng cho việc gỡ rối một chương trình Khi chèn vào chương trình một điểm dừng hệ thống sẽ thực hiện các lệnh của chương trình cho tới điểm dừng rồi chuyển điều khiển qua thủ tục ngắt 3 Tùy theo từng hệ thống, thủ tục ngắt 3 có thể gửi nội dung các thanh ghi, hoặc các ô nhớ lên màn hình rồi chờ cho tới khi nhận được lệnh kế tiếp từ người sử dụng

- Ngắt kiểu 4 : Ngắt tràn.

Cờ tràn OF của 8086 sẽ tự động được thiết lập sau khi thực hiện các phép tính số học mà kết quả có sự tràn bit 1 qua bit có trọng số lớn nhất Ví dụ khi cộng 01101100 (108 thập phân) với 01010001 (81 thập phân) kết quả sẽ là 10111101 (189 thập phân) Kết quả này chỉ đúng đối với phép cộng số nhị phân không dấu, mà không đúng đối với số 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ẽ

Trang 8

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ở về mức 1 tiếp tục cho phép 8086/8088 đáp ứng ngắt

Để nhận được nhiều yêu cầu ngắt hệ thống 8086/8088 sử bộ điều khiển ngắt 8259 8086/8088 sẽ nhận một trong các đường yêu cầu ngắt IR để gửi tới chân yêu cầu ngắt INTR của 8086 Nếu cờ IF được lập 8086 sẽ trả lời yêu cầu ngắt bằng tín hiệu INTA (Interrupt Acknowledge), sau đó nó sẽ đọc vào vector ngắt cung cấp từ 8259 qua các đường dữ liệu thấp D0 tới D7 Vector ngắt chính là số hiệu ngắt được lập trình trước trong 8259 nó sẽ được nhân với 4 để xác định vị trí chứa địa chỉ chương trình phục vụ ngắt trong bảng vector ngắt Khi có đồng thời 2 hoặc nhiều nguồn yêu cầu ngắt, 8086 sẽ đáp ứng cho ngắt có độ ưu tiên cao nhất, sau đó sẽ tới các ngắt có độ ưu tiên tiếp theo Độ ưu tiên của các ngắt cũng được lập trình trước trong 8259

iii Cơ chế ngắt của Z80.

- Ngắt có thể che:

Trong hệ thống Z80 ngắt INT sẽ tác động ở cạnh xuống của tín hiệu đưa tới ngõ vào INT, và cờ ngắt IFF đã được thiết lập bằng lệnh EI Cờ ngắt cũng bị xóa khi chương trình ngắt được thực hiện, khi reset, hoặc khi thực hiện lệnh DI Khi đáp ứng ngắt INT CPU Z80 có thể hoạt động ở một trong 3 chế độ: Mode 0, Mode 2 và Mode 3 tùy thuộc vào lệnh khởi tạo chế độ ngắt thực hiện trước khi có tín hiệu yêu cầu ngắt là IM0, IM1 hay IM2

Mode 0: khi đáp ứng ngắt mode 0 CPU Z80 sẽ yêu cầu thiết bị cung cấp một lệnh vào BUS dữ liệu, thường là lệnh RST (vì khi này cơ chế cung cấp lệnh sẽ đơn giản do chỉ có một byte), nhưng cũng có thể là một lệnh gọi chương trình con hoặc một lệnh bất kỳ nào đó

Mode 1: khi đáp ứng trong mode này Z80 sẽ nhảy tới địa chỉ 0038H, 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 ngắt Cũng có thể sử dụng một lệnh nhảy gián tiếp (ví dụ JP (HL)) để có thể quyết định địa chỉ chương trình ngắt trước khi có tín hiệu yêu cầu ngắt

Mode 2 : Mode này là khả năng đáp ứng ngắt mạnh nhất của CPU Z80 Khi khởi động mode này, CPU sẽ thực hiện chương trình phục vụ ngắt tại địa chỉ chứa trong các ô nhớ có địa chỉ cung cấp bởi thanh ghi địa chỉ trang ngắt I và thiết bị yêu cầu ngắt Thanh ghi

I cung cấp 8 bit cao, còn thiết bị yêu cầu ngắt sẽ cung cấp 8 bit thấp của ô nhớ đó Thực

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

Trang 9

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

Thanh ghi I 7 bit do thiết

bị cung cấp 0

nnmmH

Hình 6.6: Hoạt động của ngắt INT mode 2 của Z80

DATA BUS BUFFER

READ/WRITE LOGIC

CASCADE BUFFER / COMPARATOR

CONTROL LOGIC

INTERRUPT MASK REG

(IMR)

PRIORITY RESOLVER

INTERRUPT REQUEST REG (IRR)

IN SERVICE REG (ISR)

Trang 10

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 (mask) phục vụ các ngõ vào yêu cầu ngắt Mỗi bit trong thanh ghi này sẽ tương ứng với một ngõ vào yêu cầu ngắt Có thể không cho phép một ngõ vào đó bằng cách ghi 0 tới bit tương ứng của nó trong IMR

- Thanh ghi yêu cầu ngắt (IRR) sẽ giữ lại các yêu cầu ngắt của các ngõ vào Khi có tín hiệu yêu cầu ngắt đưa tới ngõ vào nào thì bit tương ứng của nó trong thanh ghi này sẽ được lập lên 1

- Thanh ghi phục vụ ngắt (ISR) sẽ lưu trạng thái các ngõ vào yêu cầu ngắt đang được phục vụ Bit tương ứng trong thanh ghi sẽ được lập tương ứng với ngõ vào đang được phục vụ

- Khối xử lý ưu tiên (Priority resolver) sẽ đóng vai trò quyết định yêu cầu tại ngõ vào nào được phục vụ, bằng cách xem xét các bit trong các thanh ghi IMR, ISR và IRR

Ví dụ: giả sử IR2 và IR4 không bị che và có một tín hiệu yêu cầu ngắt đưa tới ngõ vào

IR4 Yêu cầu trên IR4 sẽ lập bit thứ 4 trong thanh ghi IRR lên 1 Trước tiên bộ xử lý ưu tiên xem bit tương ứng với nó trong thanh ghi IMR, nếu bit này bằng 1 yêu cầu ngắt bị che và sẽ không được phục vụ Nếu bằng 0 bộ xử lý ưu tiên sẽ kiểm tra các bit trong

Trang 11

thanh ghi ISR để xem có ngõ vào nào có mức ưu tiên cao hơn đang được phục vụ hay không Nếu có một ngõ vào có mức ưu tiên cao hơn đang được phục vụ thì bộ xử lý

ưu tiên sẽ không tạo ra tác động nào cả Ngược lại nếu không có yêu cầu ngắt ưu tiên cao hơn đang được phục vụ thì bộ xử lý ưu tiên sẽ chuyển mạch cho tín hiệu yêu cầu ngắt gửi tới CPU Khi CPU đáp ứng bằng tín hiệu trả lời INTA, 8259 sẽ gửi số hiệu ngắt đã được lập trình từ trước tới CPU theo Bus dữ liệu

Lập trình cho 8259.

Để 8259 có thể hoạt động được, thì sau khi cấp nguồn nó phải được lập trình từ 2 tới

4 từ điều khiển ICW (Input Control Word), và sau đó là các từ điều khiển OCW (Output Control Word) Các từ điều khiển sẽ định nghĩa các chế độ hoạt động cụ thể cho 8259, chúng được định nghĩa như sau:

Các từ điều khiển ICW:

Bit D0 (IC4) xác định 8259 được nối với họ vi xử lý nào Khi nối với hệ thống 16/32 bit 8086/8088 thì nhất thiết phải cần ICW4 (IC4=1), còn đối với hệ thống 8 bit 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

T2T3

T4T5

T6T7

A0=1

IC4SNGLADI

LTIM1

A5A6

A7A0=0

1: Cần ICW4 0: bỏ ICW4

Address Interval:

K/c giữa các vector ngắt1: 4 byte (80x86/88)0: 8 byte (8080/85)

Single:

1: chỉ có 1 mạch 82590: 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

S0S1

S2S3

S4S5

S6S7

A0=1

1: ngõ vào tương ứng có 1 mạch tớ

0: không có mạch tớ ở ngõ vào

Trang 12

ICW3 cho mạch tớ:

Từ điều khiển này cho phép chọn kiểu ngắt (số hiệu ngắt) ứng với các bit T7-T3 trong hệ thống 8086/88, khi đó các bit còn lại luôn được gán giá trị 0 ứng với ngõ vào IR0 Các vector ngắt của các ngõ vào tiếp theo sẽ lần lượt tăng lên 1 Ví dụ nếu ICW2 = 40H thì các vector ngắt sẽ lần lượt mang số hiệu từ 40H tới 47H Trong các hệ thống 8080/85 thì ICW2 sẽ cung cấp các bit địa chỉ cao của địa chỉ vector ngắt

Từ điều khiển này chỉ dùng tới khi bit SNGL trong ICW1 = 0 tức là trong hệ thống có nhiều 8259 nối tầng với nhau Như vậy sẽ tồn tại hai loại ICW3: một cho mạch chủ (master) và 1 cho mạch tớ (slave) Các bit ICW3 của 8259 chủ sử dụng để chỉ định ngõ vào nào có ghép tầng (cascade) Trong 8259 tớ chỉ sử dụng 3 bit thấp để xác định nó được nối tới ngõ vào nào của 8259 chủ

Khi SFNM = 0 thì chọn chế độ ưu tiên cố định ( mức ưu tiên giảm từ IR0 tới IR7) Nếu 8259 không dùng tới ICW4 thì chế độ này cũng được coi như mặc định Trong chế độ này nếu chỉ có một yêu cầu ngắt đang được phục vụ thì các yêu cầu có mức ưu

ID0ID1

ID20

00

00

A0=1

000 cho mạch tớ tại ngõ vào IR0 …

111 cho mạch tớ tại ngõ vào IR7

µPMAEOI

M/SBUF

SFNMN

00

0A0=1

µP mode 1: 8086/880: 8080/8085Auto End Of Interrupt:

1: EOI tự động0: EOI thông thường

0x: Chế độ không đệm10: Chế đệm mạch tớ

11: Chế độ đệm mạch chủ

Special Fully Nested Mode

Chế độ lồng hoàn toàn

1: SFNM

Trang 13

tiên thấp hơn sẽ bị cấm, và các yêu cầu có mức ưu tiên cao hơn sẽ ngắt các yêu cầu có mức ưu tiên thấp hơn.

Bit BUF cho phép chọn chế độ làm việc giữa 8259 và CPU là có đệm hay không có đệm Khi BUF =1 M/S = 0/1 sẽ chọn đệm ở mạch chủ hoặc mạch tớ

Bit AEOI = 1 cho phép kết thúc yêu cầu ngắt tự động Lúc này 8259 sẽ tự động xóa ISRi = 0 khi xung INTA chuyển lên mức cao mà không làm thay đổi thứ tự ưu tiên Ngược lại khi AEOI = 0 chương trình phục vụ ngắt phải có thêm lệnh EOI trước IRET đưa tới cho 8259

Các từ điều khiển ICW được lập trình cho 8259 theo giải thuật hình 6.8:

Các từ điều khiển hoạt động OCW:

M0M1

M2M3

M4M5

M6M7

A0=1

Mặt nạ các ngắt tại các ngõ vào yêu cầu:

1: có mặt nạ

0: không có mặt nạ

L0L1

L20

0EOISL

RA0=0

Mã hóa mức ưu tiên ngắt bị tác động000: mức 0; … ; 111: mức 7

Mã hóa chế độ kết thúc

ngắt

ICW1ICW2

ICW4

ICW3D1 (ICW1) = 1 ?

D1 (ICW1) = 1 ?

Sẵn sàng nhận yêu cầu ngắtHình 6.8: Giải thuật lập trình các từ điều khiển ICW cho 8259

Trang 14

OCW2:

Các bit R, SL, EOI cho phép chúng ta chọn cách thức kết thúc ngắt khác nhau Một vài cách kết thúc ngắt còn tác động tới các yêu cầu ngắt được chỉ định với mức ưu tiên được mã hóa bởi 3 bit L3L2L1

Các chế độ kết thúc ngắt bao gồm:

- Chế độ ưu tiên cố định:

Đây là chế độ làm việc mặc định của 8259 sau khi đã được nạp các từ làm việc khởi đầu Trong chế độ này có mức ưu tiên tại các ngõ vào mặc định giảm dần từ IR0 tới IR7 Các ngõ vào có mức ưu tiên thấp hơn sẽ bị cấm, và các yêu cầu có mức ưu tiên cao hơn sẽ ngắt các yêu cầu có mức ưu tiên thấp hơn

- Chế độ quay mức ưu tiên

Ở chế độ này khi một yêu cầu ngắt được phục vụ xong nó sẽ được gán mức ưu tiên thấp nhất để tạo điều kiện cho các yêu cầu ngắt khác có cơ hội được phục vụ

- Chế độ quay mức ưu tiên chỉ định

Trong chế độ này cần phải chỉ rõ ngõ vào nào được gán mức ưu tiên thấp nhất bằng các bit L2L1L0 Ngõ vào có chỉ số kế tiếp nó sẽ được gán mức ưu tiên cao nhất

Với các chế độ ưu tiên trên các bit R, SL,EOI trong OCW2 được mã hóa để chỉ thị các chế độ kết thúc ngắt khác nhau như sau:

1 Kết thúc ngắt thông thường: Chương trình con phục vụ ngắt phải có lệnh EOI đặt trước lệnh trở về IRET cho 8259 Mạch 8259 sẽ xác định yêu cầu ngắt vừa được phục vụ và xóa bit tương ứng với nó trong thanh ghi ISR, tạo điều kiện cho yêu cầu ngắt ở chính ngõ vào này hoặc các ngắt có yêu cầu thấp hơn được phục vụ

2 Kết thúc yêu cầu ngắt chỉ định: chương trình con phục vụ ngắt cũng phải có lệnh EOI đặt trước lệnh IRET Mạch 8259 sẽ xóa đích danh bit ISR được chỉ định bởi các bit L2L1L0 để tạo điều kiện cho yêu cầu ngắt ở chính ngõ vào này hoặc các ngõ vào có yêu cầu thấp hơn được phục vụ

RISERISP

10

SMMESM

0A0=0

10: đọc IRR ở lần sau11: đọc ISR ở lần sau

Thăm dò trạng thái hiện tại của yêu cầu ngắt.1: đọc mã ưu tiên cao nhất ở lần đọc sau

Special Mask Mode

10:xóa chế độ mặt nạ đặc biệt

11:lập chế độ mặt nạ đặc biệt

Trang 15

3 Quay đổi mức ưu tiên khi kết thúc ngắt thông thường: chương trình con phục vụ ngắt cũng cần lệnh EOI Mạch 8259 sẽ xác định ngõ vào vừa được phục vụ, xóa bit tương ứng trong ISR và gán cho ngõ vào này mức ưu tiên thấp nhất, còn đầu vào có chỉ số kế tiếp (i+1) sẽ được gán mức ưu tiên cao nhất.

4 Quay đổi mức ưu tiên trong chế độ kết thúc ngắt tự động: chỉ cần cung cấp lệnh chọn chế độ này một lần bằng cách chọn chế độ quay khi EOI tự động Từ đó trở đi

8259 sẽ đổi mức ưu tiên mỗi khi kết thúc ngắt như mô tả trong phần 3 Muốn xóa bỏ chế độ này chỉ việc lập trình lại chế độ khác cho 8259

5 Quay đổi mức ưu tiên khi kết thúc yêu cầu ngắt chỉ định: chương trình phục vụ ngắt phải có lệnh EOI chỉ đích danh trước lệnh IRET Mạch 8259 sẽ xóa bit tương ứng trong thanh ghi ISR và gán mức ưu tiên thấp nhất cho ngõ vào có chỉ số chỉ định bởi L2L1L0

6 Lập mức ưu tiên: chế độ này cho phép thay đổi mức ưu tiên cố định hoặc mức ưu tiên gán trước bằng cách gán mức ưu tiên thấp nhất cho ngõ vào chỉ định bởi L2L1L0, yêu cầu ngắt có chỉ số kế tiếp (i+1) sẽ có mức ưu tiên cao nhất

Các bit R,SL và EOI được mã hóa cho các chế độ như mô tả trong bảng sau:

Từ điều khiển hoạt động OCW3 sau khi ghi vào 8259 cho phép thực hiện các công việc sau:

+ Chọn ra các thanh ghi để đọc

+ Thăm dò trạng thái yêu cầu ngắt bằng cách đọc trạng thái của ngõ vào có mức ưu tiên cao nhất cũng với mã đầu vào của nó

+ Thao tác với mặt nạ đặc biệt

Khi đọc các thanh ghi IRR và ISR có thể biết được các ngõ vào nào đang có yêu cầu phục vụ, và ngõ vào nào đang được phục vụ

Bằng việc cho bit P của OCW3 = 1 có thể đọc được trên bus dữ liệu ở lần đọc ngay sau đó từ thăm dò, trong từ thăm dò này sẽ có các thông tin về yêu cầu ngắt có mức ưu tiên cao nhất như hình sau:

101 Đổi mức ưu tiên khi có EOI thường

100 Lập chế độ quay khi có EOI tự động

000 Xóa chế độ quay khi có EOI tự động

111 Đổi mức ưu tiên khi có EOI chỉ định

Kết thúc ngắt EOI

Đổi mức ưu tiên tự động

Đổi mức ưu tiên chỉ định

W0W1

W2x

xx

xI

Mã hóa số hiệu ngõ vào có mức

ưu tiên cao nhất1: Đang có yêu cầu ngắt

0: không có yêu cầu ngắt

Ngày đăng: 12/12/2013, 16:15

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w