Vào/ra do CPU chủ động còn gọi là vào/ra điều khiển bằng chương trình được chia thành hai nhóm:
Vào/ra số liệu bằng chương trình không điều kiện
Vào/ra số liệu bằng chương trình có điều kiện (handshaking-đối thoại)
a) Vào/ra số liệu không điều kiện, điều khiển bằng chương trình
Vào/ra số liệu không điều kiện có các đặc điểm như: - CPU chuyển số liệu thông qua chương trình
- CPU giả thiết TB vào/ra luôn sẵn sàng chuyển số liệu
- Dữ liệu đọc vào CPU qua cổng sau đó lưu lại o bộ nhớ cho các xử lý tiếp theo.
- Việc chuyển số liệu được thực hiện giữa các thanh ghi của CPU (ACC) và thanh ghi (cổng ghép nối) của TB vào/ra, sau đó lưu lại o bộ nhớ cho các xử lý tiếp theo.
Bộ nhớ ó [CPU_ACC] ó [ Cổng ] ó [Thiết bị] Bộ vi xử lí trung tâm (CENTRAL PROCESSING UNIT) Hệ thống đường dây dữ liệu (DATA BUS)
Hệ thống đường dây điều khiển (CONTROL BUS) Hệ thống đường dây địa chỉ (ADDRES BUS ) Ghép nối vào/ra (I/O) Thiết bi ngoài DATA in/out Status STROBE
Điều khiển ghép nối vào/ra Thiết bị chủ động CPU chủ động Có điều kiện Có điều kiện (đối thoại) Ngắt Truy nhập bộ nhớ trực tiếp Hổn hợp
110
Đọc vào:
Hình 2.65 Đọc dữ liệu vào: Dữ liệu_từ thiết bị vào ACC sau đó vào RAM
Ví dụ ứng dụng: Khi kiểm soát nhiệt độ, thiết bị nhiệt luôn có số liệu để đo và xử lý. Trong trường hợp này ghép nối với thiết bị nhiệt trở nên đơn giản.
Tương tự cho mô hình đưa dữ liệu ra thiết bị.
Lệnh thực hiện: IN [port_in] hoặc IN AL, [địa_ chỉ_ port_in]
Các bước thực hiện:
- CPU đưa ra BUS địa chỉ địa chỉ cổng port_in cho giải mã, tạo CS/ mở port_in. - CPU đưa ra BUS đ/k tín hiệu IORD
- Số liệu từ vi mạch 3-state chuyển vào BUS dữ liệu và dưới tác động của tín hiệu IORD/ và được đưa vào ACC của CPU qua port_in 3 trạng thái.
- Thực hiện chuyển ACC vào RAM.
Đưa ra:
111
Hình 2.66 Đưa dữ liệu từ RAM vào ACC sau đó ACC ra thiết bị Các bước thực hiện:
- CPU đưa ra BUS địa chỉ địa chỉ cổng port_out cho giải mã, tạo CS/ mở port_out. - CPU đưa dữ liệu cần ghi ra BUS dữ liệu
- CPU đưa tín hiệu IOWR/ để chốt dữ liệu, dưới tác động của tín hiệu IOWR/ số liệu được ghi vào thanh ghi chốt, từ đó thiết bị nhận dữ liệu với tín hiệu RD/ của thiết bị.
Ghi nhận căn bản ở đây là CPU ở vị trí trung gian của qui trình nhận hay gởi dữ liệu. Chi phí một cổng cho mỗi cấu hình. Mỗi lần trao đổi 1 byte. Cơ chế này có hạn chế vì CPU ra lệnh đọc (IORD) hay ghi (IOWR) mà không kiểm tra xem thiết bị vào/ra có sẵn sàng gửi hay nhận số liệu hay chưa do đó khi ứng dụng cần phân tích hoạt động của thiết bị đẻ có giải pháp ghép nối đúng mục đích.
112
Khi ghép nối với các thiết bị mà thiết bị đó cần có thời gian để hoàn thành một xử lý (tác vụ), trong qúa trình ghép nối, CPU cần có ghi nhận trạng thái sẳn sàng của thiết bị để đánh giá và ra quyết định tiếp theo.Quá trình kiểm tra trạng thái đôi khi phải thực hiện một vài lần trước khi quyết định tiếp tục hay từ bỏ trao đổi dữ liệu với thiết bị. Tại sao ? Nếu thiết bị làm việc tốt, mọi chuyện trôi chảy, nhưng nếu thiết bị hỏng hóc, chương trình điều khiển không thể cứ chờ thiết bị săn sàng mãi được, chu trình phải kết thúc. Qui tắc này gọi là đối thoại, hay móc nối có điều kiện là vậy. Về mặt thực hiện, ở đây cần ít nhất 2 cổng: 1 cổng để đọc trạng thái thiết bị, cổng kia để trao đổi dữ liệu vào hay ra. Trạng thái thông thường ở mức dộ đơn giản chỉ cần 1 bit để thể hiện, ví dụ STATUS=1, thiết bị sẳn sàng , và ngược lại. Tuy nhiên có nhiều trường hợp trạng thái có thể là tập hợp của vài bit. Ví dụ khi ghép với cổng truyền thông dị bộ (UART), có đến 5 bit phản ánh trạng thái của UART. Các bit trạng thái được nối vào BUS dữ liệu qua các mạch 3-trạng thái và được điều khiển bằng lệnh.
Đọc vào có đối thoại:
Hình 2.67 Trao đổi dữ liệu đọc vào có điều kiện
- Cần CS0/ để đọc trạng thái READY của thiết bị qua port_status, giả định nối vào D0 của BUS dữ liệu.
- Cần CS1/ để đọc dữ liệu qua port_in, hợp thành từ Flip/flop, cổng 3-state, nối vado bit D0 của BUS dữ liệu.
Các bước thực hiện:
- CPU đưa địa chỉ port_status ra BUS địa chỉ, vào giãi mã, tạo CS0, đọc STATUS, giá trị ở bit READY tại D0. (IN port_status)
- CPU kiểm tra giá trị của READY. - Nếu READY=0, quay lại đọc STATUS
NếuREADY=1, CPU đọc dữ liệu vào ACC (IN port_in) - Thực hiện lệnh cất dữ liệu vào RAM
113
Hình 2.68 Lưu đồ điều khiển đọc dữ liệu và có điều kiện
BÀI TẬP:
1.Đưa ra có đối thoại:
Thiết kế mạch ghép nốiđưa dữ liệu ra;
Viết chương trình điều khiển quá trình đưa dữ liệu ra.
c) Quay vòng (polling)
Trong phương pháp vào/ra có đối thoại, nếu thiết bị vào/ra chưa sẵn sàng nhận hay gửi số liệu thì CPU phải chờ cho thiết bị sẳn sàng. Nói cách khác phương pháp này gây lãng phí thời gian của CPU. Khi hệ thống có nhiều thiết bị ghép vào, cần có chiến thuật để giảm tối đa thời gian chờ trên một thiết bị. Cách đơn giản là dùng phương pháp quay vòng để hỏi trạng thái các thiết bị vào/ra. Về nguyên tức chỉ hỏi 1 thiết bị một lần, nếu thành công, thực hiện trao đổi dữ liệu, còn không chuyển sang thiết bị khác. Chương trình sẽ tổ chức với những qui tắ tối ưu nào đó, ví dụ như bắt đầu với thiết bị có nức ưu tiên cao nhất và giảm dần.
READY ? D0=1 START routine: C2=n2 Đọc STATUS Port_status C=0 ? C = C-1 Đọc dữ liệu_ Port_in, Chuyển dũ liệu vào
RAM Kết Thúc C2=0 ? C2=C2-1 C = n1 C...số đếm lần kiểm tra trạng thái t/b C2...số byte trao đổi với t/b
114
Hình 2.69 Lưu đồ điều khiển đọc dữ liệu kiểu quay vòng