1
0

drv_dma.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /***************************************************************************//**
  2. * @file drv_dma.c
  3. * @brief DMA driver of RT-Thread RTOS for EFM32
  4. * COPYRIGHT (C) 2012, RT-Thread Development Team
  5. * @author onelife
  6. * @version 1.0
  7. *******************************************************************************
  8. * @section License
  9. * The license and distribution terms for this file may be found in the file
  10. * LICENSE in this distribution or at http://www.rt-thread.org/license/LICENSE
  11. *******************************************************************************
  12. * @section Change Logs
  13. * Date Author Notes
  14. * 2010-12-23 onelife Initial creation for EFM32
  15. ******************************************************************************/
  16. /***************************************************************************//**
  17. * @addtogroup efm32
  18. * @{
  19. ******************************************************************************/
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "board.h"
  22. #include "drv_dma.h"
  23. /* Private typedef -----------------------------------------------------------*/
  24. /* Private define ------------------------------------------------------------*/
  25. /* Private macro -------------------------------------------------------------*/
  26. /* Private variables ---------------------------------------------------------*/
  27. /** DMA control block, requires proper alignment. */
  28. #if defined (__ICCARM__)
  29. #pragma data_alignment=256
  30. DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2];
  31. #elif defined (__CC_ARM)
  32. DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256)));
  33. #elif defined (__GNUC__)
  34. DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256)));
  35. #else
  36. #error Undefined toolkit, need to define alignment
  37. #endif
  38. /* Private function prototypes -----------------------------------------------*/
  39. /* Private functions ---------------------------------------------------------*/
  40. /***************************************************************************//**
  41. * @brief
  42. * Initialize DMA hardware
  43. *
  44. * @details
  45. *
  46. * @note
  47. ******************************************************************************/
  48. void rt_hw_dma_init(void)
  49. {
  50. DMA_Init_TypeDef dmaInit;
  51. /* Reset */
  52. DMA_Reset();
  53. dmaInit.hprot = 0;
  54. dmaInit.controlBlock = (DMA_DESCRIPTOR_TypeDef *)&dmaControlBlock;
  55. DMA_Init(&dmaInit);
  56. NVIC_SetPriority(DMA_IRQn, EFM32_IRQ_PRI_DEFAULT);
  57. }
  58. /***************************************************************************//**
  59. * @}
  60. ******************************************************************************/