|
Tài trợ cho PIC Vietnam |
Câu hỏi dsPIC thường gặp Những vấn đề liên quan tới dsPIC30 và dsPIC33 và PIC24 |
|
Ðiều Chỉnh | Xếp Bài |
17-12-2007, 11:55 PM | #2 |
Trưởng lão PIC bang
|
CPU của dsPIC có thể hoạt động ở 1 trong 16 mức ưu tiên ngắt, các mức 8 - 15 chỉ dành cho các bẫy (trap), là các sự kiện ngoại lệ, còn các ngắt ngoại vi và ngắt ngoài chỉ có thể mang mức 0 - 7. CPU chỉ bị ngắt khi nó có mức ưu tiên thấp hơn mức ưu tiên của nguồn ngắt.
Các mức ưu tiên của các ngắt ngoại vi hay ngắt ngoài được thiết lập trong thanh ghi IPCx tương ứng, còn mức ưu tiên của CPU được thiết lập bởi bit IPL<3> trong thanh ghi CORCON, và các bit IPL<2:0> trong thanh ghi SR. Bit IPL<3> ở mức '1' khi xảy ra bẫy (trap) và chỉ có thể bị xóa về '0' bởi người dùng, chứ không thể được đặt lên '1' bởi người dùng. Khi dsPIC bị reset thì CPU của nó sẽ có mức ưu tiên là 0, và các ngắt ngoại vi hay ngắt ngoài sẽ có mức ưu tiên là 4. Người dùng thường chỉ cần thay đổi giá trị mức ưu tiên của các nguồn ngắt khi nhất thiết cần có sự ưu tiên giữa các ngắt này. Mức 0 của một nguồn ngắt về mặt ý nghĩa sẽ cấm ngắt đó, còn mức ưu tiên của CPU là 7 cũng sẽ cấm toàn bộ các ngắt ngoại vi và ngắt ngoài. Lấy ví dụ trường hợp của bạn, có ngắt Timer 1 ưu tiên hơn ngắt Timer 2, và ngắt Timer 2 ưu tiên hơn ngắt CN1 (thực ra chỉ có 1 ngắt CN cho tất cả các chân CNx), bạn có thể đặt mức ưu tiên của Timer 1 là 4, của Timer 2 là 3, và của CN1 là 2, CPU vẫn giữ mức ưu tiên là 0 như vừa được reset. Khi đó, bạn sẽ có thứ tự ưu tiên như mong muốn. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|