使用的是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對應(yīng)的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);? ? ? ? ? ? ? ? ? ?//關(guān)閉DMA
? ? ? ? DMA_ClearFlag(DMA1_FLAG_TC5);? ? ? ? ? ? ? ? ? ? ?//清除標志
? ? ? ? Delay_Ms(1000);
? ? }
}
結(jié)果顯示,第一次發(fā)送是發(fā)送出去了,但是從第二次發(fā)送就阻塞住了,停在這個循環(huán)里
while(DMA_GetFlagStatus(DMA1_FLAG_TC5) == RESET);//等待傳輸完成
請問spi host模式也能被阻塞嗎?從機又不會返回類似ACK那樣的信號它怎么判斷從機有沒有接收呢?
我這個實驗是沒有從機的,spi的各個引腳都是懸空的
另外一個問題,就是spi dma通訊,主從兩邊都用dma模式可以嗎?我看到的例子都是一邊用dma,另一邊不用的