ประเภทของ Interrupt ใน CH32V003

1. จำแนกประเภทหลักตาม QingKe V2 CPU Core

  • Interrupt (mcause[31]=1): เกิดจากสัญญาณภายนอก เช่น Timer, USART, I2C, EXTI
  • Exception (mcause[31]=0): เกิดจากปัญหาในโปรแกรม เช่น Illegal Instruction, Load/Store Fault

สรุป: บน CH32V003 ทุก Interrupt และ Exception ถูกจัดการเหมือนกันทางฮาร์ดแวร์ แต่แยกประเภทด้วย mcause[31] ว่าเป็น “Interrupt” หรือ “Exception”


2. จำแนกตามระบบ MCU (Peripheral Interrupt)

CH32V003 มีการจัดการ Interrupt 2 กลุ่มใหญ่:

2.1 Core Exception (ระดับ CPU Core)

  • SysTick Timer Interrupt (Vector #12) – ใช้นับเวลา System Tick
  • Software Interrupt (Vector #14) – ใช้สำหรับสั่ง Interrupt จากโปรแกรมเอง
  • Machine External Interrupt (Vector #16-255) – รวม External Interrupt ทั้งหมด

หมายเหตุ: Core Exception ไม่ได้เกี่ยวกับ Peripheral ตรงๆ แต่จำเป็นต่อ OS, RTOS


2.2 Peripheral Interrupt (ระดับอุปกรณ์)

จาก CH32V003RM V1.7 ระบุว่า Peripheral Interrupts ที่มี ได้แก่:

Peripheralรายละเอียดการใช้งาน
EXTI (External Interrupt Controller)ใช้กับขา GPIOA, GPIOC, GPIOD สำหรับจับสัญญาณขาเข้าเช่นปุ่มกด, อินพุตภายนอก
TIM1/TIM2 (Timer Interrupts)จับเวลา, PWM, Input Capture, Output Compare
USART1 (Serial Communication)รับส่งข้อมูลผ่าน UART, ตรวจจับรับข้อมูลเสร็จ/ส่งข้อมูลเสร็จ
I2C1 (I2C Interrupt)การสื่อสาร I2C Master/Slave รับส่งข้อมูลเสร็จสิ้น, ความผิดพลาดบัส I2C
SPI1 (SPI Interrupt)สื่อสารแบบ SPI เช่น Master/Slave Transfer Complete
ADC1 (Analog-Digital Converter Interrupt)แจ้งว่าแปลงสัญญาณ Analog เสร็จสิ้น
WWDG/IWDG (Watchdog Interrupt)ใช้สำหรับแจ้งเตือนก่อน Reset โดย Watchdog
DMA Channelเมื่อการส่งข้อมูลผ่าน DMA เสร็จสิ้น

สรุปแผนภาพ

Interrupt ใน CH32V003
├── Core Exception
│   ├── SysTick
│   ├── Software Interrupt
│   └── Machine External Interrupt
├── Peripheral Interrupt
│   ├── EXTI (GPIO Pin)
│   ├── Timer (TIM1, TIM2)
│   ├── USART (UART)
│   ├── I2C
│   ├── SPI
│   ├── ADC
│   ├── Watchdog (WWDG/IWDG)
│   └── DMA

ลักษณะสำคัญของระบบ Interrupt บน CH32V003

  • ใช้ Fast Programmable Interrupt Controller (PFIC)
  • รองรับ 2-level Nesting (ซ้อน Interrupt ได้)
  • รองรับ Vector Table Free (VTF) (ไม่ต้องใช้ Vector Table แบบ Fix)
  • มี Hardware Stack (HPE) สำหรับ Push/Pop เร็ว

การนำไปใช้งานจริง

ประเภทตัวอย่างการใช้งานจริง
EXTIตรวจจับการกดปุ่มบนขา PA1
Timerทำ PWM ควบคุมความสว่างไฟ LED
USARTรับส่งข้อมูล Serial ระหว่าง MCU กับ PC
I2Cเชื่อมต่อกับ EEPROM หรือ Sensor
SPIติดต่อกับ SD Card หรือ OLED Display
ADCวัดค่าแรงดันจากเซนเซอร์
WWDG/IWDGป้องกันระบบแฮงค์หรือลูปค้าง

ย้ำ:

  • การเขียนโปรแกรมต้อง Enable Clock Peripheral ก่อนเปิดใช้งาน Interrupt เสมอ
  • หลีกเลี่ยงการเขียน Access Register ตรง ต้องใช้ฟังก์ชันใน SDK เช่น EXTI_Init(), USART_ITConfig(), TIM_ITConfig(), ADC_ITConfig()