Chuyển đến nội dung
AIOTAIOT
  • Trang chủ
  • Giới thiệu
  • Tin tức
  • Sản phẩm
  • Giải pháp
    • Chấm công bằng Face ID
    • Thiết bị đọc căn cước
    • IoT trong giáo dục
    • IoT trong quản lý năng lượng
    • IoT trong y tế
  • Đào tạo
    • Khóa đào tạo cơ bản
      • Hệ thống nhúng
      • LabVIEW FPGA
      • Phần cứng máy tính & Truyền thông công nghiệp
      • FPGA cơ bản
    • Khóa đào tạo nâng cao
      • LabVIEW FPGA High Performance
    • Tài liệu
  • PCCC
  • Liên hệ
  • icon
    097 186 8316    |    0839 799 889
Đào tạo, Hệ thống nhúng, Khóa đào tạo cơ bản

[Embedded Series – Bài 17] Kỹ Thuật Lập Trình Ngắt, RTOS Và Giải Phóng Sức Mạnh CPU Với DMA

Đã đăng trên 04/05/202623/04/2026 bởi ThaoNguyen
04
Th5

Trong các bài học trước, chúng ta đã làm quen với phương pháp Polling (vòng lặp kiểm tra). Tuy nhiên, trong các hệ thống nhúng hiện đại đòi hỏi tính thời gian thực (Real-time) và đa nhiệm, Polling bộc lộ điểm yếu chết người là làm lãng phí 100% tài nguyên CPU chỉ để “chờ đợi”. Bài viết này sẽ giúp bạn làm chủ Ngắt (Interrupt), RTOS và DMA – ba “vũ khí” hạng nặng để tối ưu hóa hiệu năng hệ thống.

🎯 Mục tiêu học tập nâng cao

  • Phân tích sâu cơ chế Context Switching trong lập trình Ngắt.
  • Hiểu cách RTOS quản lý đa nhiệm và khi nào cần sử dụng nó.
  • Nắm vững kiến trúc DMA Controller và các chế độ truyền dữ liệu đỉnh cao.
  • Thực hành cấu hình Ngắt ngoài (EXTI) trên STM32 từ CubeMX đến xử lý mã nguồn trong Keil MDK.

1. Kỹ thuật lập trình Ngắt (Interrupt) – Phản xạ tức thì

Ngắt là cơ chế cho phép phần cứng gửi tín hiệu IRQ (Interrupt Request) để thông báo cho CPU khi có một sự kiện khẩn cấp xảy ra.

a) Cơ chế hoạt động: Từ IRQ đến ISR

Khi một yêu cầu ngắt được chấp nhận, CPU sẽ thực hiện quy trình sau:

  1. Tạm dừng chương trình hiện tại (Main loop).
  2. Lưu trạng thái các thanh ghi vào Stack (Context Saving).
  3. Tra cứu địa chỉ hàm xử lý ngắt trong Vector Table.
  4. Thực thi ISR (Interrupt Service Routine).
  5. Khôi phục trạng thái cũ và tiếp tục chạy Main loop (Context Restore).
Tiêu chí Phương pháp Polling Phương pháp Interrupt
Tài nguyên CPU Luôn bận rộn 100%. Chỉ bận khi có sự kiện xảy ra.
Tốc độ đáp ứng Phụ thuộc vào độ dài của vòng lặp. Gần như tức thì.
Tiết kiệm điện Không hiệu quả. Tốt (Kết hợp chế độ Sleep).

2. Hệ điều hành thời gian thực (RTOS) – Quản lý đa nhiệm

RTOS (Real-Time Operating System) không phải là một “phép thuật” giúp CPU chạy nhanh hơn, mà là một bộ quản lý (Scheduler) thông minh.

  • Đa nhiệm (Multitasking): RTOS chia CPU thành các “lát cắt” thời gian nhỏ cho từng Task.
  • Ưu tiên (Priority): Đảm bảo Task quan trọng nhất luôn được thực thi trước.
  • FreeRTOS: Là bản phân phối phổ biến nhất trong giới nhúng, giúp đơn giản hóa các chương trình phức tạp, cho phép các tiến trình chạy song song (về mặt logic).

Lưu ý: Chỉ sử dụng RTOS khi hệ thống có quá nhiều tác vụ phức tạp, vì RTOS sẽ chiếm dụng thêm một phần RAM và Flash của vi điều khiển.

3. DMA (Direct Memory Access) – Đường truyền dữ liệu siêu tốc

DMA là một khối phần cứng độc lập cho phép trao đổi dữ liệu trực tiếp giữa Ngoại vi và Bộ nhớ hoặc Bộ nhớ và Bộ nhớ mà hoàn toàn không đi qua CPU.

Các tính năng nổi bật của bộ DMA trên STM32:

  • Đa kênh: 12 kênh độc lập (7 kênh DMA1, 5 kênh DMA2) cho phép xử lý nhiều luồng dữ liệu cùng lúc.
  • Mức độ ưu tiên: Có 4 mức (Very High, High, Medium, Low) có thể lập trình được.
  • Kích thước linh hoạt: Truyền theo Byte (8-bit), Half-word (16-bit) hoặc Word (32-bit).
  • Cờ báo hiệu: Hỗ trợ các ngắt như Transfer Complete (TC), Half Transfer (HT), và Error (TE).

Chế độ hoạt động:

  • Normal Mode: Truyền xong một lượng dữ liệu định trước là dừng. Thường dùng cho các lệnh gửi dữ liệu UART cố định.
  • Circular Mode: Hoạt động như một Ring Buffer. Khi truyền đến cuối vùng nhớ, DMA tự động quay lại bắt đầu từ đầu. Cực kỳ hiệu quả khi làm việc với ADC (đọc cảm biến liên tục) hoặc xử lý Audio.

4. Thực hành: Cấu hình EXTI (External Interrupt) trên STM32

Bước 1: Cấu hình trên STM32CubeMX

  1. Pinout: Chọn chân PA0 (Nút nhấn) là GPIO_EXTI0. Chọn chân PB6 (LED) là GPIO_Output.
  2. Clock Configuration: Để đạt hiệu năng cao nhất, cấu hình tần số Max (VD: 216MHz cho F7).
  3. NVIC Settings: Tìm đến dòng “EXTI line0 interrupt” và tích vào ô Enabled.
  4. Project Manager: Chọn Toolchain là MDK-ARM (KeilC) và nhấn Generate Code.

Bước 2: Hiểu luồng code xử lý ngắt

Trong thư viện HAL, khi có ngắt xảy ra, hệ thống sẽ thực hiện theo chuỗi:

EXTI0_IRQHandler (trong stm32f7xx_it.c)
↓
HAL_GPIO_EXTI_IRQHandler
↓
HAL_GPIO_EXTI_Callback (Hàm bạn sẽ viết code)

/* * Hàm Callback xử lý ngắt ngoài 
 * Được gọi tự động bởi thư viện HAL sau khi đã clear các cờ ngắt
 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == GPIO_PIN_0) // Kiểm tra ngắt đến từ chân Pin 0
    {
        // Thực hiện đảo trạng thái LED
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
    }
}

/* Trong hàm main */
int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init(); // Trong này đã cấu hình EXTI và NVIC

    while (1)
    {
        // Chương trình nền có thể ngủ hoặc làm việc khác
        HAL_Delay(1000); 
    }
}

5. Hướng dẫn nạp code và Debug chuyên nghiệp

Để chương trình chạy đúng, việc nạp code cần tuân thủ các bước cấu hình mạch nạp ST-LINK V2 trong KeilC:

  • Kết nối: Nối 4 chân (3.3V, GND, SWDIO, SWCLK) từ mạch nạp sang JTAG header của KIT.
  • Settings: Trong mục Debug -> Settings, chọn SW Port thay vì JTAG. Nếu hiện ID CODE, chip đã kết nối thành công.
  • Flash Download: Tích chọn Reset and Run. Điều này giúp chip tự động chạy chương trình ngay sau khi thanh tiến trình nạp đạt 100%.

🚀 Bài tập thực hành

Yêu cầu: Kết hợp Ngắt và DMA.

  1. Cấu hình UART ở chế độ DMA truyền dữ liệu.
  2. Mỗi khi nhấn nút (dùng Ngắt EXTI), hãy kích hoạt DMA gửi chuỗi ký tự “AIoT – Button Pressed!” lên terminal máy tính.
  3. Sử dụng biến đếm để hiển thị số lần nhấn nút trong chuỗi gửi lên.
📝 Tóm tắt: Làm chủ Ngắt giúp hệ thống phản ứng nhanh, làm chủ DMA giúp hệ thống truyền tin tốc độ cao mà CPU vẫn rảnh rỗi. Đây là những kỹ thuật tách biệt một kỹ sư thực thụ với một người mới bắt đầu.

“CPU là bộ não, nhưng DMA và Ngắt là hệ thần kinh giúp cơ thể nhúng hoạt động nhịp nhàng.”

Gợi ý bài tiếp theo: Timer – Từ cơ bản đến nâng cao: Định thời, Ngắt Timer và Ứng dụng tạo xung PWM.

 

Mục nhập này đã được đăng trong Đào tạo, Hệ thống nhúng, Khóa đào tạo cơ bản và được gắn thẻ Embedded Systems.
ThaoNguyen

[Embedded Series – Bài 16] Tổng Quan Kiến Trúc SoC, State Machine Và Phương Pháp Polling
[Embedded Series – Bài 18] Làm Chủ Timer/Counter Và Ứng Dụng Tạo Xung PWM Trên STM32

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Bài viết mới
  • [Embedded Series – Bài 18] Làm Chủ Timer/Counter Và Ứng Dụng Tạo Xung PWM Trên STM32
  • [Embedded Series – Bài 17] Kỹ Thuật Lập Trình Ngắt, RTOS Và Giải Phóng Sức Mạnh CPU Với DMA
  • [Embedded Series – Bài 16] Tổng Quan Kiến Trúc SoC, State Machine Và Phương Pháp Polling
  • [Embedded Series – Bài 15] Kiến Trúc Vi Điều Khiển Và Kỹ Thuật Làm Chủ GPIO Chuyên Sâu
  • [Embedded Series – Bài 14] Nhập Môn Lập Trình Nhúng Và Khám Phá Kiến Trúc ARM Cortex-M
Danh mục
  • Đào tạo
  • FPGA cơ bản
  • Giải pháp
  • Hệ thống nhúng
  • IoT trong giáo dục
  • IoT trong y tế
  • Khóa đào tạo cơ bản
  • Khóa đào tạo nâng cao
  • LabVIEW FPGA
  • LabVIEW FPGA High Performance
  • Phần cứng máy tính & Truyền thông công nghiệp
  • Sản xuất công nghiệp
  • Thiết bị dịch vụ thông minh
  • Thiết bị đọc căn cước
  • Tin tức

CÔNG TY CỔ PHẦN HỆ THỐNG AIOT

VPGD: Số A21-TT9 Đường Foresa 1 KĐT Xuân Phương, Phường Xuân Phương, Hà Nội.

Địa chỉ kinh doanh: Đường Phú Diễn, Tổ dân phố 18, phường Phú Diễn, Thành phố Hà Nội, Việt Nam

Hotline/Zalo: 097 186 8316 | 0839 799 889

Email: aiot@aiots.vn

VỀ CHÚNG TÔI

Giới thiệu

Sản phẩm

Giải pháp

Đào tạo

Tin tức

QUY ĐỊNH & CHÍNH SÁCH

Chính sách thanh toán

Chính sách vận chuyển

Chính sách bảo hành

Chính sách đổi trả

Chính sách bảo mật

ĐỊA CHỈ VĂN PHÒNG GIAO DỊCH

Copyright 2024 © Bản quyền thuộc về AIOT. Thiết kế bởi Jamina JSC
  • Trang chủ
  • Giới thiệu
  • Tin tức
  • Sản phẩm
  • Giải pháp
    • Chấm công bằng Face ID
    • Thiết bị đọc căn cước
    • IoT trong giáo dục
    • IoT trong quản lý năng lượng
    • IoT trong y tế
  • Đào tạo
    • Khóa đào tạo cơ bản
      • Hệ thống nhúng
      • LabVIEW FPGA
      • Phần cứng máy tính & Truyền thông công nghiệp
      • FPGA cơ bản
    • Khóa đào tạo nâng cao
      • LabVIEW FPGA High Performance
    • Tài liệu
  • PCCC
  • Liên hệ
Zalo
Phone

Đăng nhập

Quên mật khẩu?