關(guān)于CH582F的SPI多從機(jī)通訊的問(wèn)題

幾個(gè)582F設(shè)置成SPI從機(jī)模式


調(diào)用這個(gè)函數(shù)發(fā)送數(shù)據(jù),

SPI0_SlaveDMATrans(spiBuffrev, 12);


請(qǐng)問(wèn)從機(jī)的DMA發(fā)送是否有回調(diào)函數(shù)呢?

我擔(dān)心SPI主機(jī)端并沒(méi)有及時(shí)操作接收,

但是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就意味著一定會(huì)等待主機(jī)執(zhí)行完這次操作,

如果while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END)); 這個(gè)條件一定等不到會(huì)怎么樣呢?582F會(huì)在這等一萬(wàn)年嗎?




你好,數(shù)據(jù)發(fā)送完成可以查詢寄存器標(biāo)志位。需要判斷接收完成,可以自行配置主機(jī)端接收完成并返回一個(gè)ack信號(hào)。

傳輸完成標(biāo)志位,在函數(shù)里面是有手動(dòng)寫(xiě)1清除標(biāo)志的:

R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END | RB_SPI_IF_DMA_END;




只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频