SPI0_MasterDMATrans

/*********************************************************************

 * @fn      SPI0_MasterDMATrans

 *

 * @brief   DMA方式连续发送数据

 *

 * @param   pbuf    - 待发送数据起始地址,需要四字节对其

 * @param   len     - 待发送数据长度

 *

 * @return  none

 */

void SPI0_MasterDMATrans(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;

}

有没有不用在这里死等的方式DMA传输?

    while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END));

    R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;


这里是查询数据发送是否完成,并在数据传输完成停止DMA。

可以通过查询的方式查看寄存器是否传输完成,并在传输完成后及时停止DMA即可。


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