[Lập trình RTL8720] #2: Interupt GPIO | Ngắt ngoài

 
[Lập trình RTL8720] #2: Interupt GPIO | Ngắt ngoài


Ngắt là gì?

Ngắt được sử dụng để xử lý các sự kiện không xảy ra trong quá trình thực hiện tuần tự trong chương trình. Ví dụ: chúng ta muốn thực hiện một số tác vụ nhất định và các tác vụ này thực hiện tuần tự trong chương trình Arduino của bạn. Nhưng có một số tác vụ chỉ thực thi khi một sự kiện đặc biệt xảy ra, chẳng hạn như tín hiệu kích hoạt bên ngoài đến chân đầu vào của vi điều khiển.

Ngắt ngoài

Ngắt ngoài (ngắt phần cứng) là do module phần cứng bên ngoài gây ra. Ví dụ: có Ngắt cảm ứng xảy ra khi phát hiện cảm ứng và ngắt GPIO khi nhấn một phím. Trong hướng dẫn này, chúng ta sẽ tập trung vào loại ngắt này.
Với ngắt, chúng ta không cần phải liên tục kiểm tra trạng thái của chân đầu vào kỹ thuật số. Khi một ngắt xảy ra (một thay đổi được phát hiện), bộ xử lý sẽ dừng thực thi chương trình chính và một chức năng được gọi là ISR hoặc Quy trình Dịch vụ Ngắt. Sau đó, bộ xử lý tạm thời làm việc trên một tác vụ khác (ISR) và sau đó quay lại chương trình chính sau khi quy trình xử lý kết thúc. Điều này được thể hiện trong hình bên dưới.

Cách hoạt động của ngắt
Một ví dụ có thể là nhấn nút ấn hoặc phát hiện chuyển động bằng Cảm biến PIR. Trong cả hai trường hợp, có thể sử dụng nút ấn hoặc cảm biến chuyển động PIR để kích hoạt ngắt. Do đó, khi một sự kiện bên ngoài xảy ra, bộ xử lý sẽ dừng công việc đang làm và thực hiện quy trình dịch vụ ngắt mà chúng ta xác định cho sự kiện tương ứng. Sau đó, nó quay trở lại chương trình hiện tại. Ngắt ngoài cực kỳ hữu ích vì với sự trợ giúp của chúng, chúng tôi không phải liên tục theo dõi trạng thái chân đầu vào kỹ thuật số.

Chân ngắt RTL8720

Các chân hỗ trợ ngắt trên RTL8720 bao gồm: PA7, PA8, PA12, PA13, PA14, PA15, PA25, PA26, PA27, PA30, PB1, PB2, PB3.
RTL8720

Cấu hình chân ngắt trên RTL8720

Bây giờ chúng ta hãy xem cách thiết lập các ngắt bên ngoài trong kit phát triển BW16 bằng Arduino IDE. Các bước sau đây cần phải được làm theo.

Chúng tôi sẽ sử dụng chức năng sau để định cấu hình ngắt trong Arduino IDE:

pinMode(BUTTON, INPUT_IRQ_FALL);
digitalSetIrqHandler(BUTTON, buttonHandler);
Hàm pinMode định nghĩa chân GIPO 'BUTTON' là chân ngắt ở xung cạnh xuống.
Hàm digitalSetIrqHandler nhận 2 params đó là chân ngắt và callback function, khi xảy ra ngắt thì function buttonHandler được gọi.   

Code mẫu


#define LED_R PA12
#define BUTTON PA15

bool state_led = false;

void buttonHandler(uint32_t id, uint32_t event) {
  state_led = !state_led;
  digitalWrite(LED_R, state_led);
}

void setup() {
  pinMode(LED_R, OUTPUT);
  digitalWrite(LED_R, LOW);

  pinMode(BUTTON, INPUT_IRQ_FALL);
  digitalSetIrqHandler(BUTTON, buttonHandler);
}

void loop() {
}


Video hướng dẫn




No comments:

Post a Comment