Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifdef USE_DMA
- inline void sFLASH_DMA_Init(void) {
- /* Enable the DMA peripheral */
- sFLASH_DMA_CLK_ENR |= sFLASH_DMA_CLK;
- // Set DMA peripheral addres
- sFLASH_DMA_TX_STREAM->CPAR = (uint32_t)&(sFLASH_SPI->DR);
- sFLASH_DMA_RX_STREAM->CPAR = (uint32_t)&(sFLASH_SPI->DR);
- }
- void sFLASH_DMA_End(void){
- // Wait until the data is received
- while ((sFLASH_DMA->sFLASH_DMA_ISR & sFLASH_DMA_RX_FLAG_TC) == RESET)
- ;
- //Disable the DMAs
- sFLASH_DMA_TX_STREAM->CCR = 0; // TX
- sFLASH_DMA_RX_STREAM->CCR = 0; // RX
- //Clear DMA flags
- sFLASH_DMA->sFLASH_DMA_IFCR = sFLASH_DMA_TX_FLAG_GL | sFLASH_DMA_RX_FLAG_GL;
- }
- void sFLASH_DMA_Tx(uint32_t cmdLen, const uint8_t *cmdBuf) {
- //Настраиваем и включаем нелепый поглотитель мусорных данных
- sFLASH_DMA_RX_STREAM->CNDTR = cmdLen;
- sFLASH_DMA_RX_STREAM->CMAR = (uint32_t) &trash;
- #ifdef STM32F40_41xxx
- sFLASH_DMA_RX_STREAM->CCR = DMA_CCR_EN | sFLASH_DMA_RX_CHANNEL;
- #else
- sFLASH_DMA_RX_STREAM->CCR = DMA_CCR_EN; // RX
- #endif
- //Настраиваем и запускаем передачу
- sFLASH_DMA_TX_STREAM->CNDTR = cmdLen;
- sFLASH_DMA_TX_STREAM->CMAR = (uint32_t) cmdBuf;
- #ifdef STM32F40_41xxx
- sFLASH_DMA_TX_STREAM->CCR = DMA_CCR_EN | DMA_CCR_MINC | DMA_SxCR_DIR_0 | sFLASH_DMA_TX_CHANNEL;
- #else
- sFLASH_DMA_TX_STREAM->CCR = DMA_CCR_EN | DMA_CCR_MINC | DMA_CCR_DIR;
- #endif
- sFLASH_DMA_End();
- }
- void sFLASH_DMA_Rx(uint32_t dataLen, uint8_t *dataBuf) {
- // Prepare the DMA TX and RX
- sFLASH_DMA_RX_STREAM->CNDTR = dataLen;
- sFLASH_DMA_RX_STREAM->CMAR = (uint32_t) dataBuf;
- #ifdef STM32F40_41xxx
- sFLASH_DMA_RX_STREAM->CCR = DMA_CCR_EN | DMA_CCR_MINC | sFLASH_DMA_RX_CHANNEL;
- #else
- sFLASH_DMA_RX_STREAM->CCR = DMA_CCR_EN | DMA_CCR_MINC;
- #endif
- //Настраиваем и запускаем передачу
- sFLASH_DMA_TX_STREAM->CNDTR = dataLen;
- sFLASH_DMA_TX_STREAM->CMAR = (uint32_t) &dummy;
- #ifdef STM32F40_41xxx
- sFLASH_DMA_TX_STREAM->CCR = DMA_CCR_EN | DMA_SxCR_DIR_0 | sFLASH_DMA_TX_CHANNEL;
- #else
- sFLASH_DMA_TX_STREAM->CCR = DMA_CCR_EN | DMA_CCR_DIR;
- #endif
- sFLASH_DMA_End();
- }
- #endif /* USE_DMA */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement