Там же в том примере - отключаем канал DMA ( для последующей конфигурации)
Ждем освобождение FIFO, ждем BSY.
Отключаем SPI.
Далее (у меня в прерывании от таймера) :
Конфигурим канал DMA, включаем канал, включаем SPI.
Код: Выделить всё
void TIM3_IRQHandler(void)
{
static volatile uint32_t ulTim3Cnt;
static volatile uint32_t ulPtntCnt;
if (TIM3->SR & TIM_SR_UIF)
{
TIM3->SR &= ~TIM_SR_UIF;
... CUT....
DMA1_Channel5->CNDTR=0x09;
DMA1_Channel5->CCR |=DMA_CCR_EN;
SPI2->CR1 |= SPI_CR1_SPE;
}
}
}Но это частный случай - регулярная посылка буфера .
Например с SD картой - тупо настраиваем каналы DMA на прием и передачу , включаем и ждем TCIF приемника...
Код: Выделить всё
#define SPIMMC_DMA_CHANNEL_RX DMA1_Channel2
#define SPIMMC_DMA_CHANNEL_TX DMA1_Channel3
....CUT....
/* SPI_DMA_TX configuration SPI_MMC RX ---------------------------------------------*/
SPIMMC_DMA_CHANNEL_RX->CMAR =(uint32_t)(&rw_dummybyte);
SPIMMC_DMA_CHANNEL_RX->CPAR =(uint32_t)(&(SPIMMC->DR));
SPIMMC_DMA_CHANNEL_RX->CNDTR =btr;
SPIMMC_DMA_CHANNEL_RX->CCR=0;
SPIMMC_DMA_CHANNEL_RX->CCR |=
DMA_CCR_PL
//DMA_CCR_MSIZE_0|
//DMA_CCR_PSIZE_0 |
//DMA_CCR_MINC
//DMA_CCR_CIRC|
//DMA_CCR_DIR
;
/* SPI_DMA_TX configuration SPI_MMC TX ---------------------------------------------*/
SPIMMC_DMA_CHANNEL_TX->CMAR =(uint32_t)buff;
SPIMMC_DMA_CHANNEL_TX->CPAR =(uint32_t)(&(SPIMMC->DR));
SPIMMC_DMA_CHANNEL_TX->CNDTR =btr;
SPIMMC_DMA_CHANNEL_TX->CCR=0;
SPIMMC_DMA_CHANNEL_TX->CCR |=
DMA_CCR_PL|
//DMA_CCR_MSIZE_0|
//DMA_CCR_PSIZE_0 |
DMA_CCR_MINC |
//DMA_CCR_CIRC|
DMA_CCR_DIR
;
}
/* Enable SPI_MMC TX/RX request */
SPIMMC->CR2 |= (SPI_CR2_RXDMAEN |SPI_CR2_TXDMAEN);
/* Enable SPI_DMA_RX & TX */
DMA1_Channel3->CCR |= DMA_CCR_EN;
DMA1_Channel2->CCR |= DMA_CCR_EN;
/* Wait until SPI_DMA_RX Complete */
while(!(DMA1->ISR & DMA_ISR_TCIF2)){};
/* Disable SPI_DMA_TX/RX */
DMA1_Channel3->CCR &= ~DMA_CCR_EN;
DMA1_Channel2->CCR &= ~DMA_CCR_EN;
SPIMMC->CR2 &= ~(SPI_CR2_RXDMAEN |SPI_CR2_TXDMAEN);
/* Clear DMA_FSMC Transfer/ReceiveComplete Flag */
DMA1->IFCR |= DMA_IFCR_CTCIF2 |DMA_IFCR_CTCIF3;




