3.3.2.5.4. Thứ tự ƣu tiên ngắt
Không nhƣ vi điều khiển họ 8051, ở đó thứ tự ƣu tiên của các ngắt có thể thay đổi đƣợc ( bằng cách lập trình ). Với vi điều khiển AVR thứ tự ƣu tiên các ngắt là không thể thay đổi và theo qui tắc: “ Một vec tơ ngắt có địa chỉ thấp hơn trong bộ nhớ chƣơng trình có mức độ ƣu tiên cao hơn ”. Chẳng hạn ngắt ngoài 0 ( INT0 ) có mức độ ƣu tiên cao hơn ngắt ngoài 1 ( INT1 ).
Để cho phép một ngắt ngƣời dùng cần cho phép ngắt toàn cục ( set bit I trong thanh ghi SREG ) và các bit điều khiển ngắt tƣơng ứng.
Khi một ngắt xảy ra và đang đƣợc phục vụ thì bit I trong thanh ghi SREG bị xóa, nhƣ thế khi có một ngắt khác xảy ra nó sẽ không đƣợc phục vụ, do đó để cho phép các ngắt trong khi một ISR ( interrupt service routine ) khác đang thực thi, thì trong chƣơng trình ISR phải có lệnh SEI để set lại bit I trong SREG.[17]
3.3.2.5.5. Các ngắt ngoài
ATmega128 có 8 ngắt ngoài từ INT0 đến INT7 ( ở đây chƣa kể tới ngắt reset ). Tám ngắt này tƣơng ứng với 8 chân của MCU là INT0 ,INT1, …, INT7. Để ý là ngay cả khi các chân INT0, INT1, …, INT7 của MCU đƣợc cấu hình nhƣ là chân lối ra, thì các ngắt ngoài vẫn có tác dụng nếu đƣợc cho phép.
Các ngắt ngoài có thể bắt mẫu theo kiểu cạnh lên ( Rising ), cạnh xuống ( Falling ) hay mức thấp ( Low level ). Điều này đƣợc qui định trong hai thanh ghi EICRA và EICRB. Dƣới đây là mô tả chi tiết 2 thanh ghi EICRA và EICRB và các thanh ghi liên quan tới các ngắt ngoài.
1. Thanh ghi External Interrupt Control Register A – EICRA
• Bits 7..0 – ISC31, ISC30 – ISC00, ISC00: External Interrupt 3 - 0 Sense Control Bits.
Tám bit của thanh ghi EICRA sẽ điều khiển kiểu bắt mẫu cho 4 ngắt INT3, INT2, INT1, INT0. Qui định cụ thể đƣợc thể hiện trong Bảng 10 .
n = 3, 2, 1, 0