drv_dma.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2010-12-23 onelife Initial creation for EFM32
  9. */
  10. /***************************************************************************//**
  11. * @addtogroup efm32
  12. * @{
  13. ******************************************************************************/
  14. /* Includes ------------------------------------------------------------------*/
  15. #include "board.h"
  16. #include "drv_dma.h"
  17. /* Private typedef -----------------------------------------------------------*/
  18. /* Private define ------------------------------------------------------------*/
  19. /* Private macro -------------------------------------------------------------*/
  20. /* Private variables ---------------------------------------------------------*/
  21. /** DMA control block, requires proper alignment. */
  22. #if defined (__ICCARM__)
  23. #pragma data_alignment=256
  24. DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2];
  25. #elif defined (__CC_ARM)
  26. DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256)));
  27. #elif defined (__GNUC__)
  28. DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256)));
  29. #else
  30. #error Undefined toolkit, need to define alignment
  31. #endif
  32. /* Private function prototypes -----------------------------------------------*/
  33. /* Private functions ---------------------------------------------------------*/
  34. /***************************************************************************//**
  35. * @brief
  36. * Initialize DMA hardware
  37. *
  38. * @details
  39. *
  40. * @note
  41. ******************************************************************************/
  42. void rt_hw_dma_init(void)
  43. {
  44. DMA_Init_TypeDef dmaInit;
  45. /* Reset */
  46. DMA_Reset();
  47. dmaInit.hprot = 0;
  48. dmaInit.controlBlock = (DMA_DESCRIPTOR_TypeDef *)&dmaControlBlock;
  49. DMA_Init(&dmaInit);
  50. NVIC_SetPriority(DMA_IRQn, EFM32_IRQ_PRI_DEFAULT);
  51. }
  52. /***************************************************************************//**
  53. * @}
  54. ******************************************************************************/