feat(GD32E50X_BOOT): 集成SPIv2命令,并添加头文件路径配置
- 添加spi_link_v2.cpp到项目中,分组为spi_link - 新增G:/Robot_v2/DCU/spi_link目录到编译器包含路径 - 优化项目结构以支持SPI通信功能
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user