AVR cung cấp 1 vài nguồn ngắt khỏc nhau. Cỏc ngắt này và vector reset riờng biệt cú vector chương trỡnh riờng biệt nằm trong khụng gian nhớ chương trỡnh. Tất cả cỏc ngắt được chỉ định bởi cỏc bit cho phộp riờng biệt mà cỏc bit này phải được ghi mức logic 1 cựng với bit cho phộp ngắt toàn cục trong thanh ghi trạng thỏi để cho phộp ngắt. Phụ thuộc vào giỏ trị PC, cỏc ngắt này phải được tự động loại bỏ khi cỏc bit Boot Lock - BLB02 or BLB12 - được lập trỡnh. Yếu tố này cải thiện độ an toàn phần mềm.
Địa chỉ thấp nhất trong khụng gian bộ nhớ chương trỡnh được mặc định là Reset và Interrupt Vectors. Bảng vector ngắt
36
Hỡnh 2.7. Bảng vector ngắt và reset
Khi địa chỉ càng nhỏ thỡ thứ tự ưu tiờn càng cao.
Cỏc vector ngắt cú thể được chuyển sang đầu của vựng Boot Flash bằng cỏch đặt bit IVSEL trong thanh ghi điều khiển ngắt (MCUCR). Reset Vector cú thể được chuyển sang đầu của vựng Boot Flash bằng cỏch lập trỡnh BOOTRST fuse.
Khi một ngắt xảy ra, bit I (bit cho phộp ngắt toàn cục) được xúa và tất cả cỏc ngắt được loại bỏ. Phần mềm sử dụng cú thể ghi mức logic 1 vào bit I để cho phộp cỏc ngắt tiếp theo. Tất cả cỏc ngắt được kớch hoạt cú thể ngắt những thường trỡnh ngắt hiện tại. Bit I được đặt tự động khi trở về từ lệnh RETI của ngắt.
Cú 2 loại ngắt cơ bản.
+ Loại thứ nhất được gõy ra bởi sự kiện mà đặt cờ ngắt. Đối với loại ngắt này, PC được hướng tới Interrupt Vector tương ứng để thực hiện thường trỡnh phục vụ ngắt và phần cứng xoỏ cờ ngắt tương ứng. Cỏc cờ ngắt cũng cú thể được ghi mức logic 1 vào vị trớ bit cờ để được xoỏ. Nếu một điều kiện
37
ngắt xảy ra trong khi bit cho phộp ngắt tương ứng bị xoỏ, thỡ cờ ngắt sẽ được đặt và được nhớ cho đến khi ngắt được thực hiện, hoặc là cờ ngắt được xoỏ bởi phần mềm. Tương tự nếu 1 hoặc nhiều điều kiện ngắt xảy ra trong khi cờ cho phộp ngắt toàn cục bị xoỏ thỡ cỏc cờ ngắt tương ứng sẽ được đặt và nhớ cho đến khi cờ cho phộp ngắt toàn cục được đặt và nú sẽ được thực hiện theo thứ tự ưu tiờn.
+ Loại ngắt thứ 2 sẽ kớch hoạt kộo dài trong thời gian điều kiện ngắt tồn tại. Cỏc ngắt này khụng cần thiết phải cú cờ ngắt. Nếu điều kiện ngắt mất đi trước khi ngắt được cho phộp, thỡ ngắt sẽ khụng xảy ra.
Khi AVR thoỏt khỏi từ một ngắt, nú sẽ luụn trở về chương trỡnh chớnh và thực hiện một hoặc nhiều lệnh trước khi một ngắt nào đú cũn đợi đú được phục vụ.
Chỳ ý rằng cỏc thanh ghi trạng thỏi khụng tự động lưu trữ khi nhập vào một thường trỡnh ngắt, và cũng khụng lưu trữ lại khi trở về từ một thường trỡnh ngắt. Điều này phải được thực hiện bởi phần mềm.
Khi sử dụng cõu lệnh CLI để cấm ngắt, cỏc ngắt sẽ khụng được tỏc động ngay lập tức. Khụng cú ngắt nào được thực hiện sau khi thực hiện lệnh CLI, thậm chớ nú xảy ra cựng lỳc với lệnh CLI.
Thời gian đỏp ứng của 1 ngắt
Việc thực hiện ngắt trong ớt nhất 4 chu kỳ đồng hồ với tất cả cỏc ngắt. Sau 4 chu kỳ đồng hồ, địa chỉ vector chương trỡnh tương ứng với thường trỡnh điều khiển ngắt thực sự được khởi tạo. Trong thời gian 4 chu kỳ này, PC được cất vào trong ngăn xếp. Vector thường là lệnh nhảy đến thường trỡnh ngắt và lệnh nhảy này mất 3 chu kỳ đồng hồ. Nếu một ngắt xảy ra trong khi thực hiện một lệnh nhiều chu kỳ thỡ lệnh được hoàn thành trước khi ngắt được phục vụ. Nếu một ngắt xảy ra khi MCU đang trong chế độ ngủ thỡ thời gian đỏp ứng ngắt sẽ tăng thờm 4 chu kỳ. Thời gian tăng thờm này là thời gian để khởi động lại từ chế độ ngủ.
Sự trở về từ một thường trỡnh điều khiển ngắt mất 4 chu kỳ xung nhịp. Trong thời gian 4 chu kỳ này, PC (2 bytes) được lấy ra từ ngăn xếp, SP được tăng lờn 2, và bit I trong SREG được đặt.
38