Jump to content

    

ur5cuj

Участник
  • Content Count

    121
  • Joined

  • Last visited

Community Reputation

0 Обычный

About ur5cuj

  • Rank
    Частый гость
  • Birthday 12/26/1970

Информация

  • Город
    Array
  1. stm32f411 spi1+DMA

    как тогда организовать процесс? если есть мысли, буду благодарен!!!
  2. stm32f411 spi1+DMA

    Вроде зашевелилось!!! Появилась выдача в SPI, но тут подкралось НО! как теперь определять, что мнфа из одного из массивов уже ушла полностью и пора готовить второй массив с данными?
  3. stm32f411 spi1+DMA

    Вопрос о правильной передаче параметра - решен!
  4. stm32f411 spi1+DMA

    Сергей Борщ - спасибо, внял вашему совету!!! (uintptr_t)Buffer1TX_SPI1 - полечило варнинг :)
  5. stm32f411 spi1+DMA

    даже если прописать: DMA_DoubleBufferModeConfig(DMA2_Stream5, Buffer1TX_SPI1, DMA_Memory_0); что собственно не является ошибкой, получается такой же варнинг: warning: passing argument 2 of 'DMA_DoubleBufferModeConfig' makes integer from pointer without a cast [-Wint-conversion] так что только так передавать: Buffer1TX_SPI1[0]
  6. stm32f411 spi1+DMA

    если прописать: DMA_DoubleBufferModeConfig(DMA2_Stream5, &Buffer1TX_SPI1, DMA_Memory_0); вываливает варнинг: warning: passing argument 2 of 'DMA_DoubleBufferModeConfig' makes integer from pointer without a cast [-Wint-conversion]
  7. stm32f411 spi1+DMA

    Инит ДМА вот такой: 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_Circular; 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 = (uint8_t)(configKERNEL_INTERRUPT_PRIORITY >> 4); NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init ( &NVIC_InitStructure ); SPI_I2S_ITConfig ( SPIx, SPI_I2S_IT_TXE, ENABLE ); DMA_DoubleBufferModeConfig(DMA2_Stream5, Buffer1TX_SPI1[0], DMA_Memory_0); //первый массив для выдачи DMA_DoubleBufferModeConfig(DMA2_Stream5, Buffer2TX_SPI1[0], DMA_Memory_1); //второй массив для выдачи DMA_DoubleBufferModeCmd ( DMA2_Stream5, ENABLE ); SPI_I2S_DMACmd ( SPI_DMA_MASTER, SPI_I2S_DMAReq_Tx, ENABLE ); DMA_ITConfig ( SPI_DMA_MASTER_Tx_DMA_Stream, DMA_IT_TC, ENABLE ); } обработчик прерывания: void DMA2_Stream5_IRQHandler ( void ) { portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; // Stream3 transfer complete interrupt? if(DMA_GetITStatus (SPIx_TX_DMA_STREAM,SPI_DMA_MASTER_Tx_DMA_IT)) { // clear pending interrupt DMA_ClearITPendingBit (SPIx_TX_DMA_STREAM,SPI_DMA_MASTER_Tx_DMA_IT); if(DMA_GetCurrentMemoryTarget (SPIx_TX_DMA_STREAM)) { // Memory 1 is current target DMA_MemoryTargetConfig (SPIx_TX_DMA_STREAM,Buffer2TX_SPI1[0],DMA_Memory_0); } else { // Memory 0 is current target DMA_MemoryTargetConfig(SPIx_TX_DMA_STREAM,Buffer1TX_SPI1[0],DMA_Memory_1); } } xSemaphoreGiveFromISR ( xSemaphore_spi1, &xHigherPriorityTaskWoken ); xTaskResumeFromISR (&xHandleSPI1); portEND_SWITCHING_ISR ( xHigherPriorityTaskWoken ); } ну а запускается всё вот так: ukladkabufTXSPI1 ( Buffer1TX_SPI1 );//заполнение первого массива инфой ukladkabufTXSPI1 ( Buffer2TX_SPI1 );//заполнение второго массива инфой DMA_Cmd ( SPI_DMA_MASTER_Tx_DMA_Stream, ENABLE ); и всё это Не работает, ЧЯДНТ?
  8. stm32f411 spi1+DMA

    DMA_Mode_Circular у меня работает, но это чисто для отладки Вч части, так как постоянно выдаётся таблица из флеши, а мне нужно готовить данные т.е. модулировать исходные данные процессором для подачи в ВЧ модулятор, где уже будет этот поток модулироваться несущей для излучения в антенну.
  9. stm32f411 spi1+DMA

    у меня данные байтовые, т.е. и выдача в SPI байтовая и строго выдержанная тактовая в 1 МГц, но это уже в настройках самого SPI реализовано. в F411 есть интереный момент Double Buffer mode DMA, вот только примеров как это заюзать нет, а у меня не хочет работать :(
  10. stm32f411 spi1+DMA

    Ребят, канешна спасибо за инфу, очень пригодится в будущем, но тема про SPI+DMA, точнее double buffer DMA+SPI, задача- необходимо реализовать непрерывный вывод в TX SPI потока данных, которые потом поступают на ВЧ модулятор и ессно потом на антенну, т.е. своеобразный передатчик, а непрерывная выдача необходима для того, что бы небыло так называемой "разрыва фазы", что бы приемник мог принять и демодулировать инфу. Вот помогли бы мне с этим, буду премного благодарен!
  11. stm32f411 spi1+DMA

    А разве прерывание: SPI_I2S_IT_TXE: Tx buffer empty interrupt mask это не оно? т.е. по опустошению передающего буфера генерится прерывание и сраюатывает этотфлаг
  12. stm32f411 spi1+DMA

    По Вашим ссылкам на обсуждение: - из Вашего кода: NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = (uint8_t)(configKERNEL_INTERRUPT_PRIORITY >> 4); это обкатано?
  13. stm32f411 spi1+DMA

    какой уровень посоветуете установить? Имею ввиду конкретную цифру.
  14. stm32f411 spi1+DMA

    ничего криминального не вижу, увы :( если что то есть, подскажите плиз.