Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.sci.electronics > #193089

STM32 Hal-Driver ADC-DMA Interrupt

From Michael S <michaely@bigfoot.de>
Newsgroups de.sci.electronics
Subject STM32 Hal-Driver ADC-DMA Interrupt
Date 2015-09-29 10:07 +0200
Message-ID <d6uv5vF54qaU1@mid.individual.net> (permalink)

Show all headers | View raw


Hi,
ich habe hier ein STM32-Projekt, bei dem ein Timer zyklisch eine 
ADC-Sequenz auslöst. Die Ergebnisse der 4 Kanäle sollen per DMA ins RAM 
geschrieben werden. Ich arbeite außerdem mit CubeMX.
Im DMA-Interrupt sollen die Daten dann weiter verarbeitet werden.

Der DMA-Interrupt sieht derzeit so aus:

void DMA2_Stream0_IRQHandler(void)
{
   /* USER CODE BEGIN DMA2_Stream0_IRQn 0 */

   HAL_GPIO_WritePin(DBG5_GPIO_PORT, DBG5_GPIO_PIN, 1);
   HAL_ADC_Stop_DMA(&hadc1);
   __HAL_DMA_CLEAR_FLAG(&hdma_adc1,
             __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1));

   RegulatorTask(GROUP_CD);

   /* USER CODE END DMA2_Stream0_IRQn 0 */
   HAL_DMA_IRQHandler(&hdma_adc1);
   /* USER CODE BEGIN DMA2_Stream0_IRQn 1 */

   // Starte neue Messung

   HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC1_DMA_Data, 4);
   //deaktiviere Half Transfer Interrupt
   //(Treiber aktiviert den grundsätzlich)
   __HAL_DMA_DISABLE_IT(&hdma_adc1, DMA_IT_HT);
   //lösche das Half Transfer Interrupt-Flag
   __HAL_DMA_CLEAR_FLAG(&hdma_adc1,
             __HAL_DMA_GET_HT_FLAG_INDEX(&hdma_adc1));

   HAL_GPIO_WritePin(DBG5_GPIO_PORT, DBG5_GPIO_PIN, 0);

   /* USER CODE END DMA2_Stream0_IRQn 1 */
}

Nun habe ich das Problem, dass immer ein Half-Transfer und ein
Transfer-Complete Interrupt ausgelöst wird. Den Half-Transfer-Interrupt
benötige ich nicht und könnte ihn deshalb deaktivieren.
Leider sieht der HAL-Treiber das nicht vor. In der Funktion
HAL_DMA_Start_IT() werden grundsätzlich alle 5 DMA-Interrupts aktiviert.
Diese Funktion wird wiederum vom oben verwendeten HAL_ADC_Start_DMA() 
aufgerufen.

Muss ich nun am Treiber vorbeiprogrammieren, um das zu ändern?

Ich könnte den Treiber ändern, jedoch führt jede Änderung im CubeMX
dazu, dass der Treiber wieder auf den Originalstand gebracht wird.


-- 
Michael

Back to de.sci.electronics | Previous | Next | Find similar | Unroll thread


Thread

STM32 Hal-Driver ADC-DMA Interrupt Michael S <michaely@bigfoot.de> - 2015-09-29 10:07 +0200

csiph-web