drv_dma.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /******************************************************************//**
  2. * @file drv_dma.c
  3. * @brief USART driver of RT-Thread RTOS for EFM32
  4. * COPYRIGHT (C) 2011, RT-Thread Development Team
  5. * @author onelife
  6. * @version 0.4 beta
  7. **********************************************************************
  8. * @section License
  9. * The license and distribution terms for this file may be found in the file LICENSE in this
  10. * 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. *********************************************************************/