DMAを使用してSPIスレーブデバイスから固定バイト数(合計27バイト)を読み取ろうとしています。私はSTM32F4チップを実行しています。DMA循環モードを使用してSPIダミーバイトを書き込む
"SPIバスから読み込むには、クロックを生成する必要があります。したがって、読み込むために書き込む必要があります。私は循環モードでダミーバイト(0xFF)を書き込むように私のDMAコントローラを設定しました。
uint8_t tx_buffer[] = {0xFF};
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
DMA_InitStruct.DMA_BufferSize = 1;
DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)tx_buffer;
と私のRx DMAストリームは、ダブルバッファモード使用してセットアップです:転送完了割り込みがある受信された27バイトの後
uint8_t rx_buffer0[27];
uint8_t rx_buffer1[27];
DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;
DMA_InitStruct.DMA_BufferSize = 27;
DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)rx_buffer0;
DMA_DoubleBufferModeConfig(DMA2_Stream0, (uint32_t)rx_buffer1, DMA_Memory_0);
DMA_DoubleBufferModeCmd(DMA2_Stream0, ENABLE);
(私は他の無関係なinitialisationsを省略している。)
をトリガーされた。
void DMA2_Stream0_IRQHandler(void)
{
if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0) == SET)
{
DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0);
DMA_Cmd(DMA2_Stream1, DISABLE); // disable Tx circular writes
}
}
問題は次のとおりです。最初のバッファに正しいデータが表示されます。しかし、割込みがTx循環DMAをトリガしている間、第2のバッファの最初の数バイトは、それがディスエーブルされるまで満たす。
ダミーデータ用に27バイトの予約を避けたいのですが、固定量のサイクルの後に循環DMAストリームを停止する方法はありますか?