sync(template): 回合 capsule_mb 通用驱动修复

- uart_ring_buffer: PRIMASK 位检查从 ==0 改为 &0x1 修正
- i2c: 新增 i2c_read_raw() 无子地址读函数
- 全局: volatile 统一替换为 __IO (CMSIS 风格)
This commit is contained in:
2026-06-30 11:03:22 +08:00
parent 03810e9cad
commit bfa311b70f
5 changed files with 181 additions and 14 deletions
+9 -9
View File
@@ -8,10 +8,10 @@
#include "uart_ring_buffer.h"
#include "gd32e23x.h"
static volatile uint8_t uart_rx_buffer[UART_RX_BUFFER_SIZE];
static volatile uint8_t write_index = 0;
static volatile uint8_t read_index = 0;
static volatile uint32_t dropped_bytes = 0;
static __IO uint8_t uart_rx_buffer[UART_RX_BUFFER_SIZE];
static __IO uint8_t write_index = 0;
static __IO uint8_t read_index = 0;
static __IO uint32_t dropped_bytes = 0;
static inline uint32_t irq_save(void) {
uint32_t primask = __get_PRIMASK();
@@ -20,7 +20,7 @@ static inline uint32_t irq_save(void) {
}
static inline void irq_restore(uint32_t primask) {
if (primask == 0U) {
if ((primask & 0x1) == 0) {
__enable_irq();
}
}
@@ -44,9 +44,9 @@ static void uart_ring_buffer_reset_state(void) {
* @ingroup RingBuffer
*/
void uart_ring_buffer_init(void) {
uint32_t irq_key = irq_save();
uint32_t primask = irq_save();
uart_ring_buffer_reset_state();
irq_restore(irq_key);
irq_restore(primask);
}
/**
@@ -105,9 +105,9 @@ bool uart_ring_buffer_put(uint8_t data) {
* @ingroup RingBuffer
*/
void uart_ring_buffer_clear(void) {
uint32_t irq_key = irq_save();
uint32_t primask = irq_save();
uart_ring_buffer_reset_state();
irq_restore(irq_key);
irq_restore(primask);
}
/**