Bài giảng Kỹ thuật Vi xử lý - Chương VI: Các kiểu I/O

-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 -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 đó?

ppt44 trang | Chia sẻ: maiphuongtl | Lượt xem: 1887 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật Vi xử lý - Chương VI: Các kiểu I/O, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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ò mov dx, F000 L1: in al, dx cmp al, FF je L1 : : The Circuit A 1 5 8088 Minimum Mode A18 A0 : D7 D6 IOR IOW A19 D5 D4 D3 D2 D1 D0 A 1 4 A 1 3 A 1 2 A 1 1 A 1 0 A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 IOR 5V 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 mov ah, 00 mov al, 01 L1: out dx, al mov cx, FFFF L2: dec cx jnz L2 cmp ah, 00 jne L3 rol al, 1 cmp al, 01 jne L1 jmp L4 L3: ror al, 1 cmp al, 80 jne L1 L4: mov bl, al in al, dx cmp al, FF je L6 test al, 01 jnz L5 xor ah, FF jmp L6 L5: test al, 80 jz L7 L6: mov al, bl jmp L1 L7: 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 mov ah, 00 mov al, 01 L1: out dx, al mov cx, FFFF L2: dec cx jnz L2 cmp ah, 00 jne L3 rol al, 1 cmp al, 01 jne L1 jmp L4 L3: ror al, 1 cmp al, 80 jne L1 L4: mov bl, al in al, dx cmp al, FF je L6 test al, 01 jnz L5 xor ah, FF jmp L6 L5: test al, 80 jz L7 L6: mov al, bl jmp L1 L7: Ngắt là gì? Thăm dò While studying, I’ll check the bucket every 5 minutes to see if it is already full so that I can transfer the content of the bucket to the drum. THĂM DÒ Ngắt I’ll just study. When the speaker starts playing music it means that the bucket is full. I can then transfer the content of the bucket to the drum. 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: (IP) = 0000h (CS) = FFFFh IF = 0 Bộ vi xử lý tìm và lấy 1 byte lệnh. IP tăng lên 1. Bộ vi xử lý giải mã và thực hiện lệnh nếu tất cả các byte lệnh của một lệnh đã được lấy. Quay trỏ lại bước 2. 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 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 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ý 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. Bộ vi xử lý xoá cờ ngắt Bộ vi xử lý lưu giá trị hiện thời của CS vào stack. Bộ vi xử lý lưu giá trị hiện thờI của IP vào stack. Bộ vi xử lý nhân số ngắt với 4. Kết quả này chính là địa chỉ 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. Quay trở về bước 2. 8088 và một thiết bị ra đơn giản 8088 và một thiết bị vào đơn giản 8088 và thiết bị vào hoạt động theo cơ chế ngắt 8088 và một thiết bị vào hoạt động theo cơ chế ngắt 8088 và một thiết bị vào hoạt động theo cơ chế ngắt 8088 và một thiết bị vào hoạt động theo cơ chế ngắt 8088 và một thiết bị vào hoạt động theo cơ chế ngắt INT 3 The Circuit A 1 5 8088 Minimum Mode A18 A0 : D7 D6 IOR IOW A19 D5 D4 D3 D2 D1 D0 A 1 4 A 1 3 A 1 2 A 1 1 A 1 0 A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 IOR 5V Chương trình chính mov ax,0000 mov ds, ax mov bx, 000C mov ax, 2800 mov [bx], ax mov ax, 5000 mov [bx+02], ax sti mov dx, F000 mov ah, 00 mov al, 01 L1: cmp ah, 88 je L4 out dx, al mov cx, FFFF L2: dec cx jnz L2 cmp ah, 00 jne L3 rol al, 1 jmp L1 L3: ror al, 1 jmp L1 L4: ISR bắt đầu từ 52800h Kết thúc Chương trình con phục vụ ngắt (ISR) mov bl, al in al, dx test al, 01 jnz S1 xor ah, FF jmp S2 S1: test al, 80 jnz S2 mov ah, 88 S2: mov al, bl iret 8259 ICW ICW1, ICW2 ICW3, ICW4 OCW1 và OCW2 OCW3 8259 đơn ICW1: 13H ICW2: 08H ICW3: 09H Interrupt Sources in PC Sources of NMI 8259s nối tầng 8259s nối tầng IRQ9 Instead of IRQ2 Interrupts (Summary) Edge Triggered and Interrupt Sharing Level triggered mode: IRQ line should be brought down before EOI. Edge triggered mode: noise on IRQ lines might cause false interrupts. New computer and busses. Level triggered. Interrupt sharing.
Tài liệu liên quan