Bài giảng Vi sử lý - Chương 7: Ngắt quãng giới thiệu tới người học khái niệm về ngắt quãng, các loại ngắt quãng và cánh thức hoạt động, thiết kế chương trình sử dụng ngắt quãng, khởi tạo ngắt quãng, cấu trúc chương trình sử dụng ngắt quãng. Mời các bạn cùng tham khảo nội dung chi tiết.
Trang 1TP.HCM
Ngắt quãng
Trang 2©2009, CE Department 2
Giới thiệu
• Ngắt quãng là gì?
– An interrupt is the occurrence of a
condition an event that cause a temporary suspension
of a program while the event is serviced by another program (Interrupt Service Routine
ISR or Interrupt Handler).
©2009, CE Department
Trang 3Giới thiệu (tt)
• 18F2220 có nhiều nguồn ngắt và có độ ưu
tiên (priority) khác nhau
– Ngắt có độ ưu tiên cao : 0008h
– Ngắt có độ ưu tiên thấp : 0018h
Khi một nguồn ngắt có độ ưu tiên cao xảy ra thì nó ngắt bất
kì nguồn ngắt có độ ưu tiên thấp, dù cho nguồn ngắt đó đang thực hiện
Trang 4©2009, CE Department 4
Giới thiệu (tt)
©2009, CE Department
Trang 5Các loại ngắt quãng
• Ngắt ngoài (3 kênh)
• Timer 0, 1, 2
• PortB interrupt change
• Capture/Compare/PWM interrupt
• USART
• ADC
• Comparator
Trang 6©2009, CE Department 6
Cách thức hoạt động
©2009, CE Department
Trang 7• Polling: chương trình chính kiểm tra các cờ,
đợi cho có sự kiện xảy ra (không hiệu quả trong một số trường hợp)
• Interrupt driven: CPU có thể thực hiện những công việc khác, không cần chờ các sự kiện xảy ra ( hiệu quả trong các ứng dụng điều khiển)
• I/O processor: các processor chuyên dụng xử
lý các sự kiện I/O, không can thiệp vào hoạt động của CPU (tốt nhất nhưng chi phí cao)
Trang 8©2009, CE Department 8
Xử lý ngắt
• Khi một nguồn ngắt xảy ra và được chấp nhận bởi CPU thì chương trình chính sẽ bị ngắt
Sau đó CPU sẽ thực hiện các thao tác sau:
– Thực thi xong lệnh hiện tại.
– PC được lưu lại trên stack.
– Các trạng thái hiện tại được lưu lại bên trong.
– PC nhận giá trị địa chỉ vector tương ứng với nguồn ngắt.
– Thực thi ISR.
• ISR hoàn thành khi gặp lệnh RETFIE, sau đó phục hồi trạng thái của CPU rồi lấy lại giá trị
PC từ stack
Trang 9Khởi tạo ngắt quãng
• IPEN (RCON<7>) : cho/không cho phép xảy ra
ngắt với độ ưu tiên khác nhau.
• IPEN: enable
– GIEH (INTCON<7>) : cho/không cho phép các ngắt có độ
ưu tiên cao.
– GIEL (INTCON<6>) : cho/không cho phép các ngắt có độ
ưu tiên thấp.
• IPEN: disable
– GIEH (INTCON<7>) : cho/không cho phép tất cả các nguồn ngắt xảy ra.
– PEIE (INTCON<6>) : cho/không phép tất cả các nguồn ngắt ngoại vi.
Trang 10©2009, CE Department 10
Khởi tạo ngắt quãng (tt)
• Có 3 bit điều khiển hoạt động của mỗi nguồn ngắt
– Flag bit – Enable interrupt bit – Priority bit
Khi flag bit, enable bit và global enable bit được set thì chương trình sẽ nhảy tới địa chỉ 08h nếu là
nguồn ngắt có độ ưu tiên cao, và tới địa chỉ 18h nếu
là nguồn ngắt có độ ưu tiên thấp.
©2009, CE Department
Trang 11Ví dụ khởi tạo ngắt timer 0
; cho phép ngắt xảy ra với độ ưu tiên cao
; xoá cờ ngắt
; cho phép ngắt timer0 xảy ra
Trang 12©2009, CE Department 12
Khởi tạo ngắt timer 0
INIT_TIMER0
BSF RCON,IPEN ;enable priority interrupts.
BCF INTCON2,TMR0IP
BSF INTCON,TMR0IF
BSF INTCON,TMR0IE
BSF INTCON,GIEH ;set the global interrupt enable bits
BSF INTCON,GIEL
BSF T0CON,TMR0ON
RETURN
©2009, CE Department
Trang 13Các thanh ghi điều khiển interrupt
• RCON
• INTCON
• INTCON2
• INTCON3
• PIR1, PIR2
• PIE1, PIE2
• IPR1, IPR2
Trang 14©2009, CE Department 14
GOTO MAIN
GOTO ISR_HIGH
GOTO ISR_LOW
MAIN
CALL INIT_INTERRUPT
GOTO $
INIT_INTERRUPT
RETURN
EXTERNAL_INTERUPT_ROUTINE
RETURN
TIMER0_INTERRUPT_ROUTINE
RETURN
ISR_HIGH
CALL EXTERNAL_INTERUPT_ROUTINE
RETFIE
ISR_LOW
CALL TIMER0_INTERRUPT_ROUTINE
RETFIE
Flag bit phải được xoá bằng software trước khi cho phép ngắt xảy
ra tiếp tục, tránh trường hợp gọi đệ quị ISR
©2009, CE Department