dce 2009 Ngt qung BK TP HCM 2009
dce 2009 Ngắt quãng BK TP. HCM © 2009, CE Department
dce 2009 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 2
dce 2009 Giới thiệu (tt) • 18 F 2220 có nhiều nguồn ngắt và có độ ưu tiên (priority) khác nhau. – Ngắt có độ ưu tiên cao : 0008 h – Ngắt có độ ưu tiên thấp : 0018 h 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 © 2009, CE Department 3
dce 2009 Giới thiệu (tt) © 2009, CE Department 4
dce 2009 Các loại ngắt quãng • • Ngắt ngoài (3 kênh). Timer 0, 1, 2. Port. B interrupt change. Capture/Compare/PWM interrupt USART ADC Comparator © 2009, CE Department 5
dce 2009 Cách thức hoạt động © 2009, CE Department 6
dce 2009 Thiết kế chương trình sử dụng ngắt quãng • 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). © 2009, CE Department 7
dce 2009 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. © 2009, CE Department 8
dce 2009 Khở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. © 2009, CE Department 9
dce 2009 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ỉ 08 h nếu là nguồn ngắt có độ ưu tiên cao, và tới địa chỉ 18 h nếu là nguồn ngắt có độ ưu tiên thấp. © 2009, CE Department 10
dce 2009 Ví dụ khởi tạo ngắt timer 0 ; cho phép ngắt xảy ra với độ ưu tiên cao. BSF INTCON 2, TMR 0 IP ; xoá cờ ngắt BCF INTCON, TMR 0 IF ; cho phép ngắt timer 0 xảy ra BSF INTCON, TMR 0 IE © 2009, CE Department 11
dce 2009 Khởi tạo ngắt timer 0 INIT_TIMER 0 BSF BCF BSF RCON, IPEN ; enable priority interrupts. INTCON 2, TMR 0 IP INTCON, TMR 0 IF INTCON, TMR 0 IE BSF CLRF MOVLW MOVWF BSF RETURN INTCON, GIEH ; set the global interrupt enable bits INTCON, GIEL T 0 CON 0 x 3 c TMR 0 H 0 x. AF TMR 0 L T 0 CON, TMR 0 ON © 2009, CE Department 12
dce 2009 Các thanh ghi điều khiển interrupt • • RCON INTCON 2 INTCON 3 PIR 1, PIR 2 PIE 1, PIE 2 IPR 1, IPR 2 © 2009, CE Department 13
dce 2009 Cấu trúc chương trình sử dụng ngắt quãng ORG GOTO MAIN CALL GOTO INIT_INTERRUPT RETURN 00 h MAIN 08 H ISR_HIGH 18 H ISR_LOW INIT_INTERRUPT $ EXTERNAL_INTERUPT_ROUTINE BCF INTCON, INT 0 IF RETURN TIMER 0_INTERRUPT_ROUTINE BCF INTCON, TMR 0 IF RETURN ISR_HIGH CALL EXTERNAL_INTERUPT_ROUTINE RETFIE ISR_LOW CALL TIMER 0_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 14
- Slides: 14