3. CẤU TRÚC NGẮT CỦA Atmega
3.5. NGẮT TRONG NGẮT.
Khi AVR đang thực hiện một trình phục vụ ngắt thuộc một ngắt nào đó thì lại có một ngắt khác được kích hoạt. Trong những trường hợp như vậy thì một ngắt có mức ưu tiên cao hơn có thể ngắt một ngắt có mức ưu tiên thấp hơn. Lúc này ISR của ngắt có mức ưu tiên cao hơn sẽ được thực thi(*)
Khi thực hiện xong ISR của ngắt có mức ưu tiên cao hơn thì nó mới quay lại phục vụ tiếp ISR của ngắt có mức ưu tiên thấp hơn trước khi trở về chương trình chính. Đây gọi là ngắt trong ngắt.
- Giả định là khi một ISR nào đó đang thực thi thì xảy ra một yêu cầu ngắt từ một ISR khác có mức ưu tiên thấp hơn thì ISR có mức ưu tiên thấp hơn không được phục vụ, nhưng nó sẽ không bị bỏ qua luôn mà ở trạng thái chờ. Nghĩa là ngay sau khi ISR có mức ưu tiên cao hơn thực thi xong thì đến lượt ISR có mức ưu tiên thấp hơn sẽ được phục vụ.
- (*) : Điều này chỉ xảy ra khi trong code của ISR của ngắt có mức ưu tiên thấp hơn có lệnh set bit I trong thanh ghi SREG (đó là lệnh SEI ).
Các ngắt ngoài
Các ngắt ngoài được kích hoạt bởi 2 chân INT0, và INT1. Chú ý rằng nếu đã kích hoạt, các ngắt sẽ kích bằng (trigger even)nếu các chân INT0,INT1 được cấu hình là các ngõ ra. Cái đặc điểm này cung cấp 1 con đường chung cho ngắt mềm.Các ngắt ngoài có thể được kích bởi cạnh xuống hoặc lên hoặc mức thấp. Sự cài đặt này được chỉ định đặc biệt trong thanh ghi điều khiển MCU – MCUCR.
MCU Control Register– MCUCR
Thanh ghi MCU chứa các bit điều khiển ngắt có ý thức kiểm soát và chức năng MCU chung .
Bit 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0
External Interrupt 1 được kích hoạt bởi chân ngoài INT1 nếu SREG I-bit và mặt nạ ngắt tương ứng trong GICR là set(1). Các mức độ và cạnh trong chân INT1 ngoài kích hoạt ngắt được định nghĩa trong bảng sau:
Bit 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0
External Interrupt 0 được kích hoạt bởi chân ngoài INT0 nếu SREG I-bit và mặt nạ ngắt tương ứng trong GICR là set(1). Các mức độ và cạnh trong chân INT0 ngoài kích hoạt ngắt được định nghĩa trong bảng sau:
General Interrupt Control Register –GICR
Bit 7 – INT1: External Interrupt Request 1 Enable
Khi bit INT1 set lên 1 và I-bit trong thanh ghi trạng thái SRGE là 1,ngắt chân ngoài được kích hoạt. Ngắt tương ứng của External Interrupt Request 1 được thực thi từ INT0 Interrupt Vector.
Bit 6 – INT0: External Interrupt Request 0 Enable
Khi bit INT0 set lên 1 và I-bit trong thanh ghi trạng thái SRGE là 1,ngắt chân ngoài được kích hoạt. Ngắt tương ứng của External Interrupt Request 0 được thực thi từ INT0 Interrupt Vector.
General Interrupt Flag Register – GIFR
Bit 7 – INTF1: External Interrupt Flag 1
Khi 1 sự kiện tại chân INT1 kích hoạt 1 yêu cầu ngắt INTF1 sẽ lên 1. Nếu I-bit trong SREG và bit INT1 trong GICR là 1,MCU sẽ nhảy đến vector ngắt tương
ứng. Cờ sẽ xóa khi thực hiện ngắt thường xuyên. Đôi khi, cờ có thể được xóa nếu ta ghi trực tiếp 1 giá trị vào nó
• Bit 6 – INTF0: External Interrupt Flag 0
Khi 1 sự kiện tại chân INT0 kích hoạt 1 yêu cầu ngắt INTF0 sẽ lên 1. Nếu I-bit trong SREG và bit INT1 trongGICR là 1,MCU sẽ nhảy đến vector ngắt tương ứng. Cờ sẽ xóa khi thực hiện ngắt thường xuyên. Đôi khi, cờ có thể được xóa nếu ta ghi trực tiếp 1 giá trị vào nó.