幾個582F設(shè)置成SPI從機模式
調(diào)用這個函數(shù)發(fā)送數(shù)據(jù),
SPI0_SlaveDMATrans(spiBuffrev, 12);
請問從機的DMA發(fā)送是否有回調(diào)函數(shù)呢?
我擔心SPI主機端并沒有及時操作接收,
但是582F又想發(fā)新的數(shù)據(jù),怎么辦?
幾個582F設(shè)置成SPI從機模式
調(diào)用這個函數(shù)發(fā)送數(shù)據(jù),
SPI0_SlaveDMATrans(spiBuffrev, 12);
請問從機的DMA發(fā)送是否有回調(diào)函數(shù)呢?
我擔心SPI主機端并沒有及時操作接收,
但是582F又想發(fā)新的數(shù)據(jù),怎么辦?
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;
}
是不是調(diào)用SPI0_SlaveDMARecv就意味著一定會等待主機執(zhí)行完這次操作,
如果while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END)); 這個條件一定等不到會怎么樣呢?582F會在這等一萬年嗎?
你好,數(shù)據(jù)發(fā)送完成可以查詢寄存器標志位。需要判斷接收完成,可以自行配置主機端接收完成并返回一個ack信號。
傳輸完成標志位,在函數(shù)里面是有手動寫1清除標志的:
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END | RB_SPI_IF_DMA_END;