From a95d728fc36f0d96c08a78b6af543a440217d3a4 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 31 Oct 2009 15:22:27 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1259 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/io/platforms/STM32/stm32_dma.c | 89 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 os/io/platforms/STM32/stm32_dma.c (limited to 'os/io/platforms/STM32/stm32_dma.c') diff --git a/os/io/platforms/STM32/stm32_dma.c b/os/io/platforms/STM32/stm32_dma.c new file mode 100644 index 000000000..d78a058d9 --- /dev/null +++ b/os/io/platforms/STM32/stm32_dma.c @@ -0,0 +1,89 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file stm32_dma.c + * @brief STM32 DMA helper driver code + * @addtogroup STM32_DMA + * @{ + */ + +#include + +#include "stm32_dma.h" + +static cnt_t dmacnt1; +#if defined(STM32F10X_HD) || defined (STM32F10X_CL) +static cnt_t dmacnt2; +#endif + +/** + * @brief STM32 DMA helper initialization. + */ +void dmaInit(void) { + + dmacnt1 = 0; +#if defined(STM32F10X_HD) || defined (STM32F10X_CL) + dmacnt2 = 0; +#endif +} + +/** + * @brief Enables the specified DMA controller clock. + * + * @param[in] dma the DMA controller id + */ +void dmaEnable(uint32_t dma) { + + switch (dma) { + case DMA1_ID: + if (dmacnt1++ == 0) + RCC->AHBENR |= RCC_AHBENR_DMA1EN; + break; +#if defined(STM32F10X_HD) || defined (STM32F10X_CL) + case DMA2_ID: + if (dmacnt2++ == 0) + RCC->AHBENR |= RCC_AHBENR_DMA2EN; + break; +#endif + } +} + +/** + * @brief Disables the specified DMA controller clock. + * + * @param[in] dma the DMA controller id + */ +void dmaDisable(uint32_t dma) { + + switch (dma) { + case DMA1_ID: + if (--dmacnt1 == 0) + RCC->AHBENR &= ~RCC_AHBENR_DMA1EN; + break; +#if defined(STM32F10X_HD) || defined (STM32F10X_CL) + case DMA2_ID: + if (--dmacnt2 == 0) + RCC->AHBENR &= ~RCC_AHBENR_DMA2EN; + break; +#endif + } +} + +/** @} */ -- cgit v1.2.3