Hệ thống nhúng - Ngắt

Ngắt là một tín hiệu đến bộ xử lý do phần cứng hoặc phần mềm phát ra cho biết một sự kiện cần được chú ý ngay lập tức. Bất cứ khi nào ngắt xảy ra, bộ điều khiển sẽ hoàn thành việc thực thi lệnh hiện tại và bắt đầu thực hiệnInterrupt Service Routine (ISR) hoặc Interrupt Handler. ISR cho bộ xử lý hoặc bộ điều khiển biết phải làm gì khi xảy ra ngắt. Các ngắt có thể là ngắt phần cứng hoặc ngắt phần mềm.

Ngắt phần cứng

Ngắt phần cứng là một tín hiệu cảnh báo điện tử được gửi đến bộ xử lý từ một thiết bị bên ngoài, như bộ điều khiển đĩa hoặc thiết bị ngoại vi bên ngoài. Ví dụ: khi chúng ta nhấn một phím trên bàn phím hoặc di chuyển chuột, chúng sẽ kích hoạt các ngắt phần cứng khiến bộ xử lý đọc vị trí tổ hợp phím hoặc chuột.

Ngắt phần mềm

Ngắt phần mềm là do một điều kiện ngoại lệ hoặc một lệnh đặc biệt trong tập lệnh gây ra ngắt khi nó được thực thi bởi bộ xử lý. Ví dụ: nếu đơn vị logic số học của bộ xử lý chạy lệnh chia một số cho 0, để gây ra ngoại lệ chia cho 0, do đó khiến máy tính bỏ phép tính hoặc hiển thị thông báo lỗi. Các lệnh ngắt phần mềm hoạt động tương tự như các lệnh gọi chương trình con.

Polling là gì?

Trạng thái giám sát liên tục được gọi là polling. Bộ vi điều khiển tiếp tục kiểm tra trạng thái của các thiết bị khác; và trong khi làm như vậy, nó không có hoạt động nào khác và sử dụng tất cả thời gian xử lý để theo dõi. Vấn đề này có thể được giải quyết bằng cách sử dụng ngắt.

Trong phương pháp ngắt, bộ điều khiển chỉ phản hồi khi xảy ra ngắt. Do đó, bộ điều khiển không bắt buộc phải thường xuyên theo dõi trạng thái (cờ, tín hiệu, v.v.) của các thiết bị được kết nối và sẵn có.

Ngắt v / s Polling

Đây là một phép tương tự phân biệt ngắt quãng với bỏ phiếu -

Làm gián đoạn Thăm dò ý kiến
Một sự gián đoạn giống như một shopkeeper. Nếu ai đó cần một dịch vụ hoặc sản phẩm, anh ta đến gặp anh ta và đáp ứng nhu cầu của anh ta. Trong trường hợp ngắt, khi nhận được các cờ hoặc tín hiệu, chúng sẽ thông báo cho bộ điều khiển rằng chúng cần được bảo dưỡng. Phương pháp bỏ phiếu giống như một salesperson. Người bán hàng đi từ cửa này đến cửa khác trong khi yêu cầu mua một sản phẩm hoặc dịch vụ. Tương tự, bộ điều khiển tiếp tục theo dõi từng cờ hoặc tín hiệu cho tất cả các thiết bị và cung cấp dịch vụ cho bất kỳ thành phần nào cần dịch vụ của nó.

Quy trình dịch vụ ngắt

Đối với mỗi lần ngắt, phải có một quy trình dịch vụ ngắt (ISR), hoặc interrupt handler. Khi xảy ra ngắt, bộ vi điều khiển chạy quy trình dịch vụ ngắt. Đối với mỗi ngắt, có một vị trí cố định trong bộ nhớ chứa địa chỉ của quy trình phục vụ ngắt, ISR. Bảng các vị trí bộ nhớ được thiết lập để giữ địa chỉ của các ISR được gọi là Bảng Vectơ ngắt.

Bảng vectơ ngắt

Có sáu ngắt bao gồm RESET trong 8051.

Ngắt Vị trí ROM (Hex) Ghim
Ngắt Vị trí ROM (HEX)
COM nối tiếp (RI và TI) 0023
Bộ hẹn giờ 1 ngắt (TF1) 001B
Ngắt HW bên ngoài 1 (INT1) 0013 P3.3 (13)
Ngắt HW bên ngoài 0 (INT0) 0003 P3.2 (12)
Bộ hẹn giờ 0 (TF0) 000B
Cài lại 0000 9
  • Khi chân đặt lại được kích hoạt, 8051 sẽ nhảy đến vị trí địa chỉ 0000. Đây là thiết lập lại nguồn.

  • Hai ngắt được dành riêng cho bộ định thời: một cho bộ định thời 0 và một cho bộ định thời 1. Vị trí bộ nhớ lần lượt là 000BH và 001BH trong bảng vectơ ngắt.

  • Hai ngắt được dành riêng cho các ngắt bên ngoài phần cứng. Ghim số. 12 và Số pin. 13 trong Cổng 3 tương ứng cho các ngắt phần cứng bên ngoài INT0 và INT1. Vị trí bộ nhớ lần lượt là 0003H và 0013H trong bảng vector ngắt.

  • Truyền thông nối tiếp có một ngắt duy nhất thuộc về cả nhận và truyền. Vị trí bộ nhớ 0023H thuộc ngắt này.

Các bước thực hiện ngắt

Khi một ngắt được kích hoạt, bộ vi điều khiển sẽ thực hiện các bước sau:

  • Bộ vi điều khiển đóng lệnh đang thực thi và lưu địa chỉ của lệnh tiếp theo (PC) trên ngăn xếp.

  • Nó cũng lưu trạng thái hiện tại của tất cả các ngắt bên trong (tức là không nằm trên ngăn xếp).

  • Nó nhảy đến vị trí bộ nhớ của bảng vectơ ngắt chứa địa chỉ của quy trình dịch vụ ngắt.

  • Bộ vi điều khiển lấy địa chỉ của ISR từ bảng vectơ ngắt và chuyển đến nó. Nó bắt đầu thực hiện chương trình con phục vụ ngắt, đó là RETI (trả về từ ngắt).

  • Sau khi thực hiện lệnh RETI, bộ vi điều khiển quay trở lại vị trí mà nó bị ngắt. Đầu tiên, nó lấy địa chỉ bộ đếm chương trình (PC) từ ngăn xếp bằng cách đưa các byte trên cùng của ngăn xếp vào PC. Sau đó, nó bắt đầu thực thi từ địa chỉ đó.

Kích hoạt cạnh so với Kích hoạt cấp

Mô-đun ngắt có hai loại - kích hoạt mức hoặc kích hoạt cạnh.

Cấp độ được kích hoạt Cạnh được kích hoạt
Một mô-đun ngắt được kích hoạt theo mức luôn tạo ra một ngắt bất cứ khi nào mức của nguồn ngắt được xác nhận. Mô-đun ngắt được kích hoạt cạnh tạo ra ngắt chỉ khi nó phát hiện ra một cạnh xác nhận của nguồn ngắt. Cạnh được phát hiện khi mức nguồn ngắt thực sự thay đổi. Nó cũng có thể được phát hiện bằng cách lấy mẫu định kỳ và phát hiện mức khẳng định khi mẫu trước đó đã được khử khẳng định.
Nếu nguồn ngắt vẫn được xác nhận khi trình xử lý ngắt phần sụn xử lý ngắt, thì mô-đun ngắt sẽ tạo lại ngắt, khiến trình xử lý ngắt được gọi lại. Các mô-đun ngắt được kích hoạt bởi cạnh có thể được hoạt động ngay lập tức, bất kể nguồn ngắt hoạt động như thế nào.
Các ngắt được kích hoạt theo mức rất cồng kềnh đối với phần sụn. Các ngắt được kích hoạt bởi cạnh giữ cho độ phức tạp mã của phần sụn ở mức thấp, giảm số lượng điều kiện cho phần sụn và mang lại sự linh hoạt hơn khi xử lý các ngắt.

Bật và tắt ngắt

Khi Đặt lại, tất cả các ngắt đều bị vô hiệu hóa ngay cả khi chúng được kích hoạt. Các ngắt phải được bật bằng phần mềm để bộ vi điều khiển phản hồi lại các ngắt đó.

Thanh ghi IE (cho phép ngắt) chịu trách nhiệm cho phép và vô hiệu hóa ngắt. IE là một thanh ghi có thể nén được bitaddress.

Đăng ký cho phép ngắt

EA - ET2 ES ET1 EX1 ET0 EX0
  • EA - Bật / tắt toàn cầu.

  • - - Không xác định.

  • ET2 - Kích hoạt ngắt Timer 2.

  • ES - Kích hoạt ngắt cổng nối tiếp.

  • ET1 - Kích hoạt ngắt Timer 1.

  • EX1 - Kích hoạt ngắt bên ngoài 1.

  • ET0 - Kích hoạt ngắt Timer 0.

  • EX0 - Kích hoạt ngắt bên ngoài 0.

Để kích hoạt ngắt, chúng tôi thực hiện các bước sau:

  • Bit D7 của thanh ghi IE (EA) phải cao để phần còn lại của thanh ghi có hiệu lực.

  • Nếu EA = 1, ngắt sẽ được bật và sẽ được phản hồi, nếu bit tương ứng của chúng trong IE cao. Nếu EA = 0, không có ngắt nào sẽ phản hồi, ngay cả khi các chân liên kết của chúng trong thanh ghi IE cao.

Mức độ ưu tiên ngắt trong 8051

Chúng ta có thể thay đổi mức ưu tiên ngắt bằng cách gán mức ưu tiên cao hơn cho bất kỳ ngắt nào. Điều này được thực hiện bằng cách lập trình một thanh ghi có tênIP (ưu tiên ngắt).

Hình sau cho thấy các bit của thanh ghi IP. Sau khi đặt lại, thanh ghi IP chứa tất cả các số 0. Để ưu tiên cao hơn cho bất kỳ ngắt nào, chúng tôi đặt bit tương ứng trong thanh ghi IP lên cao.

- - - - PT1 PX1 PT0 PX0

- IP.7 Không được thực hiện.
- IP.6 Không được thực hiện.
- IP.5 Không được thực hiện.
- IP.4 Không được thực hiện.
PT1 IP.3 Xác định mức ưu tiên ngắt của Timer 1.
PX1 IP.2 Xác định mức ưu tiên Ngắt ngoài 1.
PT0 IP.1 Xác định mức ưu tiên ngắt Timer 0.
PX0 IP.0 Xác định mức ưu tiên Ngắt ngoài 0.

Ngắt bên trong Ngắt

Điều gì xảy ra nếu 8051 đang thực thi một ISR thuộc về một ngắt và một ngắt khác hoạt động? Trong những trường hợp như vậy, một ngắt có mức ưu tiên cao có thể ngắt một ngắt có mức ưu tiên thấp. Điều này được gọi làinterrupt inside interrupt. Trong 8051, ngắt có mức ưu tiên thấp có thể bị ngắt bởi ngắt có mức ưu tiên cao, nhưng không bị ngắt bởi bất kỳ ngắt có mức ưu tiên thấp nào khác.

Kích hoạt gián đoạn bởi phần mềm

Đôi khi chúng ta cần kiểm tra ISR bằng cách mô phỏng. Điều này có thể được thực hiện với các hướng dẫn đơn giản để thiết lập mức cao ngắt và do đó làm cho 8051 nhảy đến bảng vectơ ngắt. Ví dụ, đặt bit IE là 1 cho bộ định thời 1. Một lệnhSETB TF1 sẽ ngắt 8051 trong bất cứ điều gì nó đang làm và buộc nó phải nhảy đến bảng vectơ ngắt.