Bài giảng môn Điện - Điện tử - Bài 03: Ngắt (interrupt)

Tài liệu Bài giảng môn Điện - Điện tử - Bài 03: Ngắt (interrupt): [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 1 BÀI 03 NGẮT (Interrupt) MỤC ĐÍCH - Nắm bắt các khái niệm cơ bản về ngắt và cách sử dụng ngắt trong vi điều khiển PIC24FJ128GA010 - Làm quen với cấu trúc phần cứng của module điều khiển ngắt trong vi điều khiển PIC24FJ128GA010 - Làm quen với việc lập trình Interrupt trên PIC24 FJ128GA010 và mô phỏng project kiểm tra Interrupt trên Proteus TÀI LIỆU THAM KHẢO 1. PIC24FJ128GA010 Family Data Sheet 2. PIC24F Reference Manuals - Section 8: Interrupt [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 2 I/ GIỚI THIỆU Module điều khiển ngắt của PIC24 giúp giảm số lượng yêu cầu ngắt tới CPU chỉ còn một tín hiệu. Module điều khiển ngắt trong vi điều khiển PIC24 có những đặc điểm sau: o Gồm tối đa 8 ngoại lệ (processor exception) và các bẫy phần mềm (software traps). o Gồm 7 mức độ ưu tiên cho người dùng lựa chọn...

pdf14 trang | Chia sẻ: ntt139 | Lượt xem: 1266 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Bài giảng môn Điện - Điện tử - Bài 03: Ngắt (interrupt), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
[THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 1 BÀI 03 NGẮT (Interrupt) MỤC ĐÍCH - Nắm bắt các khái niệm cơ bản về ngắt và cách sử dụng ngắt trong vi điều khiển PIC24FJ128GA010 - Làm quen với cấu trúc phần cứng của module điều khiển ngắt trong vi điều khiển PIC24FJ128GA010 - Làm quen với việc lập trình Interrupt trên PIC24 FJ128GA010 và mô phỏng project kiểm tra Interrupt trên Proteus TÀI LIỆU THAM KHẢO 1. PIC24FJ128GA010 Family Data Sheet 2. PIC24F Reference Manuals - Section 8: Interrupt [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 2 I/ GIỚI THIỆU Module điều khiển ngắt của PIC24 giúp giảm số lượng yêu cầu ngắt tới CPU chỉ còn một tín hiệu. Module điều khiển ngắt trong vi điều khiển PIC24 có những đặc điểm sau: o Gồm tối đa 8 ngoại lệ (processor exception) và các bẫy phần mềm (software traps). o Gồm 7 mức độ ưu tiên cho người dùng lựa chọn. o Bảng vector ngắt (Interrupt Vector Table – IVT ) gồm tối đa 118 vector. o Một nguồn ngắt (interrupt source) hoặc nguồn ngoại lệ (exception source) sẽ có một vector đại diện duy nhất. o PIC24F có hỗ trợ bảng vector ngắt (AIVT) để hỗ trợ việc debug. I.1/ Bảng vector ngắt (Interrupt Vector Table - IVT) Bảng vector ngắt (Interrupt Vector Table - IVT) nằm bên trong bộ nhớ chương trình, bắt đầu tại địa chỉ 0x000004. IVT gồm 126 vectors, gồm 8 vectors bẫy non-maskable (non- maskable trap) và 118 nguồn ngắt. Mỗi nguồn ngắt có một vector cho riêng nó. Mỗi vector ngắt chứa địa chỉ 24-bit, địa chỉ này là địa chỉ bắt đầu của chương trình phục vụ ngắt (Interrupt Service Routine - ISR). I.2/ Bảng vector ngắt thay thế (Alternate Interrupt Vector Table - AIVT) Bảng vector ngắt thay thế (Alternate Interrupt Vector Table - AIVT) nằm sau bảng vector ngắt (IVT). Việc truy xuất tới AIVT được điều khiển thông qua bit ALTIVT (INTCON2). Nếu bit ALTIVT được tích cực, tất cả quá trình ngắt và ngoại lệ (exception) sẽ dùng các vector thay thế thay vì dùng các vector mặc định. Các vector thay thế được tổ chức tương tự như các vector mặc định. AIVT hỗ trợ quá trình emulation và debugging bằng cách cung cấp một cơ chế chuyển đổi qua lại giữa ứng dụng và môi trường hỗ trợ phát triển mà không cần phải lập trình lại các vector ngắt. [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 3 Một phần vector ngắt của PIC24 được định nghĩa trong MPLAB C Compiler theo bảng sau. Những vector ngắt khác (_Interrupt69  _Interrupt117) hiện vẫn chưa được sử dụng Bảng 1: Các tên vector ngắt được định nghĩa trong MPLAB C Compiler [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 4 Bảng 2: Những vector interrupt trong PIC24 [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 5 I.3/ Độ ưu tiên ngắt (Interrupt Priority) [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 6 Mỗi nguồn ngắt ngoại vi có thể được cấu hình mức ưu tiên từ 1-7. Các bit điều khiển độ ưu tiên ngắt cho mỗi nguồn ngắt nằm ở 3 bit Least Significant ở mỗi nibble trong các thanh ghi IPCn. Độ ưu tiên thấp nhất là 1, độ ưu tiên cao nhất là 7. Nếu các bit cấu hình độ ưu tiên ngắt trong các thanh ghi IPCn bị xóa, khi đó các nguồn ngắt bị vô hiệu hóa lập tức. Ghi chú: Khi vi điều khiển bị reset, các thanh ghi IPCn được khởi tạo mặc định để các nguồn ngắt được gán độ ưu tiên là 4. I.4/ Trạng thái ưu tiên của CPU CPU có thể hoạt động ở 1 trong 16 mức ưu tiên 0-15. Một nguồn ngắt hoặc nguồn bẫy phải có mức ưu tiên cao hơn mức ưu tiên của CPU hiện tại để bắt đầu một quá trình exception. Các nguồn ngắt ngoại vi (peripheral interrupt) và ngắt ngoài (external interrupt) có thể được lập trình ở mức ưu tiên 0-7, trong khi các mức ưu tiên CPU 8-15 được dự trữ cho các nguồn bẫy (trap source). Một bẫy (trap) là nguồn ngắt non-maskable được dùng để phát hiện những vấn đề phần cứng và phần mềm. Chú ý: Một nguồn ngắt có mức ưu tiên là 0 sẽ bị vô hiệu hóa vì nó sẽ không bao giờ có độ ưu tiên cao hơn độ ưu tiên của CPU. Mức độ ưu tiên CPU được chỉ thị bởi 4 bit trạng thái sau:  Các bit trạng thái IPL nằm trong thanh ghi SR.  Bit trạng thái IPL3 nằm trong thanh ghi CORCON. Người dùng có thể cấu hình độ ưu tiên cho CPU bằng cách ghi giá trị ưu tiên mong muốn vào IPL, nhờ đó có thể vô hiệu được những nguồn ngắt có độ ưu tiên thấp hơn giá trị ghi vào. Ví dụ, nếu IPL = 111, CPU sẽ không bị ngắt bởi những nguồn ngắt có độ ưu tiên bằng 0, 1, 2, 3. Các sự kiện bẫy (trap) có độ ưu tiên từ 8-15, cao hơn bất cứ nguồn ngắt ngoại vi và ngắt ngoài. Khi sự kiện bẫy (trap) xảy ra, bit IPL3 được thiết lập lên mức 1. Tuy nhiên bit [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 7 IPL3 chỉ có thể xóa mà không được thiết lập bởi người dùng, do đó khi có bẫy xảy ra, người dùng nên xóa bit IPL3. II/ NHỮNG THANH GHI TRẠNG THÁI VÀ ĐIỀU KHIỂN INTERRUPT PIC24FJ128GA010 gồm 28 thanh ghi điều khiển ngắt: - INTCON1 - INTCON2 - IFS0  IFS4 - IEC0  IEC4 - IPC0  IPC16 Việc điều khiển ngắt toàn cục được điều khiển thông qua INTCON1, INTCON2. Thanh ghi INTCON1 có bit gỡ bỏ ngắt chồng (Interrupt Nesting Disable (NSTDIS) bit) và các cờ trạng thái và điều khiển nguồn bẫy xử lý (processor trap source). Thanh ghi INTCON2 điều khiển hoạt động của tín hiệu yêu cầu ngắt ngoài và điều khiển việc dùng bảng vector ngắt thay thế (Alternate Interrupt Vector Table). Các thanh ghi IFS lưu giữ các cờ yêu cầu ngắt. Mỗi nguồn ngắt có một bit trạng thái được thiết lập bởi ngoại vi tương ứng hoặc tín hiệu bên ngoài, và bit này được xóa bằng phần mềm. Các thanh ghi IEC lưu giữ tất cả các bit cho phép ngắt. Những bit điều khiển này được dùng để cho phép ngắt từ ngoại vi hay tín hiệu bên ngoài. Các thanh ghi IPC được dùng để thiết lập mức ưu tiên ngắt cho mỗi nguồn ngắt. Mỗi nguồn ngắt có thể được gán mức ưu tiên từ 1  8. Các nguồn ngắt được gán với những thanh ghi IFSx, IECx và IPCx như trong bảng 2. Ví dụ, INT0 (External Interrupt 0) có mã số vector là 0 và mức ưu tiên tự nhiên là 0. Vì vậy, bit trạng thái INT0IF là IFS0, bit enable là IEC0 và các bit ưu tiên là IPC0. [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 8 Dù không nằm trong phần cứng bộ điều khiển interrupt nhưng 2 trong số những thanh ghi điều khiển CPU lại có những bit điều khiển chức năng ngắt. o Thanh ghi STATUS của CPU (SR) có các bit IPL2:IPL0 (SR), những bit này chỉ thị mức ưu tiên ngắt hiện tại của CPU. Người dùng có thể thay đổi mức ưu tiên của CPU hiện tại bằng cách ghi dữ liệu mới vào các bit IPL. o Thanh ghi CORCON có bit IPL3. IPL3 cùng với IPL2:IPL0 chỉ thị mức ưu tiên ngắt hiện hành của CPU. II.1/ Thanh ghi điều khiển ngắt INTCON1 Bit Tên Chức năng 15 NSTDIS: Interrupt Nesting Disable bit Bit điều khiển việc không cho phép ngắt chồng  1 = Không cho phép ngắt chồng  0 = Cho phép ngắt chồng 14-5 Unimplemented Không dùng 4 MATHERR: Arithmetic Error Trap Status bit Bit trạng thái bẫy lỗi toán học (Math Error Trap)  1 = Overflow trap đã xảy ra  0 = Overflow trap chưa xảy ra 3 ADDRERR: Address Error Trap Status bit Bit trạng thái bẫy lỗi địa chỉ (Address Error Trap)  1 = Address Error Trap đã xảy ra  0 = Address Error Trap chưa xảy ra 2 STKERR: Stack Error Trap Status bit Bit trạng thái bẫy lỗi stack (Stack Error Trap)  1 = Stack Error Trap đã xảy ra  0 = Stack Error Trap chưa xảy ra [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 9 1 OSCFAIL: Oscillator Failure Trap Status bit Bit trạng thái bẫy lỗi dao động (Oscillator Failure Trap)  1 = Oscillator failure trap đã xảy ra  0 = Oscillator failure trap chưa xảy ra 0 Unimplemented Không dùng II.2/ Thanh ghi điều khiển ngắt INTCON2 Bit Tên Chức năng 15 ALTIVT: Enable Alterate Interrupt Vector Table bit Bit cho phép dùng bảng vector ngắt thay thế  1 = Dùng bảng vector thay thế  0 = Dùng bảng vector mặc định 14 DISI: DISI Instruction Status bit  1 = Lệnh DISI được kích hoạt  0 = Lệnh DISI không được kích hoạt 13-5 Unimplemented Không dùng 4 INT4EP: External Interrupt 4 Edge Detect Polarity Select bit Bit lựa chọn cạnh ngắt cho nguồn ngắt ngoài 4  1 = Ngắt tại cạnh xuống  0 = Ngắt tại cạnh lên 3 INT3EP: External Interrupt 3 Edge Detect Polarity Select bi Bit lựa chọn cạnh ngắt cho nguồn ngắt ngoài 3  1 = Ngắt tại cạnh xuống  0 = Ngắt tại cạnh lên 2 INT2EP: External Interrupt 2 Edge Detect Polarity Select bit Bit lựa chọn cạnh ngắt cho nguồn ngắt ngoài 2  1 = Ngắt tại cạnh xuống  0 = Ngắt tại cạnh lên [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 10 1 INT1EP: External Interrupt 1 Edge Detect Polarity Select bit Bit lựa chọn cạnh ngắt cho nguồn ngắt ngoài 1  1 = Ngắt tại cạnh xuống  0 = Ngắt tại cạnh lên 0 INT0EP: External Interrupt 0 Edge Detect Polarity Select bit Bit lựa chọn cạnh ngắt cho nguồn ngắt ngoài 0  1 = Ngắt tại cạnh xuống  0 = Ngắt tại cạnh lên II.3/ Các thanh ghi trạng thái cờ ngắt (Interrupt Flag Status Register) Bộ điều khiển ngắt trong PIC24 gồm 5 thanh ghi trạng thái cờ ngắt gồm: IFS0, IFS1, IFS2, IFS3, IFS4. Tham khảo bảng 2 để biết thông tin vị trí bit trạng thái cờ ngắt cho từng nguồn ngắt riêng biệt. II.4/ Các thanh ghi điều khiển việc tích cực các nguồn ngắt (Interrupt Enable) Bộ điều khiển ngắt trong PIC24 gồm 5 thanh ghi điều khiển ngắt gồm: IEC0, IEC1, IEC2, IEC3, IEC4. Tham khảo bảng 2 để biết thông tin vị trí bit điều khiển tích cực ngắt cho từng nguồn ngắt riêng biệt. II.5/ Các thanh ghi điều khiển độ ưu tiên ngắt Bộ điều khiển ngắt trong PIC24 gồm 17 thanh ghi điều khiển độ ưu tiên ngắt gồm: IPC0, IPC1, IPC2, IPC3, IPC4, IPC5, IPC6, IPC7, IPC8, IPC9, IPC10, IPC11, IPC12, IPC13, IPC14, IPC15, IPC16. Tham khảo bảng 2 để biết thông tin vị trí các bit điều khiển độ ưu tiên ngắt cho từng nguồn ngắt riêng biệt. III/ TRÌNH TỰ THIẾT LẬP NGẮT III.1/ Khởi tạo (Initialization) Để cấu hình cho một nguồn ngắt: [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 11  Nếu không dùng ngắt chồng, bit điều khiển NSTDIS (INTCON1) được thiết lập đến mức 1.  Lựa chọn mức ưu tiên cho nguồn ngắt (ghi giá trị vào các bit điều khiển mức ưu tiên trong các thanh ghi IPCx)  Xóa trạng thái cờ ngắt (xóa bit trạng thái cờ ngắt ứng với từng nguồn ngắt riêng biệt trong các thanh ghi IFSx)  Cho phép ngắt (thiết lập bit điều khiển cho phép ngắt ứng với từng nguồn ngắt trong các thanh ghi IECx) Để tác động vào các bit điều khiển ngắt, sinh viên có thể sử dụng tên các bit theo MPLAB C Compiler. Tên bit = tên ngắt (Primary name trong bảng Vector ngắt bỏ đi từ “Interrupt”) + hậu tố (IE, IF, IP). Ví dụ, các bit điều khiển ngắt Timer1: _TIIF (cờ ngắt), _T1IE (cho phép ngắt) và _T1IP (mức ưu tiên ngắt). III.2/ Hàm phục vụ ngắt (Interrupt Service Routine) Là một hàm chức năng phục vụ ngắt (ISR), hàm này nằm tại địa chỉ được qui định trong bảng vector ngắt đối với từng nguồn ngắt riêng biệt. Khi ISR được thực hiện, người dùng nên tìm cách xóa cờ ngắt tương ứng với nguồn ngắt đã sinh ra ngắt, nếu không ISR sẽ được thực thi lại ngay khi vừa thực thi xong các câu lệnh trong ISR. Các lưu ý khi xây dựng hàm phục vụ ngắt:  Không có tham số và kiểu trả về là void  Không gọi hàm phục vụ ngắt trong chương trình chính  Hàm phục vụ ngắt không nên gọi các hàm khác Cú pháp của hàm phục vụ ngắt: void __attribute__ ((interrupt)) Interrupt_name(void) { // interrupt service routine code here... } Với Interrupt_name chính là primary name trong bảng 1. [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 12 III.3/ Hàm phục vụ bẫy (Trap Service Routine) Một hàm phục vụ bẫy (TSR) được lập trình tương tự như 1 ISR, ngoại trừ cờ trạng thái bẫy (trap flag) của bẫy tương ứng trong thanh ghi INTCON1 phải được xóa để tránh hiện tượng chương trình trong TSR lại được thực hiện lại sau khi đã thực hiện xong. III.4/ Vô hiệu hóa Interrupt Các nguồn có thể được vô hiệu hóa bằng những cách sau:  Đẩy giá trị thanh ghi SR hiện tại vào stack phần mềm dùng lệnh PUSH  Cấu hình độ ưu tiên cho CPU là 7 Để cho phép nguồn ngắt hoạt động trở lại, lệnh POP được dùng để phục hồi giá trị thanh ghi SR đã lưu trước trong stack. Chú ý: Đối với nguồn ngắt có độ ưu tiên là 7 hoặc nhỏ hơn đều có thể bị vô hiệu hóa. Các nguồn bẫy (mức ưu tiên 8-15) không thể bị vô hiệu hóa. IV/ CHƯƠNG TRÌNH MẪU IV.1/ Ngắt Timer ở chế độ định thời Công thức tính thời gian định thời Xem lại bài 2 để biết cách thiết lập Timer hoạt động ở chế độ định thời. Dưới đây là khung chương trình gợi ý. #include void Timer1_Init(void) { T1CON = 0x10; TMR1 = 0x00; PR1 = 0x800A; IPC0bits.T1IP = 0x01; IFS0bits.T1IF = 0; IEC0bits.T1IE = 1; T1CONbits.TON = 1; } [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 13 int main(void) { Timer1_Init(); } void __attribute__((__interrupt__,auto_psv))_T1Interrupt (void) { IFS0bits.T1IF = 0; } IV.2/ Ngắt ngoài Trên vi điều khiển PIC24FJ128GA010 có thể có 5 nguồn ngắt ngoài, đó là tín hiệu vào các chân INT0, INT1, INT2, INT3, INT4. Dưới đây là khung chương trình gợi ý sử dụng nguồn ngắt ngoài INT1 tại pin số 18 của vi điều khiển PIC24FJ128GA010. Ngắt ngoài INT1 sinh ra ngắt khi có cạnh xuống của tín hiệu tại pin 18 của vi điều khiển. Chú ý: Sinh viên nên xem lại bảng 2 để biết thông tin về các bit cấu hình cho từng nguồn ngắt. #include void External_Interrupt1_Init(void) { INTCON1 = 0x0000; INTCON2 = 0x0002; //ngat tai canh xuong ngat ngoai 0 IPC5bits.INT1IP = 5; IFS1bits.INT1IF = 0; IEC1bits.INT1IE = 1; } int main(void) { External_Interrupt1_Init(); } [THỰC HÀNH VI ĐIỀU KHIỂN] 2013 Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang 14 void __attribute__((__interrupt__,auto_psv))_INT1Interrupt void) { IFS1bits.INT1IF = 0; } V/ BÀI TẬP TẠI LỚP (Sinh viên nhận bài tập từ giáo viên hướng dẫn thực hành)

Các file đính kèm theo tài liệu này:

  • pdftailieu.pdf