- BRR TBCK RBCK SPD SRC
2. Tổ chức ngắt của
2.2 Ưu tiên ngắt.
Khi có nhiều nguồn ngắt tác động cùng lúc thì ngắt nào quan trọng cần thực hiện trước và ngắt nào khơng quan trọng thì thực hiện sau giống như các công việc mà ta giải quyết hằng ngày.Ngắt cũng được thiết kế có sự sắp xếp thứ tự ưu tiên từ thấp đến cao để người lập trình sắp xếp các nguồn ngắt theo yêu cầu công việc mà mình xử lý.
Mỗi một nguyên nhân ngắt được lập trình riêng rẻ để có một trong hai mức ưu tiên thông qua chức năng thanh ghi đặc biệt được định địa chỉ bit, thanh ghi ưu tiên ngắt IP ( interrupt priority ), thanh ghi này có địa chỉ byte là 0B8H.
Thanh ghi có chức năng thiết lập chế độ ưu tiên trong vi điều khiển là thanh ghi IP (Interrupt Priority) tại địa chỉ 0B8H. Tổ chức của thanh ghi như sau:
- - PT2 PS PT1 PX1 PT0 PX0
Hoạt động của từng bit trong thanh ghi IP được tóm tắt trong bảng sau: Thanh
ghi IPBit
Ký hiệu
Địa chỉ bit Mô tả (1: mức cao, 0: mức thấp)
IP.7 - - Không sử dụng
IP.6 - - Không sử dụng
IP.5 PT2 0BDH Ưu tiên ngắt do bộ định thời 2 IP.4 PS 0BCH Ưu tiên ngắt do port nối tiếp IP.3 PT1 0BBH Ưu tiên ngắt do bộ định thời 1 IP.2 PX1 0BAH Ưu tiên ngắt ngoài 1
IP.1 PT0 0B9H Ưu tiên ngắt do bộ định thời 0 IP.0 PX0 0B8H Ưu tiên ngắt ngoài 0
Khi hệ thống được thiết lập lại trạng thái ban đầu, thanh ghi IP bị xóa và sẽ mặc định tất cả các ngắt ở mức ưu tiên thấp.
Trong 89C51 có 2 mức ưu tiên thấp và 2 mức ưu tiên cao. Nếu vi điều khiển đang thực hiện chương trình con phục vụ ngắt có mức ưu tiên thấp và có một yêu cầu ngắt với mức ưu tiên cao hơn xuất hiện thì vi điều khiển phải ngừng thực hiện chương trình con phục vụ ngắt có mức ưu tiên thấp để thực hiện chương trình con phục vụ ngắt mới có ưu tiên cao hơn.
Ngược lại nếu vi điều khiển đang thực hiện chương trình con phục vụ ngắt có mức ưu tiên cao hơn và có yêu cầu ngắt với mức ưu tiên thấp hơn xuất hiện thì vi điều khiển vẫn tiếp tục thực hiện cho đến khi thực hiện xong chương trình phục vụ ngắt có ưu tiên cao hơn rồi mới thực hiện chương trình phục vụ ngắt có ưu tiên thấp đang u cầu.
Chương trình chính mà vi điều khiển ln thực hiện trong một hệ thống thì ở mức thấp nhất, khơng có liên kết với u cầu ngắt nào, luôn luôn bị ngắt bất chấp ngắt
ở mức ưu tiên cao hay thấp. Nếu có 2 yêu cầu ngắt với các ưu tiên khác nhau xuất hiện đồng thời thì u cầu ngắt có mức ưu tiên cao hơn sẽ được phục vụ trước.
2.3. Chuỗi.
Nếu có hai ngắt có cùng mức ưu tiên xuất hiện đồng thời, chuỗi vòng cố định sẽ xác định ngắt nào được phục vụ trước. Chuỗi vịng này sẽ là: ngắt ngồi 0, ngắt do bộ định thời 0, ngắt ngoài 1, ngắt do bộ định thời 1, ngắt do port nối tiếp, ngắt do bộ định thời 2.
Các bit cờ của các nguồn ngắt được tóm tắt ở bảng sau:
Interrupt Flag SFR Register and Bit Position
External 0 IE0 TCON 1
External 1 IE1 TCON 3
Timer 1 TF1 TCON 7
Timer 0 TF0 TCON 5
Serial Port TI SCON 1
Serial Port RI CSON 0
Timer 2 TF2 T2CON 7(8052)
Timer 2 EXF2 T2CON 6(8052)
Hình 6.3 ta thấy tác dụng của các thanh ghi IE hoạt động như một contact On/Off còn thanh ghi IP hoạt động như một contact chuyển mạch giữa 2 vị trí để lựa chọn 1 trong 2.
Ta hãy bắt đầu từ thanh ghi IE trước: bit cho phép ngắt tồn cục (Global Enable) nếu được phép sẽ đóng tồn bộ các contact và tùy thuộc vào bit cho phép của từng nguồn ngắt có được phép hay khơng và chúng hoạt động cũng giống như một contact: nếu được phép thì đóng mạch và tín hiệu u cầu ngắt sẽ đưa vào bên trong để xử lý, nếu không được phép thì contact hở mạch nên tín hiệu u cầu ngắt sẽ không đưa vào bên trong và không được xử lý.
Tiếp theo là thanh ghi IP: tín hiệu sau khi ra khỏi thanh ghi IE thì đưa đến thanh ghi IP để sắp xếp ưu tiên cho các nguồn ngắt. Có 2 mức độ ưu tiên: mức ưu tiên cao và mức ưu tiên thấp. Nếu các nguồn nào có ưu tiên cao thì contact chuyển mạch sẽ đưa tín hiệu u cầu ngắt đó đến vùng kiểm tra có ưu tiên cao, nếu các nguồn nào có ưu tiên thấp thì contact chuyển mạch sẽ đưa tín hiệu u cầu ngắt đó đến vùng kiểm tra có ưu tiên thấp.
Vùng kiểm tra ngắt ưu tiên cao sẽ được thực hiện trước và sẽ kiểm tra theo thứ tự từ trên xuống và khi gặp yêu cầu ngắt nào thì u cầu ngắt đó sẽ được thực hiện. Sau đó tiếp tục thực hiện cho vùng kiểm tra ưu tiên ngắt có mức ưu tiên thấp hơn.
Trong hình cịn cho chúng ta thấy yêu cầu ngắt truyền dữ liệu nối tiếp tạo ra từ tổ hợp OR của 2 cờ báo nhận RI và cờ báo phát TI. Khi ngắt truyền dữ liệu xảy ra và ta muốn biết là do cờ nhận hay cờ phát tạo ra ngắt để thực hiện 2 cơng việc khác nhau thì ta phải kiểm tra cờ RI và TI để biết thực hiện công việc nào tương ứng.
Ví dụ trong truyền dữ liệu: khi có báo ngắt truyền dữ liệu thì ta phải kiểm tra xem cờ RI = 1 hay khơng? Nếu đúng thì hệ thống khác đang gởi dữ liệu đến và ta phải chuyển hướng chương trình phục vụ ngắt sang hướng nhận dữ liệu, nếu khơng phải thì chắc chắn là cờ TI=1 báo cho chúng ta biết rằng dữ liệu đã truyền đi xong và sẵn sàng truyền kí tự tiếp theo và khi đó ta phải chuyển hướng chương trình phục vụ ngắt sang phát dữ liệu tiếp theo.
Tương tự, các yêu cầu ngắt của Timer2 tạo ra từ tổ hợp OR của cờ tràn TF2 và cờ nhập ngoài EXF2.