Thứ Bảy, 1 tháng 12, 2018

9. Ngắt bên ngoài trong LPC2148 vi điều khiển ARM7

Hướng dẫn này là về ngắt bên ngoài trong LPC2148 ARM7 Vi điều khiển. Như trong bài trước, chúng tôi đã sử dụng ngắt để chuyển đổi LED sau mỗi nửa giây. Trong dự án ví dụ này, chúng tôi sẽ cấu hình đầu vào ngắt bên ngoài bằng cách sử dụng công tắc để tạo ra tiếng bíp, Ngoài ra, chúng tôi sẽ giao diện bộ rung với vi điều khiển LPC2148. Hãy hiểu trước

Ngắt ngoài là gì?

Ngắt gây ra bởi một nguồn bên ngoài chẳng hạn như chuyển đổi bên ngoài, cảm biến hoặc thiết bị giám sát. Những gián đoạn này là các sự kiện đặc biệt cần chú ý ngay lập tức. Một ngắt có thể được cấu hình để được thiết lập bởi một loạt các trigger. Ví dụ: chip đang chờ thay đổi tín hiệu trên ghim được kết nối với công tắc hoặc bộ cảm biến và ngắt quãng thời gian. Bảy Ghim của PORT0 trên LPC2148 Vi điều khiển có thể được cấu hình như đầu vào ngắt bên ngoài. Các mô tả pin được đưa ra như sau:
Tên PinHướng pinMô tả pin
EINT0Ngõ vào ngắt ngoài 0Chân P0.1 và P0.16 có thể được chọn để thực hiện chức năng EINT0
EINT1Ngõ vào ngắt ngoài 1Chân P0.3 và P0.14 có thể được chọn để thực hiện chức năng EINT1
EINT2Ngõ vào ngắt ngoài 2Chân P0.7 và P0.15 có thể được chọn để thực hiện chức năng EINT2
EINT3Đầu vào ngắt ngoài 3Bạn có thể chọn Ghim P0.9, P0.20 và P0.30 cho EINT3

Đăng ký: Ngắt bên ngoài trong LPC2148 ARM7

Chức năng ngắt bên ngoài có bốn thanh ghi liên kết với nó. Các EXTINT đăng ký chứa cờ ngắt, và EXTWAKEUP đăng ký chứa bit cho phép ngắt ngoài cá nhân để thức dậy các vi điều khiển từ chế độ Power-down. Các thanh ghi EXTMODE và EXTPOLAR chỉ định các tham số độ nhạy và mức độ cạnh. Tham khảo trang thông số kỹ thuật số 27 Chương: 4.5 ]
Register External Interrupt LPC2148
Đăng ký ngắt ngoài LPC2148

Dự án ví dụ: Ngắt bên ngoài trong LPC2148 ARM7

Chúng tôi sẽ sử dụng Pin P0.15 làm chân ngắt bên ngoài. Trên bảng phát triển của chúng tôi, chúng tôi cũng có buzzer kết nối với Pin P1.15 của LPC2148. Sơ đồ được minh họa trong hình dưới đây:
External Interrupt in LPC2148 ARM7
Mạch: Ngắt ngoài trong LPC2148 ARM7
Các chi tiết được cung cấp trong phần giải thích, về cách định cấu hình chân P0.15 làm đầu vào ngắt bên ngoài ( EINT ). Đầu tiên hãy xem chương trình:

Tải xuống dự án: Nhấp vào đây

Các bước khởi tạo: Ngắt bên ngoài trong LPC2148 ARM7

  • Định cấu hình chức năng pin
  • Chọn cạnh / cấp độ nhạy cảm
  • Chọn tín hiệu Polarity
  • Xóa cờ EINT
Sau khi hoàn thành các bước này, chúng ta cần phải xác định loại ngắt được tạo ra bởi đầu vào EINT: Yêu cầu ngắt thông thường IRQ ) hoặc Yêu cầu ngắt nhanh FIQ ) .

Giải thích mã:

Để hiểu chương trình, chúng ta chỉ cần thảo luận hai hàm, void int_ext_interrupt () và  _irq void Ext_ISR (void) . Trong void int_ext_interrupt (); chúng ta sẽ khởi tạo vector ngắt và gọi ISR ​​khi ngắt xảy ra. Trong khi chức năng Ext_ISR void (void) _irq void , chúng tôi đã thiết lập hành động được thực hiện trong khi ISR ​​được gọi là (ở đây trong ví dụ của chúng tôi, chúng tôi sẽ tạo ra tiếng bíp trong một giây). Hãy phân tích mã thành từng phần:
Sau khi thiết lập chế độ nhạy cảm cạnh và cực để trở thành cạnh rơi nhạy cảm với tín hiệu ngắt. Chúng ta phải sửa đổi PINSEL0 đăng ký để thay đổi chức năng của pin P0.15 từ mục đích chung IO tức là GPIO để ngắt ngoài 2 EINT2 ) . Bây giờ chúng ta phải sửa đổi đăng ký kiểm soát vector 5 VICVectCntl5 ) . Có 16 thanh ghi VICVectCntl0 đến VICVectCntl15 ) , mỗi thanh điều khiển một khe IRQ vector. VICVectCntl0 có ưu tiên cao nhất, trong khi VICVectCntl15 có ưu tiên thấp nhất. Hãy sửa đổi VICVectCntl5; Các trường bit 4: 0 là số yêu cầu ngắt.External Interrupt2 (EINT2) là kênh 16 . Chúng tôi muốn kênh ngắt này được gán cho IRQ Slot5. Vì vậy, chúng ta phải sửa đổi đăng ký VICVectCntl5 để cho phép chúng ta nạp các trường bit 0: 4 của VICVectCntl5 với “ (1 << 5) | 16 ”vì chúng tôi muốn kênh 16 trong khe IRQ này. Trường bit của ' 5 ' của VICVectCntl5 là cho khe IRQ có nghĩa là ( 1 << 5 ) . Khi trường bit này là 1, khe cắm IRQ vectơ này được bật. (NÀY KHÔNG PHẢI LÀ L ENI VẤN ĐỀ), đây chỉ là để kích hoạt khe IRQ vectơ. Việc vô hiệu hóa một khe IRQ vectơ trong một thanh ghi VICVectCntl X không vô hiệu hóa ngắt: nó chỉ thay đổi ngắt từ dạng Vectored sang Không Vector.
Bây giờ là lúc sửa đổi thanh ghi địa chỉ vectơ VICVectAddr5 ) . Thanh ghi này giữ địa chỉ của Routive Service Routine (ISR). Đây là nơi chúng ta nói cho vi điều khiển hàm chương trình mà chúng ta muốn thực thi khi một ngắt bên ngoài được kích hoạt. Ở đây chúng tôi đã đặt tên ISR bên ngoài là “ Ext_ISR ” . Dòng mã sau đây trích xuất vị trí bộ nhớ của hàm đó và lưu trữ nó trong VICVectAddr5.
Cuối cùng, đã đến lúc bật ngắt bên ngoài. Bây giờ chúng ta sẽ sửa đổi thanh ghi kích hoạt ngắt (VICIntEnable ) . Thanh ghi này kiểm soát trong số 32 yêu cầu ngắt và ngắt phần mềm đóng góp vào FIQ hoặc IRQ. Chúng tôi chỉ quan tâm đến ngắt bên ngoài, đó là trường bit 16 ' của thanh ghi này. Chúng tôi thiết lập bit này cao để cho phép ngắt bên ngoài.
Các _irq từ khóa cho trình biên dịch rằng chức năng là một thói quen ngắt. Trong chức năng này, chúng tôi chỉ đơn giản là cấu hình pin P1.25 vào chế độ đầu ra và tạo ra tiếng bíp sử dụng còi. Cuối cùng chúng ta sẽ phải xóa ngắt bằng “ EXTINT | = 0x4 ” và khai báo kết thúc ngắt VICVectAddr = 0x0 ) .
Đây là cách chúng ta có thể sử dụng ngắt ngoài trong Bộ vi xử lý LPC2148 ARM7 để thiết kế ứng dụng nhúng phức tạp. Chúng tôi đã không đề cập đến các loại cấu hình kích hoạt cấp độ gián đoạn khác nhau. Bởi vì nó không nằm trong phạm vi của hướng dẫn này. Có lẽ trong bài viết tương lai của chúng tôi, chúng ta sẽ thấy nhiều dự án hơn, nơi chúng ta sẽ sử dụng các phương thức kích hoạt khác nhau trong ngắt bên ngoài

Không có nhận xét nào:

Đăng nhận xét

Bài đăng mới nhất

Hướng dẫn sử dụng Cân điện tử Fujihatsu FTC-01

Hướng dẫn sử dụng Cân điện tử Fujihatsu FTC-01 # candientu ,  # fujihatsu ,  # candientufujihatsu  #candientu,  # candientufujhatsu , #fuji...

Bài đăng phổ biến