几个582F设置成SPI从机模式
调用这个函数发送数据,
SPI0_SlaveDMATrans(spiBuffrev, 12);
请问从机的DMA发送是否有回调函数呢?
我担心SPI主机端并没有及时操作接收,
但是582F又想发新的数据,怎么办?
几个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;