Điểm có một ngắt dựa trên cấp độ là gì?


8

Bất cứ nơi nào tôi đã tìm kiếm về việc triển khai thực tế của ngắt dựa trên cấp độ, tôi chỉ tìm thấy một đề nghị mà mọi người đã đưa ra tức là vô hiệu hóa ngắt ngay khi nó xâm nhập vào ISR để nó không tiếp tục kích hoạt trở lại.

Một điều khác tôi đã đọc là nó được sử dụng để tạo ra một vòng lặp, miễn là có ngắt, phục vụ ISR, nhưng điều đó có thể đạt được bằng một vòng lặp whilehoặc do while.

Và những lợi thế mà ngắt cạnh cấp độ có thể mang lại là sự xa xỉ khi chạy một hướng dẫn của chương trình chính ở giữa việc phục vụ ISR và độ trễ. Tôi đoán.

Vì vậy, có điều gì tôi đang thiếu khi hiểu về ngắt cấp độ cạnh?

Một câu trả lời tuyệt vời sẽ cho tôi thấy một số cách sử dụng thực tế của các ngắt dựa trên cấp độ.


... Một điều khác tôi đã đọc là nó được sử dụng để tạo ra một vòng lặp, miễn là có ngắt, phục vụ ISR nhưng điều đó có thể đạt được trong một thời gian hoặc làm trong khi vòng lặp .... Thực tế một số điều có thể là đạt được một cách, không có nghĩa là chúng ta nên loại bỏ tất cả các cách khác để làm như vậy.
Eugene Sh.

@EugeneSh. Không nghi ngờ gì về điều đó, nhưng phải có một số lợi thế vững chắc để làm điều tương tự theo cách khác. Phải không? Tôi thích thú hơn khi biết rằng "lợi thế". Tôi chỉ muốn biết loại khác biệt mà nó tạo ra khi lặp bằng cách sử dụng các câu lệnh lặp và ngắt dựa trên mức? Nếu lặp là mục đích duy nhất đạt được bằng cách sử dụng nó.
MaNyYaCk

2
Điều gì nếu bạn có nhiều ngắt đang chờ xử lý trên một dòng? ví dụ: mỗi bộ kích hoạt của ISR xử lý một gói dữ liệu nhưng thiết bị có nhiều trong hàng đợi? Với ngắt kích hoạt cạnh, bộ điều khiển ngắt cần biết khi nào ngắt trước đó được xử lý và khi nào là thời gian để gửi ngắt tiếp theo. Ngoài ra, đối với các trường hợp sử dụng khi nhiều ngắt được xác nhận khi máy chủ vẫn xử lý lỗi trước đó, mà không kích hoạt mức độ thì khó có thể xếp hàng và ưu tiên chúng.
dùng3528438

Câu trả lời:


10

Các ngắt dựa trên mức có thể được chia sẻ một cách an toàn và xếp tầng một cách dễ dàng và đáng tin cậy; ngược lại, việc chia sẻ các ngắt kích hoạt cạnh đáng tin cậy thường rất khó khăn và đôi khi không thể.

Khi sử dụng các ngắt dựa trên mức, một trình xử lý ngắt có thể chỉ cần hỏi lần lượt từng nguồn ngắt có thể "Bạn có cần chú ý" không và phục vụ nó nếu có. Khi đã xong, xử lý có thể trở lại. Nếu một nguồn ngắt được thăm dò sớm trong chuỗi quyết định nó cần được chú ý trong khi nguồn sau được bảo dưỡng, bộ xử lý sẽ nhận thấy rằng chân IRQ vẫn hoạt động và kích hoạt lại trình xử lý ngắt, do đó cho phép ngắt đến muộn được phục vụ.

Khi sử dụng các ngắt kích hoạt cạnh không xếp tầng, mọi thứ trở nên phức tạp hơn. Sau khi một trình xử lý ngắt đã đi qua và phục vụ tất cả mọi người, sau đó nó phải đi qua và thăm dò lại mọi người để tìm hiểu xem một thiết bị được thăm dò trước đó có quyết định rằng nó cần dịch vụ hay không. Chỉ sau khi mọi thiết bị đã báo cáo liên tiếp rằng nó không cần dịch vụ thì nó mới an toàn để ngắt trở lại. Lưu ý rằng nếu các thiết bị muốn dịch vụ giữ cho chỉ báo "dịch vụ cần thiết" của chúng hoạt động, trở về từ trình xử lý ngắt tại thời điểm thiết bị cần dịch vụ có thể khiến ngắt đó vô dụng vĩnh viễn.

Nó có thể hữu ích cho chân I / O để có một số logic bắt cạnh, khi một cạnh xuất hiện, đặt chốt và đưa ra chỉ thị "dịch vụ cần thiết" cho đến khi phần mềm xóa nó. Một thứ như vậy có thể xuất hiện ở mặt trước như một ngắt nhạy cảm cạnh. Tuy nhiên, tại bất kỳ điểm hạ lưu nào, tốt hơn là nên yêu cầu logic ngắt rằng một ngắt được phục vụ mọi lúc khi bất kỳ điểm ngược dòng nào không được thỏa mãn.


Tôi muốn xin lỗi để mất rất nhiều thời gian. Nhưng câu hỏi mà tôi đã hỏi rất cụ thể đối với các Ngắt bên ngoài của bộ điều khiển và tôi phải mất một thời gian nhất định để hiểu tất cả các câu trả lời được đưa ra khi xem xét bộ xử lý với bộ điều khiển ngắt. Cảm ơn đã cung cấp câu trả lời có giá trị này.
MaNyYaCk

6

Một tình huống rõ ràng trong đó các ngắt dựa trên mức có ích là trong trường hợp tín hiệu đã ở trạng thái đó khi mã bắt đầu theo dõi tín hiệu.

Hãy xem xét một ví dụ điển hình ...

Tín hiệu: "Case_Over_Tem Nhiệt độ" xuống thấp khi môi trường trong hộp quá cao để hoạt động bình thường ..

Rõ ràng, tín hiệu này có thể xuống thấp bất cứ lúc nào, vì chúng ta đang tạo ra quá nhiều nhiệt hoặc do hộp được lắp đặt ở vị trí nóng.

Rõ ràng, khi bật nguồn, dòng đó có thể ở một trong hai điều kiện. Chúng ta hãy giả sử rằng mã bật nguồn không chỉ nhìn mà thay vào đó dựa vào ngắt. Nếu ngắt được kích hoạt cạnh và tín hiệu đã ở mức thấp, khi ngắt được kích hoạt, mã thích hợp sẽ không được thực thi. Ngắt mức độ nhạy cảm sẽ được thận trọng ở đây.

Tương tự, nếu bộ xử lý được chuyển sang chế độ ngủ và không được đặt để đánh thức trên ngắt đó, dòng đó có thể xuống thấp bất cứ lúc nào. Khi bất cứ điều gì khác đánh thức nó xảy ra, bạn muốn ngắt kết nối vào thời điểm đó.

Thật vậy, có thể nói, với sự phổ biến của các bộ xử lý chế độ ngủ, các ngắt dựa trên mức độ đã trở nên hữu ích hơn.

Tuy nhiên, như với tất cả những thứ liên quan đến mã, luôn có nhiều hơn một cách để "lột da mèo". Nếu bạn không sử dụng mức dựa trên, mã đánh thức cần phải thăm dò các chân ngắt nếu chúng không được bộ xử lý tự động xếp hàng.

Rõ ràng, mức kích hoạt cũng đi kèm với tập hợp các vấn đề của riêng nó trong đó mã phải xử lý khi biết rằng nó đã xử lý điều kiện, v.v.


2

Đó là một cách khác: tại sao có các ngắt kích hoạt cạnh khó xử khi bạn có thể kích hoạt cấp độ dễ dàng hơn?

Các ngắt kích hoạt cạnh dễ bị nhiễu hơn và khó lọc hơn. Sau đó, họ sẽ nguy hiểm hơn khi chạy ra khỏi tàu hoặc lên dây cáp. Ngắt không thể rút được nguồn.

Các ngắt kích hoạt mức vẫn duy trì cho đến khi CPU xác nhận nguồn. Vì vậy, có cơ sở vững chắc của bắt tay đầy đủ. CPU có thể lọc nhiễu ra khỏi tín hiệu ngắt theo bất kỳ cách nào nó muốn, nó chỉ làm tăng thời gian phản hồi ngắt. Nếu ứng dụng yêu cầu và cho phép các tín hiệu được lọc tốt, kích hoạt mức là có thể thích ứng.

Lần đầu tiên tôi thấy các ngắt kích hoạt cạnh được sử dụng cho các NMI trên các CPU như Z80 và 6502, trong khi các ngắt có thể che được sử dụng mức kích hoạt. Các NMI được sử dụng kích hoạt cạnh chỉ đơn giản là để ngăn chặn pin bị kẹt hoặc mạch lái bị kẹt không giữ CPU tiếp tục vào NMI ISR mãi mãi. NMI phải hiển thị hoạt động để có được một hoạt động khác.

Câu trả lời, tất nhiên, là cả hai đều có ứng dụng của họ. Nhưng kích hoạt cấp độ là điểm bắt đầu và kích hoạt cạnh đã đi đến vì có một trường hợp đặc biệt.


1
Tôi sẽ không nói Z80 và 6502 sử dụng các ngắt kích hoạt cạnh để tránh các vấn đề về chân "bị kẹt". Thay vào đó, tôi nói rằng họ cần có khả năng che dấu bất kỳ loại ngắt nào khi dịch vụ đã bắt đầu và đối với NMI được thực hiện thông qua chốt "mặt nạ NMI" đặc biệt được đặt khi NMI được bảo trì và bị xóa khi Pin NMI được phát hành.
supercat

@supercat, bạn đã mô tả cách bạn nhìn thấy nhưng không phải cách Z80 / 6502 hoạt động. NMI có thể đã được cấp, giống như INT / IRQ với nguồn ngắt được loại bỏ bởi xác nhận ngắt hw hoặc sw. Hoạt động hoàn toàn tốt. Điều gì bạn nghĩ đã khiến họ thiết kế NMI như được kích hoạt cạnh và INT / IRQ theo cấp độ, bạn thấy lợi ích là gì?
TonyM

Thuật ngữ "kích hoạt cạnh" được sử dụng để mô tả các đầu vào đặt mạch phát hiện cạnh trước bộ đồng bộ hóa, do đó tín hiệu đến và đi trong một chu kỳ sẽ được xử lý, nhưng tôi cũng đã thấy nó được sử dụng để mô tả đầu vào trong đó chốt một tín hiệu trên mỗi tín hiệu đồng hồ và tìm kiếm tín hiệu vắng mặt ở một hoặc nhiều chu kỳ và sau đó xuất hiện cho một hoặc nhiều chu kỳ. Nếu NMI phải được phần mềm thừa nhận, việc không thừa nhận ngắt đầu tiên sẽ che dấu hiệu quả tất cả các phần tiếp theo.
supercat

@supercat, đó không phải là cách Z80 / 6502 hoạt động và một mình họ là chủ đề của ví dụ của tôi mà bạn đã hỏi. Nếu bạn đang thảo luận về các NMI được kích hoạt cạnh, vui lòng truy cập trò chuyện để tránh trao đổi nhận xét mở rộng. Không chắc chắn những gì tôi có thể thêm, mặc dù. Cảm ơn.
TonyM

Tôi chưa xem chi tiết về cách thức hoạt động của Z80, nhưng theo bảng dữ liệu 6502 NMI được lấy mẫu một lần trên mỗi đồng hồ phi2. Bảng dữ liệu im lặng về thời gian giữ / giữ mẫu, nhưng từ những gì tôi đã đọc ở nơi khác, một xung NMI không xuất hiện trong ít nhất ba mẫu liên tiếp sẽ không luôn được xử lý.
supercat

1

Hỗ trợ Ack / Nak dựa trên cấp độ ISR rất hữu ích khi bạn có nhiều nguồn.

Nếu bạn có nhiều ISR và nhiều thứ hạng ưu tiên trong cả SW & CTNH bên ngoài với các ưu tiên được xếp hạng.

Nếu tất cả các nguồn là cạnh HOẶC bạn vẫn phải thăm dò từng nguồn để tìm bộ nguồn nào và sau đó xóa ngắt.

Vì vậy, cả cạnh và cấp đều có lợi thế trong các kiến ​​trúc khác nhau.

Để tránh bỏ lỡ Edge IRQ, nó phải được kích hoạt sau đó được kiểm tra ngay sau khi kết thúc ISR.

Một số IRQ cấp có thể tồn tại lâu hơn ISR và được phát hiện nếu được mong đợi.


1

Đó là khi một "dòng đảng" đang được sử dụng, cùng với cống thoát mở hoặc bộ thu mở, khi chế độ hoạt động cấp có ý nghĩa hơn.

Trong trường hợp này, mỗi "bên" trên dòng kích hoạt đầu ra của họ khi họ cần "dịch vụ". Khi phần mềm xử lý ngắt bị tắt và các cuộc thăm dò (và sau đó xử lý) lần lượt từng thiết bị trên dòng bên, các thiết bị này sẽ giải phóng phần giữ và không hoạt động. Cuối cùng, không còn các ngắt (cấp) nữa, chính dòng ngắt không hoạt động và các ngắt xử lý phần mềm lại "hoạt động" trở lại.


1
nó không thành vấn đề. Điều gì xảy ra nếu máy chủ nhận được một cạnh khác trên một dòng khác khi nó đang xử lý một ngắt? một vài lựa chọn: 1) bỏ qua ngắt đến; 2) xếp hàng trong phần cứng; 3) ngắt trình xử lý ngắt hiện tại và xử lý cái mới, xử lý hoàn toàn hoặc xếp hàng sau. Với trình kích hoạt cấp độ, bạn chỉ cần để nó ở đó và nó sẽ vẫn ở đó để bạn xử lý sau khi bạn hoàn thành với ISR ​​hiện tại.
dùng3528438

@ user3528438 Tôi đang giải quyết câu hỏi về "tại sao mức độ." Vì vậy, tôi sẽ chỉ loại bỏ phần đó và tránh tranh luận.
jonk

1
Ngay cả khi sử dụng các ngắt chuyên dụng, tôi đề nghị rằng các ngắt kích hoạt cạnh chỉ tốt hơn nếu người ta có thể quan tâm đến việc phản ứng với một sự kiện có thể đến và đi vào thời điểm người ta có thể phục vụ nó, và thậm chí ở đó bằng cách sử dụng chốt sự kiện thiết bị để điều khiển ngắt có độ nhạy có thể cũng hữu ích như sử dụng ngắt có độ nhạy cạnh. Một ngắt kích hoạt cạnh có thể lưu một hướng dẫn cần thiết để xóa chốt, nhưng đó thường không phải là một chi phí hoặc tiết kiệm có ý nghĩa.
supercat

@supercat Tôi đã tập trung lại câu trả lời của mình để trả lời trực tiếp câu hỏi có tiêu đề, để tránh tham gia vào một số chương và câu thơ dài, bẩn thỉu. Đơn giản hơn nhiều. (Vâng, tôi đã sử dụng tất cả các phương thức ngắt từ ... 1974 ... vì vậy tôi đã thấy tất cả các lý do, tôi nghĩ vậy. Tôi chỉ không muốn thảo luận về chúng ngày hôm nay.)
jonk
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.