реклама на сайте
подробности

 
 
> stm32f411 spi1+DMA, непрерывная выдача данных
Volldemar
сообщение Aug 31 2017, 12:24
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 27-04-09
Из: Украина
Пользователь №: 48 342



Привожу код что и как делаю, вопрос в том, что в прерывание ДМА входит, а вот уже в обработчике прерывания в if не входити ессно нет переключения между массивами, что не так?Надеюсь на конструктивный диалог, заранее спасибо.
Код
void DMA2_Stream5_IRQHandler ( void )
{
    uart2_putcharPoll ( 'I' );//, xNoBlock );

    portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

    if ( DMA_GetITStatus ( SPI_DMA_MASTER_Tx_DMA_Stream, DMA_IT_TCIF5 ) == SET )
    {
        uart2_putcharPoll ( 'F' );//, xNoBlock );

//         Clear DMA Stream Transfer Complete interrupt pending bit

        if ( CurrentBufSPI1 == buf1 )
        {
            CurrentBufSPI1 = buf2;
            uart2_putcharPoll ( '2' );//, xNoBlock );
        }

        if ( CurrentBufSPI1 == buf2 )
        {
            CurrentBufSPI1 = buf1;
            uart2_putcharPoll ( '1' );//, xNoBlock );
        }
        DMA_Cmd ( SPI_DMA_MASTER_Tx_DMA_Stream, DISABLE );
        DMA_ClearITPendingBit ( SPI_DMA_MASTER_Tx_DMA_Stream, DMA_IT_TCIF5 );
    }
    xSemaphoreGiveFromISR ( xSemaphore_spi1, &xHigherPriorityTaskWoken );
    xTaskResumeFromISR (&xHandleSPI1);
    uart2_putcharPoll ( 'E' );//, xNoBlock );
    portEND_SWITCHING_ISR ( xHigherPriorityTaskWoken );
}


Код
void Task_SPI1 ( void *pvParameters )
{
    xSemaphoreTake ( xSemaphore_spi1, portMAX_DELAY );

    for (;; )
    {
        if ( CurrentBufSPI1 == buf1 )
        {
            ukladkabufTXSPI1 ( Buffer1TX_SPI1 );

            DMA_Config ( Buffer1TX_SPI1, indexTX*8 );
        }
        if ( CurrentBufSPI1 == buf2 )
                {
            ukladkabufTXSPI1 ( Buffer2TX_SPI1 );

            DMA_Config ( Buffer2TX_SPI1, indexTX*8 );
        }
            vTaskSuspend ( &xHandleSPI1 );

    }
}

Код
[/code]void DMA_Config ( uint8_t * Memory0BaseAddr, uint16_t size )
{
    DMA_InitTypeDef        DMA_InitStructure;
    NVIC_InitTypeDef    NVIC_InitStructure;

    // Сброс настроек DMA каналов
    DMA_DeInit ( SPI_DMA_MASTER_Tx_DMA_Stream );

    RCC_AHB1PeriphClockCmd ( SPI_DMA_MASTER_DMA_CLK, ENABLE );

    DMA_DeInit(SPIx_TX_DMA_STREAM);
    /* Configure DMA Initialization Structure */
      DMA_InitStructure.DMA_BufferSize = size;
      DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
      DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
      DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
      DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
      DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t) (&(SPIx->DR));
      DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
      DMA_InitStructure.DMA_Priority = DMA_Priority_High;
      /* Configure TX DMA */
      DMA_InitStructure.DMA_Channel = SPIx_TX_DMA_CHANNEL;
      DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
      DMA_InitStructure.DMA_Memory0BaseAddr =(uint32_t)Memory0BaseAddr;
      DMA_Init(SPIx_TX_DMA_STREAM, &DMA_InitStructure);

    // Configure the DMA interrupt priority
    NVIC_InitStructure.NVIC_IRQChannel = DMAx_Streamx_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init ( &NVIC_InitStructure );

    SPI_I2S_ITConfig ( SPIx, SPI_I2S_IT_TXE, ENABLE );

    DMA_ClearITPendingBit ( SPI_DMA_MASTER_Tx_DMA_Stream, SPI_DMA_MASTER_Tx_DMA_IT );
    DMA_ClearFlag ( SPI_DMA_MASTER_Tx_DMA_Stream, SPI_DMA_MASTER_Tx_DMA_FLAG );

    SPI_I2S_DMACmd ( SPI_DMA_MASTER, SPI_I2S_DMAReq_Tx, ENABLE );
    DMA_ITConfig ( SPI_DMA_MASTER_Tx_DMA_Stream, DMA_IT_TC, ENABLE );
    DMA_Cmd ( SPI_DMA_MASTER_Tx_DMA_Stream, ENABLE );
}


знаю есть режим дабл-буфер в f411, но как его заюзать на SPL?
дефайны:
Код
#define SPI_DMA_MASTER                    SPI1
#define SPI_DMA_MASTER_DMA                DMA2
#define SPI_DMA_MASTER_DMA_CLK            RCC_AHB1Periph_DMA2
#define SPI_DMA_MASTER_Tx_DMA_Stream    DMA2_Stream5
#define SPI_DMA_MASTER_Tx_DMA_Channel    DMA_Channel_3
#define SPI_DMA_MASTER_Tx_DMA_FLAG        DMA_FLAG_TCIF5
#define SPI_DMA_MASTER_Tx_DMA_IT        DMA_IT_TCIF5
#define DMAx_Streamx_IRQn                DMA2_Stream5_IRQn

#define SPIx_DMA                        DMA2
#define SPIx_DMA_CLK                    RCC_AHB1Periph_DMA2
#define SPIx_TX_DMA_CHANNEL             DMA_Channel_3
#define SPIx_TX_DMA_STREAM              DMA2_Stream5
#define SPIx_TX_DMA_FLAG_TCIF           DMA_FLAG_TCIF5


Сообщение отредактировал Volldemar - Aug 31 2017, 12:53
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Volldemar   stm32f411 spi1+DMA   Aug 31 2017, 12:24
- - AHTOXA   После if ( CurrentBufSPI1 == buf1 ) нужен else. Ин...   Aug 31 2017, 17:59
|- - Volldemar   Цитата(AHTOXA @ Aug 31 2017, 20:59) После...   Sep 1 2017, 06:06
|- - AHTOXA   Код#define SPI_DMA_MASTER_Tx_DMA_Channel DMA_Chann...   Sep 1 2017, 15:07
|- - Сергей Борщ   QUOTE (AHTOXA @ Sep 1 2017, 18:07) Вы зап...   Sep 1 2017, 15:43
|- - AHTOXA   А, точно, забыл уже, что там ещё один уровень доба...   Sep 1 2017, 19:47
- - adnega   Цитата(Volldemar @ Aug 31 2017, 15:24) На...   Sep 1 2017, 19:56
|- - Volldemar   Цитата(adnega @ Sep 1 2017, 22:56) Похоже...   Sep 4 2017, 05:58
|- - adnega   Цитата(Volldemar @ Sep 4 2017, 08:58) я о...   Sep 4 2017, 06:12
|- - Volldemar   Цитата(adnega @ Sep 4 2017, 09:12) А как ...   Sep 4 2017, 06:15
|- - adnega   Цитата(Volldemar @ Sep 4 2017, 09:15) нич...   Sep 4 2017, 06:58
|- - Volldemar   Цитата(adnega @ Sep 4 2017, 09:58) Вы исп...   Sep 4 2017, 07:19
|- - adnega   Цитата(Volldemar @ Sep 4 2017, 10:19) как...   Sep 4 2017, 08:29
|- - Volldemar   Цитата(adnega @ Sep 4 2017, 11:29) О, я р...   Sep 4 2017, 09:17
- - Hold   У себя делал так, на STM32F4x9: CODE #include ...   Sep 4 2017, 10:32
|- - Volldemar   [quote] Т.к. Stream автоматически выключается посл...   Sep 4 2017, 12:01
|- - Сергей Борщ   QUOTE (Hold @ Sep 4 2017, 13:32) Для одно...   Sep 4 2017, 12:02
|- - Volldemar   Цитата(Сергей Борщ @ Sep 4 2017, 15:02) Н...   Sep 4 2017, 12:09
||- - jcxz   Цитата(Volldemar @ Sep 4 2017, 15:09) это...   Sep 4 2017, 16:54
|- - Hold   Цитата(Сергей Борщ @ Sep 4 2017, 19:02) Н...   Sep 5 2017, 04:09
|- - Сергей Борщ   QUOTE (Hold @ Sep 5 2017, 07:09) Была уже...   Sep 5 2017, 06:13
- - Hold   SPI, по сравнению с I2C, еще относительно безглючн...   Sep 5 2017, 06:29
|- - adnega   Цитата(Hold @ Sep 5 2017, 09:29) какой-то...   Sep 5 2017, 06:37
|- - jcxz   Цитата(Hold @ Sep 5 2017, 09:29) SPI, по ...   Sep 5 2017, 06:58
|- - Hold   Цитата(jcxz @ Sep 5 2017, 13:58) При отсу...   Sep 5 2017, 08:18
- - Volldemar   Ребят, канешна спасибо за инфу, очень пригодится в...   Sep 5 2017, 07:23
|- - adnega   Цитата(Volldemar @ Sep 5 2017, 10:23) Вот...   Sep 5 2017, 07:56
||- - Volldemar   Цитата(adnega @ Sep 5 2017, 10:56) Значит...   Sep 5 2017, 08:12
||- - adnega   Цитата(Volldemar @ Sep 5 2017, 11:12) в F...   Sep 5 2017, 08:41
||- - Volldemar   Цитата(adnega @ Sep 5 2017, 11:41) Вам ну...   Sep 5 2017, 08:48
||- - adnega   Цитата(Volldemar @ Sep 5 2017, 11:48) DMA...   Sep 5 2017, 09:44
|- - Сергей Борщ   QUOTE (Volldemar @ Sep 5 2017, 10:23) т.е...   Sep 5 2017, 08:41
|- - jcxz   Цитата(Сергей Борщ @ Sep 5 2017, 11:41) К...   Sep 5 2017, 12:58
- - Volldemar   Инит ДМА вот такой: Кодvoid DMA_Config ( uint8...   Sep 5 2017, 11:22
- - Hold   Как минимум, в функцию DMA_DoubleBufferModeConfig(...   Sep 5 2017, 12:18
|- - Volldemar   Цитата(Hold @ Sep 5 2017, 15:18) Как мини...   Sep 5 2017, 12:20
|- - Сергей Борщ   QUOTE (Volldemar @ Sep 5 2017, 15:20) выв...   Sep 5 2017, 12:26
- - Volldemar   даже если прописать: КодDMA_DoubleBufferModeConfig...   Sep 5 2017, 12:35
|- - Сергей Борщ   QUOTE (Volldemar @ Sep 5 2017, 15:35) даж...   Sep 5 2017, 13:04
|- - Aleksandr Baranov   Цитата(Volldemar @ Sep 5 2017, 08:35) так...   Sep 5 2017, 16:39
|- - Volldemar   Цитата(Aleksandr Baranov @ Sep 5 2017, 19...   Sep 6 2017, 08:02
- - Volldemar   Сергей Борщ - спасибо, внял вашему совету!...   Sep 5 2017, 13:10
- - Volldemar   Вроде зашевелилось!!! Появилась выдача...   Sep 6 2017, 11:43
- - Aleksandr Baranov   Цитата(Volldemar @ Sep 6 2017, 07:43) Поя...   Sep 6 2017, 12:14
- - jcxz   Цитата(Volldemar @ Sep 6 2017, 14:43) Поя...   Sep 7 2017, 19:36
- - Volldemar   Цитата(jcxz @ Sep 7 2017, 22:36) Если воп...   Sep 8 2017, 13:29
- - jcxz   Цитата(Volldemar @ Sep 8 2017, 20:29) как...   Sep 8 2017, 15:27


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016