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 /***************************************************************************//**
12  * @addtogroup efm32
13  * @{
14  ******************************************************************************/
15 
16 /* Includes ------------------------------------------------------------------*/
17 #include "board.h"
18 #include "drv_dma.h"
19 
20 /* Private typedef -----------------------------------------------------------*/
21 /* Private define ------------------------------------------------------------*/
22 /* Private macro -------------------------------------------------------------*/
23 /* Private variables ---------------------------------------------------------*/
24 /** DMA control block, requires proper alignment. */
25 #if defined (__ICCARM__)
26 #pragma data_alignment=256
27 DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2];
28 #elif defined (__CC_ARM)
29 DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256)));
30 #elif defined (__GNUC__)
31 DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256)));
32 #else
33 #error Undefined toolkit, need to define alignment
34 #endif
35 
36 /* Private function prototypes -----------------------------------------------*/
37 /* Private functions ---------------------------------------------------------*/
38 /***************************************************************************//**
39  * @brief
40  *    Initialize DMA hardware
41  *
42  * @details
43  *
44  * @note
45  ******************************************************************************/
rt_hw_dma_init(void)46 void rt_hw_dma_init(void)
47 {
48     DMA_Init_TypeDef        dmaInit;
49 
50     /* Reset */
51     DMA_Reset();
52 
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  * @}
61  ******************************************************************************/
62