Ngắt và các trường hợp đặc biệt. Ví dụ ngắt

Trong kiến ​​trúc PC hệ thống cơ bảnđầu vào/đầu ra (I/O) chiếm một vị trí đặc biệt. Nó một mặt có thể được coi là một phần không thể thiếu của phần cứng, mặt khác hệ thống này là một trong những hệ thống module phần mềm hệ điều hành.

Một trong chức năng quan trọng BSVV - dịch vụ cuộc gọi hệ thống, hoặc ngắt quãng. Cuộc gọi hệ thống được tạo ra bởi phần mềm hoặc phần cứng để thực hiện hoạt động khác nhau. Cơ chế ngắt được sử dụng để thực hiện các cuộc gọi hệ thống. Bản chất của cơ chế này là hoạt động hiện tại của máy, bất kể nó là gì, đều có thể bị tạm dừng trong một thời gian. một khoảng thời gian ngắn một trong những tín hiệu cho thấy sự xuất hiện của tình huống cần xử lý ngay lập tức

Ngắt - điều này đang dừng việc thực thi lệnh hiện tại hoặc chuỗi lệnh hiện tại để xử lý một số sự kiện chương trình đặc biệt - xử lý ngắt, tiếp theo là quay lại thực hiện chương trình bị gián đoạn.

Sự kiện này có thể do một tình huống đặc biệt phát sinh trong quá trình thực hiện chương trình hoặc do tín hiệu từ thiết bị bên ngoài. Ngắt được sử dụng để phản ứng nhanh với các tình huống đặc biệt phát sinh trong quá trình thực hiện chương trình và tương tác với bộ xử lý. thiết bị bên ngoài.

Khi bị gián đoạn, hệ điều hành sẽ lưu trạng thái bộ xử lý –đăng ký giá trị và ý nghĩa bộ đếm chương trình (PC)– địa chỉ của lệnh bị gián đoạn . Trình xử lý ngắt trong HĐH xác định từ nội dung của đoạn mã đối tượng loại gián đoạn nào đã xảy ra và những hành động nào cần được thực hiện để xử lý nó. Giữa các loại có thể ngắt khác ngoài cam kết nhiều lỗi khác nhau, cũng có ngắt hẹn giờ– gián đoạn định kỳ sau một khoảng thời gian nhất định, dành cho thăm dò thiết bị– hành động hệ điều hành bằng cách kiểm tra định kỳ trạng thái của tất cả các cổng và thiết bị bên ngoài, trạng thái này có thể thay đổi theo thời gian: ví dụ: ổ đĩa flash đã được kết nối với cổng USB; máy in đã in xong và trở nên miễn phí, v.v. HĐH thực hiện cấu hình lại hệ thống và điều chỉnh các bảng hệ thống lưu trữ thông tin về thiết bị



Cơ chế ngắt được cung cấp bởi phần cứng và phần mềm máy tính thích hợp.

Bất kỳ ngoại lệ nào gây ra gián đoạn đều đi kèm với tín hiệu gọi là yêu cầu ngắt (IR). Yêu cầu ngắt từ các thiết bị bên ngoài đến bộ xử lý thông qua dòng đặc biệt và các yêu cầu phát sinh trong quá trình thực hiện chương trình đến trực tiếp từ bên trong bộ vi xử lý. Cơ chế xử lý ngắt của cả hai loại đều tương tự nhau. Hãy xem xét hoạt động của máy tính khi xuất hiện tín hiệu yêu cầu ngắt, chủ yếu dựa vào việc xử lý các ngắt phần cứng (Hình 13).

Cơm. 13. Thực hiện ngắt trên máy tính:

tр - thời gian phản hồi của bộ xử lý đối với yêu cầu ngắt;

tс - thời gian lưu trạng thái của chương trình bị ngắt và gọi bộ xử lý ngắt;

tв là thời gian phục hồi của chương trình bị gián đoạn.

Sau khi xuất hiện tín hiệu yêu cầu ngắt, máy tính tiến hành thực thi chương trình - bộ xử lý ngắt. Người xử lý thực hiện những hành động cần thiết liên quan đến tình huống đặc biệt đã phát sinh. Ví dụ: tình huống như vậy có thể là nhấn một phím trên bàn phím máy tính. Sau đó, trình xử lý phải chuyển mã của phím được nhấn từ bộ điều khiển bàn phím đến bộ xử lý và có thể phân tích mã này. Khi trình xử lý hoàn thành công việc của nó, quyền điều khiển sẽ được chuyển sang chương trình bị gián đoạn.

Thời gian phản ứng- đây là khoảng thời gian từ khi xuất hiện tín hiệu yêu cầu ngắt đến khi bắt đầu thực hiện chương trình ngắt (trình xử lý ngắt) nếu ngắt này được kích hoạt cho dịch vụ.

Thời gian phản hồi phụ thuộc vào thời điểm bộ xử lý xác định rằng yêu cầu ngắt đã xảy ra. Việc thăm dò các yêu cầu ngắt có thể được thực hiện sau khi hoàn thành giai đoạn tiếp theo của lệnh (ví dụ: đọc lệnh, đọc toán hạng đầu tiên, v.v.) hoặc sau khi hoàn thành từng lệnh trong chương trình.

Ngắt có thể được chia thành ba nhóm: phần cứng, logic và phần mềm.

Nguồn ngắt phần cứng – giảm điện áp nguồn, nhấn một phím trên bàn phím, xuất hiện xung tiếp theo từ bộ đếm thời gian, xuất hiện tín hiệu đặc biệt từ các thiết bị lưu trữ trên linh hoạt hoặc ổ cứng và vân vân.

Logic hoặc bộ xử lý bị gián đoạn xảy ra dưới những điều kiện khác nhau tình huống bất thường trong hoạt động của bộ vi xử lý chính - chia cho 0, tràn thanh ghi, xuất hiện “điểm dừng”, v.v.

Ngắt phần mềm– phạm trù rộng lớn nhất. Chúng được tạo ra khi một chương trình muốn nhận một dịch vụ nào đó từ một chương trình khác và dịch vụ này thường gắn liền với hoạt động của phần cứng.

Mỗi ngắt có một số duy nhất và có thể được liên kết với một chương trình con cụ thể được thiết kế để phục vụ tình huống phát sinh. Nói chung, bản thân chương trình con dịch vụ cũng có thể bị đình chỉ bởi một ngắt khác; nhưng thường xuyên hơn không, trong quá trình hoạt động của chương trình con phục vụ một ngắt nhất định, các ngắt khác bị “che giấu”, tức là chúng không được phục vụ ngay lập tức mà được xếp hàng đợi.

Trong các thành phần phần cứng của máy trong chính DOS và trong chương trình ứng dụng các ngắt có thể được tạo ra cần được phục vụ. BSVV được giao nhiệm vụ phục vụ các ngắt mức độ thấp hơn– những yêu cầu kiểm soát trực tiếp các thành phần phần cứng. Các ngắt này được đánh số từ 0 đến 31 (số hex 0 - 1F). Các ngắt khác - số 32 - 63 (số hex 20 - 3F) - thuộc cấp cao hơn và việc bảo trì chúng được giao cho các mô-đun hệ điều hành khác.

Trong bảng Hình 3 hiển thị danh sách chung các ngắt được BSVV phục vụ. TRONG chương trình thực tế Trong hợp ngữ và trong tài liệu kỹ thuật hệ điều hành, các ngắt được xác định bằng mã thập lục phân. Từ việc phân tích bảng 3 rõ ràng là các ngắt được BSVV phục vụ tương ứng với hoạt động cơ bảnđể điều khiển các thiết bị bên ngoài - màn hình, bàn phím, ổ đĩa nổi, máy in, kênh thông tin liên lạc. Trong trường hợp này, các chương trình con có trong BSVM thực hiện các hoạt động cấp thấp hơn. Ví dụ: bảo trì ổ đĩa mềm bao gồm khả năng cài đặt ban đầu các đầu từ, kiểm tra trạng thái hiện tại của thiết bị, đọc và ghi trực tiếp các phần đĩa được chỉ định, xác minh dữ liệu đã đọc hoặc ghi và cuối cùng là định dạng đĩa (bố cục ban đầu).

Bảng 3. Các ngắt được phục vụ bởi BSVV

Số thập phân Số thập lục phân
Chia cho số không
Chuyển đổi bộ vi xử lý thành chế độ từng bước
Giảm điện áp cung cấp
Xuất hiện điểm dừng trong chuỗi lệnh
Tràn thanh ghi đơn vị số học
In bản sao đồ họa của màn hình
Kín đáo
Kín đáo
Tín hiệu từ bộ đếm thời gian - bộ đếm thời gian
Tín hiệu khi nhấn một phím trên bàn phím
MỘT Kín đáo
Số thập phân Số thập lục phân Tình huống được phục vụ hoặc chức năng được thực hiện
TRONG Kín đáo
VỚI Kín đáo
D Kín đáo
E Tín hiệu kết thúc giao dịch với NMD
F Dành riêng cho dịch vụ máy in
Điều khiển hiển thị
Yêu cầu danh sách thiết bị được kết nối
Kích thước yêu cầu bộ nhớ vật lý
Quản lý NMD
Quản lý bộ điều hợp truyền thông
Điều khiển máy ghi âm và các thiết bị khác
Điều khiển bàn phím
Quản lý máy in
Truy cập BASIC tích hợp trong ROM
Khởi động lại hệ thống
1A Truy vấn/đặt ngày giờ hiện tại
1B
1C
1D Địa chỉ của bảng tham số khởi tạo hiển thị.
1E Địa chỉ của bảng thông số NGMD
1F Địa chỉ bảng ký hiệu có mã 128-255

Một số trong số đó được liệt kê trong bảng. 3 ngắt cung cấp quyền truy cập vào một số chức năng liên quan đến nhau. Mỗi hàm được xác định bằng số thập lục phân (mã) và thực hiện một số thao tác cụ thể.

Vì vậy, ví dụ, ngắt 19 (điều khiển NGMD và NMD) cung cấp quyền truy cập vào 18 chức năng với mã 0-17):

0 - cài đặt ban đầu (thiết lập lại đĩa),

1 - hiển thị trạng thái đĩa hiện tại,

2 - đọc một nhóm (khối) các cung từ một rãnh,

3 - ghi một nhóm các cung vào một rãnh,

4 - xác minh sau khi đọc hoặc viết,

5 - định dạng bản nhạc (ghi dấu khu vực),

8 - phát hành hiện tại thông số ổ đĩa,

9 - khởi tạo bảng tham số đĩa cố định,

A - đọc “dài”,

B - bản ghi "dài",

C - tìm kiếm bản nhạc mong muốn,

D - ban đầu cài đặt đĩa,

10 - kiểm tra tính sẵn sàng của đĩa,

11 - hiệu chỉnh đĩa,

14 - chẩn đoán bộ điều khiển,

15 - vấn đề loại ổ,

16 - thay đổi trạng thái đĩa,

17 - cài đặt loại ổ đĩa.

Độ sâu ngắt- số lượng chương trình tối đa có thể làm gián đoạn lẫn nhau. Độ sâu ngắt thường khớp với số mức ưu tiên được hệ thống ngắt nhận ra. Hoạt động của hệ thống ngắt ở các độ sâu ngắt khác nhau (n) được thể hiện trong Hình 2. 10. Ở đây giả định rằng khi số lượng yêu cầu ngắt tăng lên thì mức độ ưu tiên của nó cũng tăng lên.

Cơm. 14. Hoạt động của hệ thống ngắt ở các độ sâu ngắt khác nhau

Khi nhận được yêu cầu ngắt, máy tính sẽ thực thi trình tự sau hành động:

1) xác định yêu cầu ngắt được xác định có mức ưu tiên cao nhất (nếu nhận được nhiều yêu cầu đồng thời);

2) xác định loại yêu cầu đã chọn;

3)lưu trạng thái hiện tại của bộ đếm chương trình và thanh ghi cờ;

4) xác định địa chỉ của bộ xử lý ngắt theo loại ngắt và chuyển điều khiển sang lệnh đầu tiên của bộ xử lý này;

5) thực hiện chương trình - xử lý ngắt;

6)khôi phục các giá trị đã lưu của bộ đếm chương trình và thanh ghi cờ của chương trình bị gián đoạn;

7) tiếp tục thực hiện chương trình bị gián đoạn.

Các giai đoạn 1-4 được phần cứng máy tính thực hiện tự động khi có yêu cầu ngắt xuất hiện. Giai đoạn 6 cũng được thực thi trong phần cứng theo lệnh return từ trình xử lý ngắt.

Việc chuyển đổi sang bộ xử lý ngắt tương ứng được thực hiện (trong chế độ thực hoạt động của bộ vi xử lý) thông qua bảng vectơ ngắt. Bảng này nằm ở địa chỉ thấp nhất bộ nhớ truy cập tạm thời, có dung lượng 1 KB và chứa các giá trị của thanh ghi đoạn lệnh (CS) và con trỏ lệnh (IP) cho 256 bộ xử lý ngắt.

Vectơ ngắt– một ô nhớ chứa địa chỉ của bộ xử lý ngắt.

Các vectơ ngắt được kết hợp thành một bảng vectơ ngắt. Vị trí của bảng phụ thuộc vào loại và chế độ hoạt động của bộ vi xử lý.

Các chức năng chính của cơ chế ngắt:

1.Nhận biết hoặc phân loại gián đoạn.

2. Chuyển quyền điều khiển sang bộ xử lý ngắt.

3. Quay lại đúng chương trình bị gián đoạn

Việc chuyển đổi từ chương trình bị gián đoạn sang trình xử lý và quay lại phải được thực hiện càng nhanh càng tốt. Một trong phương pháp nhanh chóng là sử dụng một bảng chứa danh sách tất cả các ngắt được phép đối với máy tính và địa chỉ của các bộ xử lý tương ứng. Để quay lại chương trình bị gián đoạn một cách chính xác, trước khi chuyển điều khiển sang bộ xử lý, nội dung của các thanh ghi bộ xử lý được lưu trữ trong bộ nhớ truy cập trực tiếp hoặc trên ngăn xếp hệ thống.

Vì tín hiệu ngắt xảy ra vào những thời điểm ngẫu nhiên nên tại thời điểm ngắt có thể có một số tín hiệu ngắt chỉ có thể được xử lý tuần tự. Để xử lý các tín hiệu ngắt theo thứ tự hợp lý, chúng được gán mức độ ưu tiên. Các chương trình, bằng cách quản lý các thanh ghi mặt nạ đặc biệt, cho phép bạn triển khai các nguyên tắc dịch vụ khác nhau:

Các ngắt lồng nhau.

Đối với các ngắt lồng nhau, quy trình xử lý ngắt hiện tại có thể bị gián đoạn (bị trì hoãn) khi nhận được yêu cầu ngắt có mức ưu tiên cao hơn. Sau khi xử lý một ngắt với nhiều hơn cấp độ caoưu tiên, bộ xử lý quay lại thủ tục bị gián đoạn và tiếp tục xử lý ngắt này cho đến khi nó kết thúc hoặc cho đến khi xảy ra ngắt mới. Rõ ràng, một quy trình phục vụ ngắt có mức độ ưu tiên cao hơn có thể bị gián đoạn bởi một ngắt có mức độ ưu tiên cao hơn, v.v. Đồng thời, các ngắt có nhiều cấp thấp mức độ ưu tiên so với hiện tại thường bị cấm (bị che).

3. Ví dụ về ngắt

3.1. Ngắt khi tín hiệu thay đổi trên các cổng I/O (ví dụ trong PROTEUS)

3.2. Ngắt ngoài INT (ví dụ trong PROTEUS)

Tất cả các loại bộ vi điều khiển dsPIC đều có các ngắt giống nhau. Do đó, bạn có thể nghiên cứu các ngắt trong chương trình PROTEUS một cách an toàn. Đối với nghiên cứu, chúng tôi sẽ sử dụng bộ vi điều khiển có sẵn trong PROTEUS.

Vậy loại ngắt nào tồn tại trong bộ vi điều khiển dsPIC33FJ32GP204?

Và có rất nhiều sự gián đoạn trong bộ vi điều khiển. Và thật vô nghĩa khi liệt kê mọi thứ trong bài giảng này. Rốt cuộc, điều đầu tiên chúng ta chú ý khi chọn một bộ vi điều khiển là nó có những mô-đun nào và chỉ sau đó chúng ta mới xem nó có những điểm gián đoạn nào. Chúng tôi cũng sẽ nghiên cứu mọi thứ theo cùng một trình tự. Khi nghiên cứu bộ vi điều khiển, chúng ta sẽ phân tích các ngắt của các mô-đun khác nhau.

Nói chung, bạn cần biết rằng đối với vi điều khiển có một bảng các vectơ ngắt nằm trong bộ nhớ chương trình. Mỗi ngắt có một vectơ riêng, tức là địa chỉ bắt đầu của chương trình ngắt cụ thể (ISR). Ngoài ra còn có một bảng vectơ ngắt thay thế. Bằng cách sử dụng một bit ALTINV, bạn có thể chỉ định địa chỉ của chương trình ngắt sẽ được lấy từ bảng nào. Tức là có một giải pháp thay thế cho bảng chính. Nhưng bạn cần nhớ rằng bit ALTINV được sử dụng cho toàn bộ bảng cùng một lúc. Và nếu một bảng thay thế được cài đặt thì tuyệt đối tất cả các địa chỉ của chương trình con xử lý ngắt, chương trình chính sẽ được lấy từ bảng thay thế. Bảng thay thế rất hữu ích cho chế độ gỡ lỗi, vì nó cho phép bạn viết chương trình vào bộ điều khiển một lần và, chẳng hạn như sử dụng nút, chọn giữa hai thuật toán chương trình.

dsPIC đã mở rộng phạm vi ưu tiên ngắt. Nếu trong PIC18 chỉ có 2 cấp độ thì trong DSPIC đã có 8 cấp độ. Và khi tôi đang phát triển một mô-đun để liên lạc qua kênh GPRS, điều này rất hữu ích với tôi, vì bộ vi điều khiển sử dụng hầu hết tất cả các thiết bị ngoại vi có sẵn trên bo mạch và số lượng ngắt được xử lý là khoảng hai mươi.

Điều quan trọng nhất bạn cần biết là để làm việc với mỗi ngắt, chỉ có 3 bit chính (thanh ghi): bit cho phép ngắt, cờ ngắt và ba bit lựa chọn ưu tiên ngắt.

Vì vậy, một lập trình viên cần những gì để có thể làm việc với ngắt:

1. Nó cần kích hoạt một ngắt cụ thể.

2. Sau khi xảy ra sự kiện gây ra ngắt, cờ ngắt tương ứng sẽ được đặt và chương trình, có thể nói, sẽ di chuyển dọc theo vectơ ngắt. Và nếu chúng ta nói bằng ngôn ngữ thông thường: thì ngay khi xảy ra gián đoạn, chương trình con xử lý một ngắt cụ thể sẽ được gọi ngay lập tức.

3. Điều chính là không quên đặt lại cờ của chính sự gián đoạn này trong chương trình con ngắt.

Đối với bộ vi điều khiển dsPIC, trình biên dịch C30 cung cấp quy tắc sau để mô tả các quy trình xử lý ngắt, ví dụ như đối với ngắt INT1:

trống rỗng __ thuộc tính__((__ ngắt__)) _ INT1 Ngắt()

Điều chính bạn cần chú ý là phần cuối của văn bản tiêu đề chương trình con: _ INT1 Ngắt() - đây là tham số duy nhất phải thay đổi cho nhiều loại khác nhau ngắt quãng. Mỗi ngắt trong bảng vectơ ngắt có ký hiệu riêng thông số này. Và tại đây, bạn sẽ phải mở tệp trợ giúp cho trình biên dịch C30, đặc biệt là phần (tôi có phần này...) “Các vectơ ngắt dsPIC30F DSCs (SMPS)” và xem bảng trong đó ngắt nên được gọi theo cách nào . Tôi không nghĩ nên trình bày bảng này trong bài viết này, vì bất kỳ ai có trình biên dịch C30 đều phải có tệp trợ giúp đính kèm hlpMPLABC30.chm(cá nhân tôi gọi nó như vậy). Và đối với những người không có trình biên dịch này, họ không cần bảng J. Được rồi, hãy lạc đề ...

Nhân tiện, nếu bạn tìm hiểu sâu hơn về các nguyên tắc mô tả hàm ngắt, bạn sẽ thấy sự hiện diện của thuộc tính đặc biệt auto_psv. Tham số này nhằm mục đích hướng dẫn bộ vi điều khiển rằng nó nên lưu các thanh ghi chính trước khi tiến hành ngắt xử lý. Tôi cho rằng bạn biết lý do tại sao bạn cần lưu các sổ đăng ký chính.

Ví dụ: mô tả ngắt sẽ như thế này:

trống rỗng__attribute__((ngắt, auto_psv)) _INT1Interrupt()

Trên đây là ví dụ về tiêu đề lệnh gọi chương trình con sử dụng địa chỉ của bảng chính. Và đối với một bảng thay thế, bạn chỉ cần chèn tham số biến sau dấu gạch dưới thay thế, Ví dụ:

_ INT1 Ngắt() -> _ AltINT1 Ngắt()

Tôi muốn bạn chú ý đến một thực tế là mặc dù chương trình con ngắt trông giống như một chương trình con nhưng nó không cần phải khai báo, giống như chủ yếu , vì nó đã được trình biên dịch khai báo nên bạn chỉ cần viết chính xác tiêu đề của chương trình con xử lý ngắt.

Hãy bắt đầu bằng việc nghiên cứu các ngắt cơ bản, sau đó khi nghiên cứu từng mô-đun, chúng ta sẽ làm quen với các ngắt vốn có trong chúng.

3.1. Ngắt khi tín hiệu thay đổi trên các cổng I/O (CN)

Một trong những ngắt dễ hiểu nhất là ngắt thay đổi trạng thái ở đầu vào CN. Vi điều khiển dsPIC33FJ32GP204 có đầy đủ các đầu vào như vậy nên tôi nghĩ con số này sẽ đáp ứng được mọi nhu cầu. Bất kể trạng thái nào thay đổi trên các kênh này (1 -> 0 hoặc 0 -> 1), thay đổi này, nếu được bật, sẽ khiến cờ CNIF được đặt. Để kích hoạt ngắt khi tín hiệu thay đổi, bạn cần làm như sau:

1. Cấu hình các kênh cần thiết CN để nhập vào (sử dụng thanh ghi TRISx).

2. Cho phép kiểm soát sự thay đổi tín hiệu ở đầu vào CN tương ứng. Đối với điều này đã có 2 thanh ghi CNEN1 và CNEN2. Bạn có thể truy cập toàn bộ từng thanh ghi để định cấu hình hoặc truy cập các bit tương ứng (ví dụ: _CN15IE=1; _CN6IE=1;)

3. Nếu cần, hãy bật điện trở kéo lên. Với mục đích này cũng có hai thanh ghi CNPU1 và CNPU2. Cũng có thể thực hiện riêng lẻ, ví dụ _CN15PUE=1; _CN6PUE=1;

4. Cho phép ngắt khi tín hiệu thay đổi trên CN ( _ CNIE=1 )

5. Bây giờ, ngay khi tín hiệu trên các chân CN được giám sát thay đổi, cờ ngắt _CNIF sẽ được đặt. Và chương trình vào chức năng xử lý ngắt. Trình biên dịch C30 để ngắt khi tín hiệu thay đổi trên CN cung cấp mô tả chức năng sau:

trống rỗng __ thuộc tính __((__ ngắt __)) _ CNNgắt ()

Đây là nơi xử lý ngắt này (xem ví dụ)

6. Trong chương trình con xử lý ngắt, đừng quên đặt lại cờ ngắt.

Để làm quen với loại ngắt này, hãy xem xét ví dụ sau. Có một động cơ và 4 cảm biến. Khi mọi thứ đã ổn, động cơ sẽ quay ngược chiều kim đồng hồ. Nhưng ngay khi trạng thái cảm biến thay đổi ( chế độ khẩn cấp) – động cơ sẽ bắt đầu quay ngay lập tức mặt trái(theo chiều kim đồng hồ). Và sau một khoảng thời gian nhất định, bắt đầu quay ngược chiều kim đồng hồ.

Máy dò kim loại được thực hiện tương tự trên máy thu hoạch. Ví dụ, khi cỏ đã cắt được đưa vào máy, nó sẽ chế độ bình thường công việc. Nhưng ngay khi máy dò kim loại phát hiện một vật kim loại, nó lập tức đảo ngược và máy dường như phun ra vật kim loại này để không làm hỏng cơ chế. Và kim loại được phát hiện bằng một cảm biến đặc biệt, bao gồm một số kênh độc lập nhưng được kết hợp thành một thiết bị chung. Tất nhiên, trong ví dụ của chúng tôi, chúng tôi sẽ đơn giản hóa mọi thứ rất nhiều; thay vì cảm biến hiện diện bằng kim loại, chúng tôi sẽ sử dụng các nút thông thường.

Lắp ráp mạch trong PROTEUS

Bây giờ hãy tạo một chương trình để hoàn thành nhiệm vụ.

# bao gồm " P33 xxxxx. h"

_ FOSCSEL(0 x02);

_ FOSC(0 xE2);

ký tự tình trạng; // biến lưu chiều quay của động cơ

// "1" - chế độ khẩn cấp, "0" - chế độ bình thường

trống rỗng trong đó (trống rỗng);

trống rỗng trong đó (trống rỗng)

{ _ CN8 PUE=1; //bật điện trở kéo lên ở đầu vào CN8 (RC0)

_ CN10 PUE=1; //bật điện trở kéo lên ở đầu vào CN10 (RC2)

_ CN17 PUE=1; //bật điện trở kéo lên ở đầu vào CN17 (RC7)

_ CN19 PUE=1; //bật điện trở kéo lên ở đầu vào CN19 (RC9)

QUẢNG CÁO1 PCFGL=0 xffff;

PORTC=0; // khởi tạo cổng C

LATC=0;

TRISC=0 xFFFF; // thiết lập cổng C làm đầu vào

PORTC=0 xFFFF;

PORTA=0; // khởi tạo cổng A

LATA=0;

TRISA=0; // Đặt tất cả đầu ra thành đầu ra,

PORTA=0;

_ CN8 I E.=1; // cho phép kiểm soát các thay đổi tín hiệu đối với

_ CN10 I E.=1; // kết quả đầu ra tương ứng

_ CN17 I E.=1; // nếu tín hiệu thay đổi trên chúng thì

_ CN19 I E.=1; // cờ ngắt _CNIF được đặt

_ CNIE=1; // kích hoạt ngắt INT1

trống rỗng __ thuộc tính__((__ ngắt__)) _ CNNgắt()

tình trạng=1; // đây là chế độ khẩn cấp

_ CNIF=0; // đặt lại cờ ngắt khi tín hiệu thay đổi

trống rỗng chủ yếu (trống rỗng)

{ tĩnh dài int Tôi;

trong đó();

tình trạng=0; // giả sử chế độ hoạt động lúc khởi động là bình thường

trong khi(1) // bắt đầu một vòng lặp vô tận

{ nếu như (tình trạng) // nếu ở chế độ khẩn cấp thì

{ _ CNIE=0; // vô hiệu hóa ngắt khi tín hiệu thay đổi

_ R.A.8=0;

_ R.A.0=1; // ở chế độ khẩn cấp

(Tôi=0; Tôi<210000; Tôi++) // cung cấp độ trễ

tình trạng=0; // kích hoạt hoạt động bình thường của động cơ

_ CNIE=1; // kích hoạt các ngắt CN

{ _ R.A.8=1; // ở chế độ bình thường

_ R.A.0=0; // cung cấp hướng quay của động cơ

} // trong khi(1)

3.2. Ngắt bên ngoàiINT

Nếu bạn cần bộ vi điều khiển của mình phản hồi ngay lập tức với hành động của các thiết bị bên ngoài thì ngắt INT chính là thứ bạn cần. Bộ vi điều khiển dsPIC33FJ32GP204 có ba kênh INT (INT0, INT1, INT2). Nghĩa là, bạn có thể cung cấp ngắt của riêng mình cho từng thiết bị trong số ba thiết bị bên ngoài. Ngắt này là tốt vì nó có thể đánh thức bộ điều khiển từ chế độ SLEEP. Ngoài ra, bạn không cần phải quét liên tục các đầu vào này, việc này sẽ tiêu tốn tài nguyên của bộ vi điều khiển.

Ngắt INT xảy ra khi tín hiệu đầu vào thay đổi “0” -> “1” hoặc “1” -> “0”. Nó phụ thuộc vào trạng thái của bit _INT1EP. Nếu như _INT1EP=1 thì ở cạnh rơi xuống; Nếu như _INT1EP=0, sau đó dọc theo cạnh đầu (ví dụ _INT1EP=1 – Ngắt INT0 xảy ra ở cạnh xuống).

Về mức độ ưu tiên, ngắt INT0 có mức ưu tiên cao nhất và trong bảng ngắt thì đây là bảng đầu tiên. Dưới đây là các ngắt INT1 và INT2.

Về nguyên tắc, đây là tất cả các tính năng của ngắt này. Mọi thứ khác đều giống như đối với các ngắt khác, tức là bạn cần kích hoạt ngắt ngoài tương ứng. Và nếu xảy ra ngắt, nó sẽ đặt cờ _INTхIF tương ứng (ví dụ _INT1IF). Đừng quên thiết lập lại nó. Nói chung, mọi thứ đều đơn giản như việc bóc vỏ quả lê.

Hãy chuyển sang một ví dụ

Chúng tôi phát hành cuộc gọi điện tửđến một căn hộ hoặc một ngôi nhà. Khi bạn nhấn nút, thiết bị sẽ phát ra tín hiệu âm thanh và nháy đèn (dành cho ai thích nghe nhạc to).

Chúng tôi đang vẽ một mạch trong PROTEUS; ngoài bộ vi điều khiển, chúng tôi sẽ cần một nút, tiếng bíp và đèn LED.

Tôi nghĩ mọi thứ đều rất rõ ràng trong hình. Hãy chuyển sang chương trình.

#bao gồm"p33Fxxxx. h"

// Đặt các bit điều chỉnh bộ dao động (HS)

_ FOSCSEL(0 x02);

_ FOSC(0 xE2);

ký tựtình trạng;// "1" - bật chuông, "0" - tắt chuông

trống rỗnginit(void);//khai báo thủ tục khởi tạo

// ** khởi tạo chương trình con **

trống rỗnginit(void)

( _CN4PUE=1;//bật điện trở kéo lên ở đầu vào CN4 (RB0)

AD1PCFGL=0xffff;// tất cả các chân là I/O kỹ thuật số

CỔNG=0x00;// khởi tạo cổng B

LATB=0;

TRISB=0x0001;// đặt đầu ra RB0 thành đầu vào

CỔNG=0x00;

// khởi tạo cổng C.

CỔNG=0;

LATC=0;

TRISC=0;// đặt tất cả các chân làm đầu ra

CỔNG=0;

RPINR0=0x0000;// tín hiệu INT1 được cấu hình để loại bỏ khỏi chân RP0 (RB0) (điều này

// lệnh không dành cho tất cả dsPIC

_INT1EP=1;// Ngắt INT1 xảy ra ở cạnh xuống

_INT1IE=1;// kích hoạt ngắt INT1

// ******* chương trình con xử lý ngắt *

trống rỗng __ thuộc tính__((__ ngắt__)) _ INT1 Ngắt()

tình trạng=1; // cuộc gọi phải được kích hoạt

_ INT1 NẾU NHƯ=0; // đặt lại cờ ngắt INT1

// **** Điểm vào chương trình *

trống rỗng chủ yếu (trống rỗng)

{ tĩnh dài int Tôi; // khai báo một biến để tổ chức độ trễ

trong đó();// gọi chương trình con khởi tạo

trạng thái=0;// đầu tiên cuộc gọi phải được tắt

trong khi(1)// bắt đầu một vòng lặp vô tận

( nếu (trạng thái)// nếu trạng thái là "1" thì

( _RC0=1;// làm sáng đèn LED

_RC2=1;//bật tiếng bíp

vì(i=0;i<160000;i++) // độ trễ, đảm bảo thời gian chơi nhất định

trạng thái=0;// cho biết nên tắt tiếng bíp

khác// ngược lại, nếu trạng thái là "0" thì

( _RC0=0;//tắt đèn LED

_RC2=0;// ngừng tiếng bíp

} // trong khi(1)

Thực hiện tương tự với các ngắt INT0 và INT2. Trong các ví dụ tiếp theo, chúng tôi sẽ sử dụng các ngắt này nhiều lần.

Cơ chế ưu tiên (MP) hiển thị thiết bị nào cần được bảo trì trước. MP giải quyết các vấn đề sau:

    Sửa mức độ ưu tiên của bất kỳ chương trình nào được bộ xử lý thực thi.

    Xác định yêu cầu từ máy chủ có mức độ ưu tiên tối đa.

    Cho phép chương trình bị gián đoạn khi xảy ra yêu cầu có mức độ ưu tiên cao.

Một ngắt thường lệ dịch vụ ngắt được gọi là ngắt lồng nhau.

Cơm. 6.4 Ví dụ về hoạt động của CPU ở chế độ ngắt lồng nhau.

Hình 6.4 cho thấy một ví dụ về ngắt lồng nhau:

    Trước t 1 không có lương

    t 1 → Lương từ VU4

    t 2 → Lương từ VU3

    t 3 → Lương từ VU2

    t 4 → việc bảo trì VU2 đã hoàn tất

    t 5 → Lương từ VU1

    t 6 → việc bảo trì VU1 đã hoàn tất

    t 7 → việc bảo trì VU3 đã hoàn tất

    t 8 → việc bảo trì VU4 đã hoàn tất

Nhược điểm: Với tần suất nhận PO cao, CPU hoạt động kém hiệu quả, do Rất nhiều thời gian CPU được dành cho việc xử lý, khôi phục các thanh ghi bộ xử lý và di chuyển từ chương trình này sang chương trình khác.

Bạn có thể giảm tần suất lưu trữ bằng cách cho phép lưu trữ bộ đệm.

Khi chỉ định mức độ ưu tiên của VA, các điều kiện sau sẽ được tính đến:

    Thiết bị càng nhanh thì mức độ ưu tiên càng cao.

    Mức ưu tiên cao nhất được gán cho thiết bị mà dữ liệu không thể khôi phục được (thường là bộ hẹn giờ).

    Trong dòng máy tính Macintosh Mức độ ưu tiên của chương trình được chỉ định trong từ thứ hai của VI.

    Trong dòng máy tính IBMmáy tính Mức độ ưu tiên của chương trình được đặt bằng LSI đặc biệt (mạch tích hợp quy mô lớn) - bộ điều khiển ngắt có thể lập trình.

Triển khai kỹ thuật các ngắt vectơ ưu tiên lồng nhau đa cấp trong máy tính dựa trên một kênh trao đổi dữ liệu chính duy nhất.

Triển khai VP đa cấp trong máy tính gia đìnhIBM .

Để triển khai VP đa cấp trong máy tính gia đình IBM BIS được áp dụng Intel 8259MỘT.

Đặc tính kỹ thuật của encore Intel 8259a.

    Số bậc lương = 8.

    Số cấp độ có thể được mở rộng lên 64 bằng cách xếp tầng chip

    Chế độ dịch vụ PO, mức độ ưu tiên và WUA được đặt theo chương trình.

    Triển khai kỹ thuật ngắt vectơ ưu tiên trong máy tính có kênh trao đổi dữ liệu chính bị cô lập (họ IBMTẠI): các chế độ hoạt động của bộ điều khiển ngắt khả trình (PIC),

sơ đồ kết nối bảng điều khiển với hệ thống đường cao tốc,

Sơ đồ kết nối bảng điều khiển với bus hệ thống của máy tính.

Cơm. 6.7 Sơ đồ kết nối bảng điều khiển với bus hệ thống và thiết bị điều khiển.

Mục đích của chân LSI:

    D7- D0 – Chân SD dùng để nhận thông tin điều khiển từ CPU và truyền thông tin trạng thái đến CPU.

    MỘT0 – đầu vào địa chỉ, ghi địa chỉ các thanh ghi bên trong của bộ điều khiển (2 địa chỉ).

    ~ CS (Chip lựa chọn) - lựa chọn tinh thể, cho phép hoặc vô hiệu hóa giao tiếp giữa bộ điều khiển và bus hệ thống.

    • ~CS= 0 – có kết nối, ~ CS= 1 – không có kết nối.

Bảng điều khiển đầu tiên sử dụng địa chỉ – 20 h, 21 h.

Bảng điều khiển thứ hai sử dụng địa chỉ – MỘT0 h, MỘT1 h.

    ~ RD, ~ WR– đầu vào, đầu ra (tín hiệu SHU), được kết nối với các đường dây chính ~ IORvà ~IOW.

    INT(đầu ra) – Tín hiệu ZP tới CPU.

    ~INTA (xác nhận ngắt)– Tín hiệu RP từ CPU.

    CAS2, CAS1, CAS0 – xe buýt xếp tầng. Đối với bộ điều khiển ngắt chính, các dòng này là đầu ra và đối với bộ điều khiển phụ, chúng là đầu vào.

    ~ SP/~ VN– biểu thị bảng điều khiển chính (1) hoặc phụ (0).

    IR0... IR7 – đầu vào của các yêu cầu ngắt từ máy chủ.

thành phần chức năng và mô hình phần mềm của bảng điều khiển.

Đặc điểm quan trọng nhất của hệ thống ngắt là độ sâu và mức độ ưu tiên của ngắt. Có một hệ thống ngắt đơn cấp và đa cấp trong máy tính. Trong các hệ thống đơn cấp, quá trình xử lý ngắt không phản ứng với tín hiệu từ các ngắt đến khác. Các yêu cầu ngắt trong các hệ thống như vậy chỉ được đáp ứng sau khi hoàn tất quá trình xử lý ngắt gặp phải trước đó. Các PC hiện đại sử dụng hệ thống đa cấp cho phép gián đoạn ở các độ sâu khác nhau. Độ sâu ngắt là số lượng chương trình ISR tối đa có thể ngắt lẫn nhau. Trong trường hợp này, nếu độ sâu ngắt là n thì n chương trình con có thể bị gián đoạn. Mức độ gián đoạn có thể xảy ra phụ thuộc vào loại nhiệm vụ đang được giải quyết và được xác định bởi việc tổ chức hàng đợi xử lý ngắt. Các yêu cầu ngắt nhận đồng thời tới thanh ghi ngắt MP được xử lý theo nguyên tắc ưu tiên. Các ngắt có mức ưu tiên cao nhất sẽ được phục vụ trước. Khi nhận được yêu cầu ngắt, bộ kích hoạt tương ứng trong thanh ghi ngắt được đặt thành 1. Trước khi hoàn thành việc thực hiện lệnh tiếp theo, MP sẽ thăm dò thanh ghi ngắt. Thứ tự thực hiện các yêu cầu ngắt được thiết lập theo thứ tự ưu tiên được gán trước đó cho từng loại ngắt. Chỉ định mức độ ưu tiên là một nhiệm vụ phức tạp đòi hỏi phải tính đến tầm quan trọng và tính cấp bách của việc phục vụ một số ngắt nhất định. Thông thường, quản lý nguồn điện và ngắt lỗi máy có mức độ ưu tiên cao nhất.

Việc ngắt các thủ tục ISR được gọi là lồng ngắt. Để tổ chức các ngắt lồng nhau trong mỗi quy trình dịch vụ ngắt, bạn phải thực hiện:

1. kích hoạt ngắt bằng lệnh EI

2. tạm thời ghi nhớ mức độ ưu tiên của chương trình bị gián đoạn

3. tải mức ưu tiên hiện tại mới vào mạch ngắt ưu tiên

4. phục vụ ngắt này

5. khôi phục mức độ ưu tiên trước đó

6. khôi phục chương trình bị gián đoạn (bằng lệnh IRET)

Ngắt phần cứng:

Nội bộ (từ bộ xử lý và bộ đồng xử lý)

Bên ngoài:

Có thể đeo mặt nạ

Lộ mặt

Ngắt được gọi là phần mềm

Các ngắt bên trong cũng bao gồm các ngắt được gọi là phần mềm. Các ngắt MP bên trong được tạo ra khi phát sinh các điều kiện đặc biệt trong quá trình thực hiện lệnh hiện tại (ví dụ: chia cho 0, tràn lưới bit, v.v.).

Các ngắt được gọi là phần mềm được thực thi dưới tác động của lệnh INT và trong trường hợp này, các hành động của MP tương tự như gọi chương trình ISR, tức là. lưu địa chỉ trả về vào ngăn xếp, chuyển điều khiển đến địa chỉ đã chỉ định, nhưng có một số khác biệt:

A) ngắt được thực thi, được đẩy vào ngăn xếp và bit IF (cho phép ngắt) trong thanh ghi cờ được đặt lại về 0.

B) thay vì địa chỉ của chương trình con được gọi, đối số cuộc gọi là số của vectơ ngắt.

B) sau khi hoàn thành thủ tục ngắt được gọi là phần mềm, bộ xử lý sẽ loại bỏ khỏi ngăn xếp, ngoài địa chỉ trả về, giá trị được lưu trữ của thanh ghi cờ. Các ngắt được gọi là phần mềm cho phép bạn gọi các thủ tục một cách dễ dàng và nhanh chóng từ bất kỳ phân đoạn bộ nhớ nào mà không cần sử dụng các cuộc gọi đường dài. Ví dụ: ngắt phần mềm INT3 thường được sử dụng cho mục đích gỡ lỗi chương trình để tạo điểm dừng và được gọi bằng lệnh một byte.

Tên tham số Nghĩa
Chủ đề bài viết: Ngắt.
Phiếu tự đánh giá (danh mục chuyên đề) Lập trình

Bộ đếm thời gian của cơ quan giám sát.

Thông thường, nhiễu điện do thiết bị xung quanh tạo ra khiến bộ vi điều khiển xác định sai địa chỉ, sau đó hoạt động của nó trở nên khó đoán (bộ vi điều khiển “phát điên”). Để theo dõi những tình huống như vậy, bộ định thời theo dõi thường được tích hợp trong bộ vi điều khiển.

Thiết bị này khiến bộ vi điều khiển đặt lại nếu nội dung của nó không được cập nhật trong một khoảng thời gian nhất định (thường là hàng chục mili giây đến vài giây). Nếu thay đổi trong nội dung của bộ đếm chương trình không tương ứng với chương trình đã chỉ định thì lệnh sửa đổi bộ đếm thời gian của cơ quan giám sát sẽ không được thực thi. Trong trường hợp này, bộ đếm thời gian theo dõi sẽ đặt lại bộ vi điều khiển, đặt nó về trạng thái ban đầu.

Nhiều nhà phát triển không sử dụng bộ định thời theo dõi trong các ứng dụng của họ vì họ không thấy tầm quan trọng của việc sử dụng chúng để chống lại tác động của nhiễu điện, chẳng hạn như khi đặt bộ vi điều khiển trong màn hình tia âm cực gần hoặc gần máy biến áp đánh lửa flyback. cuộn dây trong ô tô. Trong các thiết bị điện tử hiện đại, khả năng xảy ra nhiễu điện là không đáng kể, mặc dù đôi khi chúng xảy ra trong những tình huống tương tự như những tình huống được liệt kê ở trên.

Không nên sử dụng bộ đếm thời gian theo dõi để che giấu các sự cố phần mềm. Mặc dù bộ hẹn giờ này có thể làm giảm khả năng xảy ra lỗi phần mềm nhưng nó không thể loại bỏ tất cả các nguyên nhân có thể xảy ra. Thay vì dựa vào phần cứng để ngăn chặn lỗi phần mềm, tốt hơn hết bạn nên kiểm tra phần mềm kỹ lưỡng hơn trong các tình huống khác nhau.

Nhiều người dùng tin rằng các ngắt là một phần cứng tốt nhất nên để yên vì việc sử dụng chúng đòi hỏi kiến ​​thức sâu rộng về bộ xử lý để thiết kế quy trình ngắt. Ngược lại, khi xảy ra gián đoạn, hệ thống sẽ “ngủ quên” hoặc “phát điên”. Cảm giác này thường xuất hiện với nhà phát triển sau khi trải nghiệm với các ngắt trên máy tính cá nhân, máy tính này có một số tính năng khiến việc tạo trình xử lý ngắt trở nên phức tạp. Nhiều vấn đề trong số này không xảy ra trong phần cứng dựa trên vi điều khiển. Việc sử dụng các ngắt trong thiết bị này có thể đơn giản hóa đáng kể việc phát triển và sử dụng nó.

Nếu bạn chưa bao giờ đối mặt với sự gián đoạn, thì bạn sẽ có một câu hỏi - nó là gì? Trong hệ thống máy tính, ngắt là việc thực thi một quy trình đặc biệt (được gọi là trình xử lý ngắt hoặc quy trình dịch vụ ngắt) được gọi bằng tín hiệu phần cứng. Trong quá trình thực hiện chương trình con này, việc thực hiện chương trình hiện tại sẽ dừng lại. Thuật ngữ “yêu cầu ngắt” được sử dụng vì đôi khi một chương trình từ chối thừa nhận một ngắt và thực thi trình xử lý ngắt ngay lập tức (Hình 2.19).

Sự gián đoạn trong hệ thống máy tính cũng tương tự như sự gián đoạn trong cuộc sống hàng ngày. Một ví dụ kinh điển về sự gián đoạn như vậy là một cuộc gọi điện thoại khi đang xem một chương trình truyền hình. Khi điện thoại đổ chuông, bạn có ba lựa chọn. Đầu tiên là bỏ qua cuộc gọi. Thứ hai là trả lời cuộc gọi nhưng hãy nói rằng bạn sẽ gọi lại sau. Thứ ba là đáp lại lời kêu gọi, gác lại mọi chuyện thời sự. Hệ thống máy tính cũng có ba phản hồi tương tự có thể được sử dụng để đáp ứng yêu cầu phần cứng bên ngoài.

Phản hồi đầu tiên có thể xảy ra - “không phản hồi ngắt cho đến khi tác vụ hiện tại hoàn thành” - được thực hiện bằng cách vô hiệu hóa (che giấu) việc phục vụ yêu cầu ngắt. Sau khi hoàn thành nhiệm vụ, có thể thực hiện một trong hai tùy chọn: đặt lại mặt nạ và cho phép bảo trì, điều này sẽ dẫn đến việc gọi trình xử lý ngắt hoặc phân tích giá trị của các bit ("bỏ phiếu"). cho biết việc nhận các yêu cầu ngắt và thực hiện trực tiếp chương trình dịch vụ mà không cần gọi bộ xử lý ngắt. Phương pháp xử lý ngắt này được sử dụng khi cần đảm bảo thời gian thực hiện đã chỉ định của chương trình chính, vì bất kỳ sự gián đoạn nào cũng có thể làm gián đoạn việc thực hiện giao diện quan trọng.

Cơm. 2.18 - Thực hiện ngắt.

Không nên che dấu các ngắt trong thời gian dài, vì trong thời gian này, một số sự kiện ngắt có thể chồng lên nhau và chỉ một sự kiện ngắt được nhận dạng. Khoảng thời gian che chắn cho phép phụ thuộc vào ứng dụng cụ thể của bộ vi điều khiển, loại và tần suất của các sự kiện đó. Không nên vô hiệu hóa các ngắt trong hơn một nửa thời gian dự kiến ​​​​tối thiểu của các sự kiện yêu cầu ngắt.

Trình xử lý ngắt luôn cung cấp chuỗi hành động sau:

2. Đặt lại bộ điều khiển ngắt và thiết bị gây ra yêu cầu.

3. Xử lý dữ liệu.

4. Khôi phục nội dung của các thanh ghi ngữ cảnh.

5. Quay lại chương trình bị gián đoạn.

Các thanh ghi bối cảnh là các thanh ghi xác định trạng thái thực thi hiện tại của chương trình chính. Thông thường chúng bao gồm bộ đếm chương trình, thanh ghi trạng thái và bộ tích lũy. Các thanh ghi bộ xử lý khác, chẳng hạn như các thanh ghi chỉ mục, được sử dụng trong quá trình xử lý ngắt, do đó nội dung của chúng cũng rất quan trọng để bảo tồn. Tất cả các thanh ghi khác đều dành riêng cho một bộ vi điều khiển cụ thể và ứng dụng của nó.

Sau khi thiết lập lại, bộ điều khiển ngắt sẵn sàng chấp nhận yêu cầu tiếp theo và thiết bị gây ngắt sẵn sàng gửi yêu cầu khi có lý do thích hợp. Nếu một yêu cầu ngắt mới xuất hiện, thanh ghi che dấu ngắt của bộ xử lý sẽ ngăn việc xử lý ngắt, nhưng thanh ghi trạng thái ngắt sẽ nắm bắt yêu cầu và yêu cầu này sẽ chờ dịch vụ. Sau khi quá trình xử lý ngắt hiện tại hoàn tất, mặt nạ ngắt sẽ được đặt lại và yêu cầu mới nhận được sẽ được xử lý.

Các ngắt lồng nhau rất khó thực hiện trên một số loại bộ vi điều khiển không có ngăn xếp. Những ngắt này cũng có thể gây ra vấn đề tràn ngăn xếp. Vấn đề tràn có liên quan đến bộ vi điều khiển do dung lượng bộ nhớ dữ liệu và ngăn xếp của chúng bị hạn chế: một chuỗi các ngắt lồng nhau có thể dẫn đến nhiều dữ liệu được đẩy lên ngăn xếp hơn mức cho phép.

Cuối cùng, ngắt được xử lý. Ví dụ TV thứ hai cho thấy bạn có thể nhanh chóng phản hồi yêu cầu ngắt bằng cách chấp nhận dữ liệu cần thiết, dữ liệu này sau đó sẽ được sử dụng sau khi giải quyết tác vụ hiện tại. Trong bộ vi điều khiển, điều này được thực hiện bằng cách lưu trữ dữ liệu đến trong một mảng bộ nhớ và sau đó xử lý dữ liệu đó khi quá trình thực hiện chương trình gốc hoàn tất. Phương pháp bảo trì này là sự kết hợp tốt giữa việc xử lý ngay lập tức ngắt hoàn toàn, việc này có thể mất nhiều thời gian và việc bỏ qua ngắt, điều này có thể dẫn đến mất thông tin về sự kiện gây ra gián đoạn.

Việc khôi phục các thanh ghi ngữ cảnh và thực hiện lệnh trả về ngắt sẽ đưa bộ xử lý về trạng thái trước khi xảy ra ngắt.

Chúng ta hãy xem điều gì xảy ra với nội dung của các thanh ghi khác nhau khi một ngắt được xử lý. Nội dung của thanh ghi trạng thái thường được lưu tự động cùng với nội dung của bộ đếm chương trình trước khi ngắt được xử lý. Điều này giúp loại bỏ nhu cầu quan trọng là lưu trữ nó trong bộ nhớ theo chương trình bằng cách sử dụng các lệnh truyền, sau đó khôi phục nó khi quay lại chương trình gốc. Tuy nhiên, việc lưu tự động như vậy không được thực hiện ở tất cả các loại vi điều khiển; do đó, cần đặc biệt chú ý đến việc tổ chức xử lý ngắt.

Nếu nội dung của thanh ghi trạng thái được lưu trước khi trình xử lý ngắt bắt đầu thực thi thì lệnh return sẽ tự động khôi phục nó.

Nếu nội dung của các thanh ghi bộ xử lý khác thay đổi trong quá trình dịch vụ ngắt, chúng cũng phải được lưu trong bộ nhớ trước khi thay đổi và được khôi phục trước khi quay lại chương trình chính. Thực tế phổ biến là lưu tất cả các thanh ghi bộ xử lý để tránh các lỗi không thể đoán trước và rất khó bản địa hóa.

Địa chỉ được tải vào bộ đếm chương trình khi chuyển sang bộ xử lý ngắt thường được gọi là “vectơ ngắt”. Có một số loại vectơ. Địa chỉ được tải vào bộ đếm chương trình khi bộ vi điều khiển được khởi động (đặt lại) thường được gọi là “vectơ đặt lại”. Các ngắt khác nhau có các vectơ khác nhau, điều này làm giảm nhu cầu quan trọng của chương trình bảo trì là xác định nguyên nhân gây ra ngắt. Việc sử dụng một vectơ cho các ngắt khác nhau thường không gây ra vấn đề gì khi vận hành bộ vi điều khiển, vì hầu hết bộ vi điều khiển thường thực hiện một chương trình duy nhất. Điều này phân biệt bộ vi điều khiển với máy tính cá nhân, trong quá trình hoạt động có thể thêm nhiều nguồn ngắt khác nhau. (Nếu bạn đã từng kết nối hai thiết bị với cổng COM1 và COM3 thì bạn sẽ biết chúng ta đang nói đến điều gì). Trong một bộ vi điều khiển có phần cứng đã được biết rõ, sẽ không có bất kỳ vấn đề nào khi chia sẻ các vectơ ngắt.

Điều cuối cùng còn lại cần xem xét là phần mềm bị gián đoạn. Có những hướng dẫn của bộ xử lý có thể được sử dụng để mô phỏng các ngắt phần cứng. Công dụng rõ ràng nhất của các hướng dẫn này là gọi các thủ tục hệ thống được đặt ở một vị trí bộ nhớ tùy ý hoặc yêu cầu các bước nhảy xen kẽ để truy cập chúng. Tính năng này được triển khai trong dòng bộ vi xử lý Intel i86 và được sử dụng trong BIOS (Hệ thống đầu vào/đầu ra cơ bản) và hệ điều hành DOS của máy tính cá nhân để gọi các quy trình hệ thống mà không cần thiết phải sửa điểm vào. Thay vào đó, các vectơ ngắt khác nhau được sử dụng để chọn lệnh sẽ được thực thi khi xảy ra ngắt phần mềm như vậy.

Có lẽ sau khi đọc chương này, cơ chế ngắt sẽ trở nên rõ ràng hơn với bạn hoặc ngược lại. Bạn sẽ chỉ bối rối hơn mà thôi. Khi mỗi bộ vi điều khiển được mô tả, nó sẽ cho thấy việc sử dụng các ngắt có thể đơn giản hóa việc sử dụng nó như thế nào.

Ngắt. - Khái niệm và các loại Phân loại và đặc điểm của danh mục "Gián đoạn". 2017, 2018.