使用的是spi dma host模式,代码如下
void TestDmaMaster()
{
u8 TxData[32];
for(u8 i = 0;i < 32;i++)
TxData[i] = 0xA0 + i;
Spi2_InitMaster();
SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE); //使能SPI的DMA功能
DMA_Tx_Init(DMA1_Channel5, (u32)&SPI2->DATAR, (u32)(TxData), 32); //配置SPI对应的DMA
while (1)
{
printf("Send\r\n");
DMA_Cmd(DMA1_Channel5,ENABLE); //开启DMA传输
while(DMA_GetFlagStatus(DMA1_FLAG_TC5) == RESET);//等待传输完成
DMA_Cmd(DMA1_Channel5,DISABLE); //关闭DMA
DMA_ClearFlag(DMA1_FLAG_TC5); //清除标志
Delay_Ms(1000);
}
}
结果显示,第一次发送是发送出去了,但是从第二次发送就阻塞住了,停在这个循环里
while(DMA_GetFlagStatus(DMA1_FLAG_TC5) == RESET);//等待传输完成
请问spi host模式也能被阻塞吗?从机又不会返回类似ACK那样的信号它怎么判断从机有没有接收呢?
我这个实验是没有从机的,spi的各个引脚都是悬空的
另外一个问题,就是spi dma通讯,主从两边都用dma模式可以吗?我看到的例子都是一边用dma,另一边不用的