ประเภทของ 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()