Một ngắt nhạy cảm cấp độ và một ngắt nhạy cảm cạnh thực sự là hai điều hoàn toàn khác nhau. Tôi sẽ cố gắng đưa ra một số hiểu biết chung có thể giúp bạn hiểu cách thức các ngắt khác hoạt động.
Giả sử rằng CPU của bạn có thể thực thi mã ở hai chế độ: chế độ bình thường và chế độ bị gián đoạn. Để chuyển từ chế độ bình thường sang chế độ ngắt, một ngắt, bất kể đó là gì, phải xảy ra, trong khi quay lại IRET
lệnh phải được thực thi. Chúng ta cũng giả sử rằng nếu một ngắt xảy ra trong khi ở chế độ ngắt thì nó được lưu bằng cách nào đó nhưng nó không được phục vụ ngay lập tức, tức là khi ở chế độ ngắt, CPU không thể bị gián đoạn.
Vậy ngắt là gì? Tôi sẽ nói đó là một sự kiện : một cái gì đó xảy ra, một bộ đếm thời gian tràn ra, một pin xuống thấp, bất cứ điều gì. CPU làm một cái gì đó để đáp ứng với sự kiện sau đó tiếp tục thực hiện bình thường. Điều gì xảy ra nếu một sự kiện xảy ra trong khi một sự kiện khác đang được phục vụ? Thông thường một bit được đặt trong một số thanh ghi và ngay sau khi IRET
lệnh CPU bị gián đoạn một lần nữa, hãy kiểm tra bit nào được đặt và thực hiện đúng quy trình dịch vụ ngắt.
Bây giờ bạn có thể thấy tại sao mức kích hoạt và kích hoạt cạnh là hai điều khác nhau: chúng là hai sự kiện khác nhau. Khi ISR của bạn ở mức ngắt kích hoạt được thực thi, bạn có thể xóa bit ngắt như điều đầu tiên: nếu mức đó ở mức thấp, phần cứng sẽ ngay lập tức kích hoạt một ngắt khác sẽ được phục vụ ngay khi bạn kết thúc việc này. Trong một cạnh được kích hoạt ngắt, bạn cần ghim lên cao và sau đó lại thấp để kích hoạt ngắt một lần nữa.
Tôi không thể nghĩ ra một ví dụ có ý nghĩa về thời điểm bạn cần ngắt kích hoạt cấp độ, kích hoạt cạnh có vẻ hữu ích hơn nhiều và dù sao bạn cũng thường cần.