Học MSP430 với Kit MSP430 LaunchPad - Bài 3: Ngắt ( Interrupt )

Học MSP430 với Kit MSP430 LaunchPad

Bài 3: Ngắt ( Interrupt )

Ngắt : là tín hiệu khẩn cấp gửi đến bộ vi xử lý , yêu cầu bộ vi xử lý tạm dừng các chương trình đang chạy để nhảy tới thực hiện một nhiệm vụ khẩn cấp nào đó , nhiệm vụ này gọi là trình phục vụ ngắt –ISR(Interrupt Service Routine) . Sau khi kết thúc trình phục vụ ngắt bộ vi xử lý sẽ quay lại thực hiện tiếp các chương trình còn dang dở

-          Ngắt thường được sử dụng để xử lý các sự kiện bất ngờ nhưng không tốn quá nhiều thời gian

-          Các tín hiệu ngắt có thể xuất phát từ

+ Trong vi điều khiển : bộ timer đếm tràn , bộ chuyển đổi tương tự số - ADC..

+ Bên ngoài vi điều khiển :  đầu vào Input (nút nhấn , xung ..), quá trình nhận dữ liệu khi giao tiếp …

Do chúng ta chưa làm về nhiều ngoại vi nên bài hướng dẫn này sẽ làm với ngắt Input dùng phím ấn

Trong bài học số 2 : GPIO và Clock (Phần 1 ) http://mlab.vn/bai-viet-ki-thuat/vi-dieu-khien-msp430/4900-hoc-msp430-voi-kit-msp430-launchpad-bai-2-gpio-va-clock-phan-1.html  .

Có ví dụ dùng phím bấm để điều khiển Led trên Kit LaunchPad . trong ví dụ đó để kiểm tra xem có phím nhấn hay không thì phải kiểm tra liên tục trong vòng while(1) {}.

Cách bắt sự kiện phím bấm có xảy ra hay không như trên gọi là hỏi vòng (Polling). Có thêm một phương pháp nữa dùng để bắt sự kiện mà sẽ trình bày ngay sau đây đó là sử dụng Ngắt.

Bài thực hành : khi phím chân P1.3 trên Kit nhấn thì đảo trạng thái Led P1.0 và P1.6

Các câu lệnh về cấu hình Out put và Input các bạn đã biết trong Bài 2 , vì thế mình giải thích các dòng lệnh liên quan đến ngắt

-          P1IE :  thanh ghi cho phép ngắt của Port 1 (tương tự với Port 2P2IE)  gồm 8 bit tương ứng với 8 công của Port 1 : từ P1.0 à P1.7.

= 1 cho phép ngắt chân tương ứng (với điều kiện chân đó đã cấu hình là cổng vào)

= 0 không cho phép ngắt                       

P1IE |= BIT3;    // cho phép ngắt chân P1.3

 

-          Bây giờ chúng ta xem lại cách cấu hình nút ấn : một chân nối đất và một chân nối P1.3 của MSP , do chúng ta đã cấu hình trở treo lên nguồn (hình bên dưới ) nên :

Khi nút không ấn thì trạng thái đầu vào mức cao (nút hở)

Còn khi ấn nút trạng thái đầu vào mức thấp (nút đóng)

>> Khi có ấn phím trạng thái đầu vào sẽ thay đổi từ mức cao thành mức thấp tức là sườn xuống

Cấu hình nút nhấn                                              Mô tả sườn

 

-          P1IES : Thanh ghi cấu hình ngắt theo sườn , thanh ghi 8 bit

= 1 Ngắt theo sườn xuống 

= 0 Ngắt theo sườn lên

Ngắt sẽ xảy ra khi có sườn lên hoặc sườn xuống tại đầu vào

P1IES |= BIT3;           // Ngắt theo sườn xuống

 

-          P1IFG : Thanh ghi chứa cờ  ngắt của Port 1

Khi có ngắt xảy ra bit tương ứng của chân ngắt sẽ tự động bật lên ‘1’ , và nó sẽ ko tự động xóa.

Vi xử lý sẽ căn cứ vào cờ ngắt này để nhảy vào chương trình phục vụ ngắt(ISR) . Nếu không xóa nó thì sẽ nhảy vào chương trình ngắt liên tục .  vì vậy sau mỗi lần vào ngắt phải xóa cờ ngắt đi để lần sau có thể nhảy vào được .

P1IFG &=~ BIT3;       // Xóa cờ ngắt chân P1.3

 

-          _BIS_SR(GIE);           // Cho phép ngắt toàn cục

Phải có câu lệnh này thì ngắt mới có tác dụng ,

 

Các lệnh trên cấu hình ngắt cho Input

 

Như  khái niệm về ngắt ở trên , bây giờ chúng ta tạo trình phục vụ ngắt (ISR) theo cú pháp chuẩn

 

Trong đó “PORT1_VECTOR“ là vector ngắt của Port 1, tất cả các ngắt chân Input đếu nhảy vào vector ngắt này , tương tự với Port 2 có vector  ngắt “PORT2_VECTOR”

Để xem chi tiết các vector ngắt mở bôi đen vào “PORT1_VECTOR“ click chuột phải và chọn “Open declaration”

 

-          Chú ý :  phải xóa cờ ngắt sau mỗi lần nhảy vào trình phục vụ ngắt

Bài thực hành :     - Thực hiện đảo trạng thái Led sau khi nhả phím

                               - So sánh hai phương pháp bắt sự kiện : hỏi vòng (polling) và ngắt

Dưới đây là  chuỗi các bài học MSP430:

Bài 1: Project đầu tiên

Bài 2: GPIO và Clock (Phần 1)

Bài 2: GPIO và Clock (Phần 2)

Bài 3: Ngắt ( Interrupt )

Bài 4: Timer/Counter

Bài 5: UART

Bài 6: ADC

Chúc các bạn thực hành tốt bài học này, hẹn gặp lại các bạn trong các bài học tiếp theo!

http://mlab.vn/ (Phạm Xuân Lập - MLAB)

 

Viết đánh giá

Họ và tên:


Đánh giá của bạn: Lưu ý: Không hỗ trợ HTML!

Bình chọn: Dở            Hay

Nhập mã bảo vệ: