Trờng đại học kỹ thuật Công Nghiệp Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính 86 http:// www.ebook.edu.vn Chơng 5 Vào ra dữ liệu bằng cách thăm dò 1. Giới thiệu chung về các phơng pháp điều khiển vào/ra dữ liệu Qua chơng 4, chúng ta đã tìm hiểu về một số mạch thờng dùng cho việc phối ghép CPU với thiết bị ngoại vi. Ta đã tiến hành các phơng pháp (phơng thức) điều khiển việc trao đổi dữ liệu. Các mạch phối ghép vào/ra đã trình bày trớc đây có thể đợc ứng dụng để phục vụ cho mục đích này. Máy tính trao đổi thông tin (vào/ra dữ liệu) với thieets bị ngoại vi theo một trong 2 chế độ sau: Với cách vào/ra dữ liệu theo chơng trình có thể phân thành các phơng pháp cụ thể hơn là: Đồng bộ (Không điều kiện không hội thoại) Sau khi đã khởi động (khởi tạo) thiết bị ngoại vi, CPU (và thiết bị ngoại vi) không quan tâm tới việc thiết bị ngoại vi có sẵn sàng cho việc trao đổi dữ liệu hay không. Nó luôn thực hiện các lệnh trao đổi dữ liệu (IN, OUT) một cách trực tiếp. Phơng pháp này yêu cầu: Thiết bị ngoại vi luôn sẵn sàng trao đổi dữ liệu. Tốc độ trao đổi dữ liệu của CPU và thiết bị ngoại vi là phù hợp nhau (TBNV có tốc độ làm việc nhanh). Ví dụ, trong một hệ đo nhiệt độ ghép nối với máy tính, điện áp trên cặp nhiệt điện đợc khuếch đại lên, tiếp theo là đợc biến đổi thành tín hiệu số rồi đợc đọc vào máy tính. Ta thấy rằng tín hiệu này lúc nào cũng sẵn sàng cho CPU đọc vì nhiệt độ là một đại lợng biến đổi rất chậm so với tốc độ của máy tính và cùng với nó, CPU cũng có thể bất kỳ lúc nào đa số liệu hiển thị số đo đó. Đây gọi là quá trình vào/ra đồng bộ hay không có móc nối (không có hội thoại). Không đồng bộ (Có điều kiện có hội thoại) Polling: CPU và thiết bị ngoại vi chỉ trao đổi dữ liệu khi có tín hiệu móc nối báo sẵn sàng (Ready/Akc) của các phía. Sau khi máy tính khởi động thiết bị ngoại vi (khối Vào/ra dữ liệu Vào/ra theo chơng trình: Không hội thoại (trực tiếp) Có hội thoại Thăm dò (pollin g) Ngắt (Interrupt) Truy nhập trực tiếp bộ nhớ (DMA Direct Memorry Access Trờng đại học kỹ thuật Công Nghiệp Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính 87 http:// www.ebook.edu.vn ghép nối), máy tính luôn chờ và kiểm tra trạng thái sẵn sàng của thiết bị ngoại vi gồm các bớc: (1) Đọc thông tin về trạng thái sẵn sàng của thiết bi ngoại vi (2) Kiểm tra: Nếu thiết bị ngoại vi sẵn sàng thì trao đổi dữ liệu, ngợc lại thì về bớc (1) để kiểm tra lại. Phơng pháp này đợc dùng khi tốc độ trao đổi dữ liệu của các bên (CPU và thiết bị ngoại vi) rất không bằng nhau và nó có một số đặc điểm sau: Việc trao đổi thông tin là tin cậy vì chỉ trao đổi khi thiết bị ngoại vi sẵn sàng. Tốn thời gian CPU vì phải kiểm tra trạng thái sẵn sàng của thiết bị ngoại vi (việc kiểm tra này co CPU đảm nhiệm) nên giảm hiệu suất của hệ thống. Phù hợp với những hệ thống không đòi hỏi cao về tốc độ trao đổi dữ liệu, hệ thống có ít thiết bị ngoại vi. Chúng ta sẽ xem xét cụ thể phơng pháp vào/ra này trong phần sau. Vào/ra dữ liệu điều khiển bằng ngắt chơng trình (ngắt bộ vi xử lý Interrupt): Bình thờng máy tính thực hiện một chơng trình (công việc) nào đó. Khi thiết bị ngoại vi có yêu cầu trao đổi dữ liệu, nó sẽ gửi tín hiệu yêu cầu ngắt CPU dừng công việc hiện tại, phục vụ cho trao đổi dữ liệu thông qua tín hiệu yêu cầu ngắt IRQ (Interrupt Request) tác động vào chân INTR (chân tiếp nhận yêu cầu ngắt) của CPU. CPU nhận đợc yêu cầu ngắt, nếu chấp nhận nó sẽ đa ra xung INTA xác nhận tới thiết bị ngoại vi, sau đó CPU tìm chơng trình con phục vụ ngắt tơng ứng số hiệu ngắt và thực hiện nó. Đó chính là chơng trình con thực hiện trao đổi (vào/ra) dữ liệu do thiết bị ngoại vi yêu cầu. Khi trao đổi xong (ISR Interrupt Service Routine) kết thúc thì CPU tiếp tục công việc (chơng trình) đã bị gián đoạn. Vào/ra dữ liệu điều khiển bằng phần cứng phụ để thâm nhập trực tiếp bộ nhớ (DMA Direct Memorry Access): Trong các phơng pháp vào/ra dữ liệu bằng chơng trình kể trên, dữ liệu phải đợc chuyển qua lại từ bộ nhớ đến CPU rồi đến thiết bị ngoại vi hoặc ngợc lại bằng việc thực hiện từng lệnh (MOV, IN hoặc OUT) của CPU với sự tham gia của các thanh ghi. Dữ liệu của mỗi lần vận chuyển là byte hoặc word (2 byte), tốc độ trao đổi dữ liệu phụ thuộc rất nhiều vào tốc độ thực hiện các lệnh trao đổi dữ liệu kể trên. Nói chung, tốc độ trao đổi dữ liệu là không thể nhanh đợc. Với các thiết bị làm việc với bộ nhớ khối nh màn hình, ổ đĩa, yêu cầu trao đổi cả mảng dữ liệu thì phơng pháp vào/ra dữ liệu bằng chơng trình là không phù hợp. Khi đó ngời ta nghĩ đến việc điều khiển dữ liệu vào/ra trực tiếp từ bộ nhớ đến thiết bị ngoại vi hoặc ngợc lại mà không thông qua CPU bằng những lệnh trao đổi dữ liệu nh MOV, IN hoặc OUT. Đó là phơng pháp vào/ra dữ liệu bằng cách truy nhập trực tiếp bộ nhớ (DMA Direcr Memory Access). Trong trờng TNNV sẵn sàng? Đọc thông tin Vào/ra dữ liệu F T Yêu cầu ngắ t Chơng trình con phục vụ ngắt (trao đổi dữ liệu) Chơng trình hiện tại của CPU Trờng đại học kỹ thuật Công Nghiệp Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính 88 http:// www.ebook.edu.vn hợp này CPU trao quyền điều khiển cho một mạch phần cứng phụ điều khiển việc vào/ra dữ liệu, đó là DMAC DMA Controller. Chi tiết về phơng pháp này sẽ đợc trình bày kỹ trong phần sau. Qua việc trình bày sơ lợc về các phơng pháp điều khiển việc vào/ra dữ liệu trên ta thấy mỗi phơng pháp có những đặc điểm khác nhau (u nhợc điểm), chúng đợc ứng dụng phù hợp trong những hoàn cảch cụ thể khác nhau. Một trong những phơng pháp điều khiển đơn giản nhất mà chúng ta xem xét trong chơng này là phơng pháp trao đổi không đồng bộ (có hội thoại) hay gọi là phơng pháp thăm dò trạng thái sẵn sàng của thiết bị ngoại vi (polling) trớc khi thực hiện vào/ra dữ liệu. 2. Vào/ra dữ liệu bằng cách thăm dò trạng thái sẵn sàng của thiết bị Phơng pháp vào/ra dữ liệu bằng cách thăm dò trạng thái sẵn sàng của thiết bị ngoại vi là phơng pháp điều khiển vào/ra dữ liệu bằng chơng trình có hội thoại. Tín hiệu hội thoại (handshaking signal) ở đây là tín hiệu báo trạng thái sẵn sàng của thiết bị ngoại vi. Việc điều khiển vào/ra dữ liệu sẽ trở nên rất đơn giản nếu thiết bị ngoại vi lúc nào cũng sẵn sàng chờ làm việc (trao đổi dữ liệu) với CPU Nh đã đề cập đến trong phần giới thiệu đó là phơng pháp vào/ra dữ liệu đồng bộ (trực tiếp không hội thoại). Tuy nhiên trong thực tế không phải lúc nào CPU cũng làm việc với các thiết bị ngoại vi liên tục sẵn sàng nh trên, vì tốc độ làm việc của thiết bị ngoại vi và CPU là rất chênh lệch. Thông thờng khi CPU muốn trao đổi dữ liệu với một thiết bị ngoại vi nào đó, thông qua chơng trình nó liên tục kiểm tra trạng thái sẵn sàng của thiết bị ngoại để xem có yêu cầu trao đổi dữ liệu (yêu cầu phục vụ) hay không? Đến khi có một thiết bị ngoại vi nào đó có yêu cầu trao đổi dữ liệu (tức là có tín hiệu báo trạng thái sẵn sàng readly) thì chơng trình sẽ chuyển sang thực hiện việc trao đổi dữ liệu (công việc trao đổi này có thể là các lệnh ngay trong chơng trình chính hoặc là một chơng trình con phục vụ hoặc ISR) rồi lại tiếp tục kiểm tra thiết bị ngoại vi kế tiếp. Quá trình này đợc thực hiện tiếp tục đến thiết bị ngoại vi cuối cùng rồi lại đợc lặp lại từ đầu. Vậy, nếu làm việc theo phơng pháp thăm dò thì thông thờng CPU phải đợc dành riêng cho công việc trao đổi dữ liệu vì nó phải liên tục kiểm tra trạng thái sẵn sàng của thiết bị ngoại vi thông qua các tín hiệu móc nối. Các tín hiệu này đợc lấy từ mạch phối ghép, do ngời thiết kế mạch tạo ra để cho chơng trình có thể kiểm tra nó. Việc này đợc tính toán đồng bộ khi xây dựng mạch và chơng trình điều khiển. TNNV1 sẵn sàng? Vào/ra dữ liệu với TBNV1 Chơng trình điều khiển T TNNV1 sẵn sàng? Vào/ra dữ liệu với TBNV1 F TNNV1 sẵn sàng? Vào/ra dữ liệu với TBNV1 T F T F Hình vé: Lu đồ điều khiển của Phơng pháp thăm dò trạng thái sẵn sàng Trờng đại học kỹ thuật Công Nghiệp Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính 89 http:// www.ebook.edu.vn Nói chung, phơng pháp này đơn giản trong tổ chức phần cứng và phần mềm nhng gặp phải nhợc điểm là khi số lợng thiết bị ngoại vi tăng lên thì sẽ làm lãng phí thời gian CPU cho việc kiểm tra trạng thái sẵn sàng và khả năng đáp ứng tức thời với phục vụ của CPU là rất thấp. Hình vẽ cho thấy lu đồ của chơng trình điều khiển theo phơng pháp thăm dò khi số lợng số thiết bị ngoại vi > 1. Nếu thông tin đợc phát hoặc nhận từ một thiết bị ngoại vi nào đó sẽ thiết lập một cờ trạng thái thích hợp (thông thờng là bằng một mạch lật trạng thái bởi xung STB của thiết bị ngoại vi). Bộ vi xử lý sẽ kiểm tra cờ trạng thái này và sẽ thực hiện modul chơng trình trao đổi dữ liệu khi cờ trạng thái báo rằng thiết bị ngoại vi sẵn sàng cho việc trao đổi dữ liệu. Nó nh một tín hiệu yêu cầu phục vụ (thụ động) cho việc vào/ra dữ liệu. Sau đây là một ví dụ về cách tạo tín hiệu móc nối trong tổ chức phần cứng và lu đồ thuật toán (chơng trình điều khiển) dùng cho việc trao đổi dữ liệu giữa CPU và thiết bị ngoại vi. Để đơn giản, trong ví dụ này ta giả thiết CPU chỉ làm việc với 1 thiết bị ngoại vi và và 1 thiết bị ngoại vi ra. Việc tổ chức phối ghép phần cứng đợc thực hiện trên các vi mạch (IC) cỡ vừa để dễ theo dõi các tín hiệu. Một cổng vào có địa chỉ 00 đợc dùng để đọc trạng thái sẵn sàng của thiết bị ngoại vi số 1 và số 2. (TB1: vào; TB2: ra). Tín hiệu báo sẵn sàng của thiết bị ngoại vi số 1 (có địa chỉ 01) đợc đặt vào bit D0 và tín hiệu báo sẵn sàng của thiết bị ngoại vi số 2 (có địa chỉ 02) đợc đặt vào biit D1 của bus dữ liệu. Các bit tín hiệu này sẽ có giá trị bằng 1 khi thiết bị ngoại vi tơng ứng ở trạng thái sẵn sàng trao đổi dữ liệu với CPU và chúng sẽ đợc đa vào bus dữ liệu khi CPU đọc nó bằng lệnh đọc cổng có địa chỉ 00. Chơng trình điều khiển trao đổi dữ liệu sẽ kiểm tra các bit báo sẵn sàng này và có các đáp ứng thích hợp. Cụ thể hoạt động của phần mạch vào dữ liệu nh sau: Khi thiết bị vào (TB1) có (1 byte) dữ liệu cần (trao đổi) đa vào hệ thống, nó đa ra xung STB để cho phép mạch chốt 8 bit chốt lấy dữ liệu đó đồng thời kích cho mạch lật D (mạch tạo tín hiệu sẵn sàng) làm việc đầu ra Q = 1. Bộ vi xử lý (CPU) thông qua lệnh đọc cổng 00 để thăm dò trạng thái sẵn sàng của thiết Mạch 3 trạng thái /OC Mạch chốt 8 bit /G Input Device (1) pr Q D lck clr +5V Mạch Chốt 8 bit /G Mạch 3 trạng thái /OC Output Device (2) pr Q D lck clr +5V Bus dữ liệu D0 D1 D7 ISP01 ISP00 ISP01 S TB ACK OSP02 OSP00 OSP02 Hình vẽ: Sơ đồ mạch phần cứng tạo tín hiệu móc nối Trờng đại học kỹ thuật Công Nghiệp Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính 90 http:// www.ebook.edu.vn bị ngoại vi số 1 thông qua bit D0. Khi thấy D0 = 1, nó đọc 1 byte dữ liệu vào đồng thời xoá luôn Q (Q = 0, thiết bị ngoại vi không sẵn sàng) để chuẩn bị lần đọc byte dữ liệu khác. Tơng tự nh vậy ta có thể thấy đợc sự hoạt động của phần mạch ra dữ liệu thiết bị ngoại vi số 2. Yêu cầu: Lập trình theo lu đồ (a) đờng nét liền để thực hiện việc đọc vào một byte dữ liệu mỗi khi cổng 01 báo sẵn sàng rồi hiển thị byte dữ liệu đó. Giả thiết có 100 byte dữ liệu phải đọc và có sẵn thủ tục thực hiện hiển thị giá trị trong thanh ghi al lên màn hình có tên là hien_thi. Mov cx, 100 ;Số byte dữ liệu cân đọc tro Lặp: In al, 0 ;Đọc cổng 00 Test al, 1 ;D0 = 1? Jz Lặp ;không, đọc lại cổng 00 In al, 1 ;phải, đọc cổng 01 Call Hien_thi ;hiển thị kết quả Loop Lặp ;cha hết dữ liệu, quay lại Ra: Trong trờng hợp thiết bị ngoại vi vào/ra hoạt động theo cách khác: mỗi khi cờ báo trạng thái sẵn sàng, cho phép CPU đọc/ghi nhiều byte dữ liệu cùng lúc thì ta có nhánh đi theo đờng nét đứt trên lu đồ. Khi này ta cần thiết sửa đổi cả tổ chức phần cứng và chơng trình để hệ thống hoạt động chính xác. Hình vé: Lu đồ điều khiển vào/ra dữ liệu D0=1? Đọc cổng 00 Begin Hết dữ liệu? End Đọc cổng 01 T F T F (a) Lu đồ đọc dữ liệu từ cổng 01 D1=1? Đọc cổng 00 Begin Hết dữ liệu? End Ghi cổng 01 T F T F (a) Lu đồ ghi dữ liệu vào 02 Trờng đại học kỹ thuật Công Nghiệp Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính 91 http:// www.ebook.edu.vn Trở về ví dụ 4 trong chơng trớc ta thấy: tổ chức phần cứng và chơng trình điều khiển vào/ra là theo phơng pháp này (polling thăm dò trạng thái sẵn sàng của thiết bị ngoại vi). ở đó ta sử dụng vi mạch cổng chuyên dụng PPI 8255 làm việc trong chế độ 1 (mode 1) và bản thân vi mạch này có khả năng tạo ra các tín hiệu móc nối đợc cả với CPU và thiết bị ngoại vi. Việc đọc (thăm dò) đơn giản chỉ là đọc bit PC3 của cổng PC (theo ví dụ đó). Tín hiệu của bit này chính là tín hiệu INTR. Nếu ta không kiểm tra bit này bằng cách đọc cổng PC mà nối thẳng nó tới chân tiếp nhận yêu cầu ngắt của CPU là chân INTR thì ta có một phơng pháp phối ghép khác để vào/ra dữ liệu đó là điều khiển vào/ra dữ liệu bằng cách ngắt CPU. Phơng pháp này sẽ đợc trình bày chi tiết trong chơng sau. Nếu kiểm tra PC3, PC0 (là tín hiệu báo sẵn sàng tơng ứng cho các cổng PA và PB), bằng lệnh đọc cổng PC trong chơng trình thì ta có phơng pháp vào/ra dữ liệu là thăm dò trạng thái sẵn sàng của thiết bị ngoại vi. Sơ đồ ghép nối dùng PPI 8255 Mode 1 PA PC4 PC5 PPI 8255 PC1 PC2 PC3, PC0 PB RD WR A0 A1 Reset CS Input device D7-D0 CPU 8088 INTR A19-A2 Decoder IRQi STB ACK D7-D0 D7-D0 STB ACK Output device . thiết bị ngoại vi. Sơ đồ ghép nối dùng PPI 8 255 Mode 1 PA PC4 PC5 PPI 8 255 PC1 PC2 PC3, PC0 PB RD WR A0 A1 Reset CS Input device D7-D0 CPU. hiệu móc nối Trờng đại học kỹ thuật Công Nghiệp Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính 90 http:// www.ebook.edu.vn bị ngoại vi số 1 thông qua bit D0. Khi. ngoại vi) . ở đó ta sử dụng vi mạch cổng chuyên dụng PPI 8 255 làm vi c trong chế độ 1 (mode 1) và bản thân vi mạch này có khả năng tạo ra các tín hiệu móc nối đợc cả với CPU và thiết bị ngoại vi.