feat(GD32E50X_BOOT): 集成SPIv2命令,并添加头文件路径配置

- 添加spi_link_v2.cpp到项目中,分组为spi_link
- 新增G:/Robot_v2/DCU/spi_link目录到编译器包含路径
- 优化项目结构以支持SPI通信功能
This commit is contained in:
cbb
2026-07-13 03:10:55 +08:00
parent dfc12611ed
commit c644c29a4b
6 changed files with 534 additions and 254 deletions
+10 -5
View File
@@ -25,15 +25,16 @@ typedef enum {
/**
* @brief SPI 链路节奏控制状态机(与 DCU_APP AppSpiCommand::SpiLinkState 对齐)。
*
* BOOT 主动按铃(requestEsp32Read)后,必须等待 ESP32 读取完成
* (SPIready/PB6 上升沿,由 EXTI6 捕获)后才允许发起下一帧,
* 避免下降沿被 ESP32 ISR 在非 IDLE 态丢弃。
* v2 DATA_READY: ESP32 不再操作 PB6,EXTI6 上升沿信号源消失。
* canRingNow 总是返回 true,靠 requestEsp32Read 内部 s_ringPending
* 检查防止重复按铃;onEsp32Complete 改由 onCsRelease 的 ring pending
* 分支补充调用(ESP32 CS 完成即确认读走)。
*/
class SpiLinkState {
public:
bool canRingNow() const { return m_esp32Ready; } ///< 是否允许发起新按铃
bool canRingNow() const { return true; } ///< v2: 总是允许(s_ringPending 已防重复)
void onRingStart() { m_esp32Ready = false; } ///< 发起按铃时消费完成 flag
void onEsp32Complete() { m_esp32Ready = true; } ///< ESP32 releaseReady 上升沿触发(EXTI6 ISR 调用)
void onEsp32Complete() { m_esp32Ready = true; } ///< ESP32 CS 完成即确认读走(onCsRelease 调用)
void onRingTimeout() { m_esp32Ready = true; } ///< 按铃超时取消时允许重试
void reset() { m_esp32Ready = true; } ///< 初始化(首帧允许)
private:
@@ -81,6 +82,9 @@ public:
/** @brief 取消当前按铃请求,释放 SPIready。 */
static void cancelRing();
/** @brief 主循环入队 TX 后装载 DMA + 更新 DATA_READY(擦除中途刷 WAIT 用)。 */
static void servicePendingTx();
/** @brief 翻转 SPI Ready 握手引脚(PB6)电平。
* @param[in] ready true=就绪(HIGH), false=忙(LOW)。
* @note GPIO BSRR/BRR 写入原子,无需临界区;可由 ISR 与主循环共同调用。
@@ -130,6 +134,7 @@ extern "C" {
void spi_ota_init(void);
void spi_ota_poll(void);
void spi_ota_service_pending_tx(void);
void spi_ota_set_sender(OTAHandler *handler);
void spi_ota_on_cs_assert(void);
void spi_ota_on_cs_release(void);