关于CH582F的SPI多从机通讯的问题

几个582F设置成SPI从机模式


调用这个函数发送数据,

SPI0_SlaveDMATrans(spiBuffrev, 12);


请问从机的DMA发送是否有回调函数呢?

我担心SPI主机端并没有及时操作接收,

但是582F又想发新的数据,怎么办?



void SPI0_SlaveDMARecv(uint8_t *pbuf, uint16_t len)

{

    R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR;

    R16_SPI0_DMA_BEG = (uint32_t)pbuf;

    R16_SPI0_DMA_END = (uint32_t)(pbuf + len);

    R16_SPI0_TOTAL_CNT = len;

    R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END | RB_SPI_IF_DMA_END;

    R8_SPI0_CTRL_CFG |= RB_SPI_DMA_ENABLE;

    while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END));

    R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;

}


是不是调用SPI0_SlaveDMARecv就意味着一定会等待主机执行完这次操作,

如果while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END)); 这个条件一定等不到会怎么样呢?582F会在这等一万年吗?




你好,数据发送完成可以查询寄存器标志位。需要判断接收完成,可以自行配置主机端接收完成并返回一个ack信号。

传输完成标志位,在函数里面是有手动写1清除标志的:

R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END | RB_SPI_IF_DMA_END;




只有登录才能回复,可以选择微信账号登录