Sự khác biệt thực sự giữa các ngắt nhạy cảm cạnh và mức độ nhạy


7

Hiện tại tôi đang làm việc trên MCU C8051F120 nơi các ngắt ngoài có thể được xác định theo hai cách:

  1. Cạnh nhạy cảm (rơi)
  2. Mức độ nhạy cảm (mức độ thấp)

Trong các ngắt nhạy cảm cấp độ ngay khi MCU phát hiện mức thấp ở chân ngoài, nó sẽ thực thi ISR ​​giống như phát hiện cạnh rơi.

Tôi biết tôi sai vì cả hai không thể giống nhau. Do đó tôi đang hỏi câu hỏi này: sự khác biệt thực sự giữa hai người, trong quy trình phát hiện của họ hoặc trong việc thực hiện ISR là gì?



1
3 người nghĩ rằng điều này được nghiên cứu kỹ, WTF.
Alec Teal

Câu trả lời:


9

Nó chính xác những gì được nói.

Nếu ngắt cạnh được đặt, ISR sẽ chỉ bị bắn khi cạnh rơi / tăng của xung. Trong khi nếu ngắt độ nhạy mức (như bạn nói), ISR sẽ được kích hoạt mỗi khi có tín hiệu mức thấp / mức cao trên chân tương ứng.

Nói tóm lại, ngắt cạnh chỉ được kích hoạt khi thay đổi cạnh, trong khi ngắt mức được kích hoạt miễn là xung thấp hoặc cao.

Vì vậy, nếu bạn có bộ ngắt mức thấp, MCU sẽ tiếp tục thực thi ISR ​​miễn là chân thấp.


Cảm ơn tôi đã có được những gì tôi muốn..chỉ cần làm rõ thêm một lần nữa .. trong trường hợp bị gián đoạn ở mức độ thấp, nó sẽ tiếp tục thực thi ISR ​​miễn là tín hiệu ở mức thấp..tôi sẽ thoát khỏi thói quen ISR khi mức tín hiệu tăng cao , đúng?
nkg2743

@ nkg2743 Vâng, bạn đã đúng.
Golaž

5
Tôi sẽ viết lại câu cuối cùng "nó sẽ thoát khỏi thói quen ISR chỉ khi mức tín hiệu tăng cao" - bởi vì nó sẽ ra khỏi ISR ​​nhưng sau đó nó lại bắt đầu ISR, thay vì không rời khỏi ISR.
vsz

5

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 IRETlệ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 IRETlệ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.


Một ví dụ về ngắt kích hoạt mức có thể là cảnh báo pin yếu, nhưng tôi không chắc đó có phải là cách nó thường được thực hiện hay không.
Greg d'Eon

1

Trên nhiều hệ thống, các ngắt có thể được chia thành ba loại - không chỉ hai; nhiều hệ thống chỉ hỗ trợ hai trong số ba, nhưng có thể có một số khác biệt như hai họ hỗ trợ.

Ngắt kích hoạt cạnh sẽ khiến CPU chuyển sang chế độ ngắt bất kỳ ngắt thời gian nào được bật, dòng ngắt đã ở trạng thái không hoạt động một thời gian sau khi ngắt được đặt lại lần cuối và sau đó đã ở trạng thái hoạt động .

Ngắt kích hoạt mức "thuần túy" sẽ khiến CPU chuyển sang chế độ ngắt bất kỳ khi nào ngắt được bật và tín hiệu ngắt hiện đang hoạt động .

Ngắt kích hoạt mức "thuần túy" sẽ khiến CPU chuyển sang chế độ ngắt bất kỳ khi nào ngắt được bật và tín hiệu ngắt đã ở trạng thái hoạt động kể từ khi được đặt lại lần cuối (nếu ở trạng thái hoạt động khi được đặt lại, nó có thể chỉ đơn giản là ở lại trong trạng thái đó).

Một lợi thế lớn của các ngắt kích hoạt cấp độ là nếu trong khi một thiết bị được bảo dưỡng vì một lý do, một lý do khác xuất hiện sẽ khiến nó phải chú ý (hoặc một thiết bị khác sử dụng cùng một dòng yêu cầu), CPU sẽ tiếp tục xem lại thiết bị cho đến khi nó hoàn toàn hài lòng và không có lý do để giữ dòng thiết lập lại.

Nhược điểm chính của các ngắt kích hoạt mức là chúng thường yêu cầu CPU thực hiện hành động rõ ràng để đặt lại chúng (các ngắt kích hoạt cạnh thường được thiết lập lại một cách ngầm định bởi bộ điều khiển ngắt khi ngắt được gửi đi) và ngắt được kích hoạt khi CPU không biết làm thế nào để phục vụ nó có thể khóa hệ thống, vì CPU sẽ không làm gì ngoài việc liên tục gọi trình xử lý ngắt vì thiết bị sẽ liên tục cần (nhưng không bao giờ nhận được) sự chú ý.


0

Tôi có kinh nghiệm để kiểm tra ngắt. Về phát hiện, chúng tôi có thể có:

  • Phát hiện cạnh với cạnh rơi / cạnh tăng từ ngắt kích hoạt bên ngoài.
  • Phát hiện mức với phát hiện mức thấp / mức cao từ ngắt kích hoạt bên ngoài.

Mạch logic từ bộ điều khiển ngắt có bộ dò cạnh và bộ phát hiện mức. Chúng ta cần xác nhận chức năng trước với kịch bản kiểm tra bên dưới:

  1. Cài đặt ngắt
  2. Xác nhận phương pháp phát hiện (4 phương pháp phát hiện như trên)
  3. Cho phép yêu cầu ngắt
  4. Xác nhận kích hoạt ngắt như mong đợi của chúng tôi từ [2] Lưu ý quan trọng là khi xử lý trong trình xử lý ngắt, thời gian cho từng loại ngắt thực hiện (ngắt cạnh hoặc ngắt mức) có thể khác nhau. Chúng ta phải chăm sóc nó để tránh vòng lặp trong xử lý ngắt.

Đó không phải là trả lời câu hỏi về hai ngắt khác nhau!
jusaca
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.