]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/AtmelFiles/libboard_sama5d3x-ek/source/dma_hardware_interface.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D3x_Xplained_IAR / AtmelFiles / libboard_sama5d3x-ek / source / dma_hardware_interface.c
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License\r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2011, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /** \addtogroup dmad_module\r
31  *\r
32  * \section DmaHw Dma Hardware Interface Usage\r
33  * <ul>\r
34  * <li> The DMA controller can handle the transfer between peripherals and memory \r
35  * and so receives the triggers from the peripherals. The hardware interface number\r
36  * are getting from DMAIF_Get_ChannelNumber().</li>\r
37  \r
38  * <li> DMAIF_IsValidatedPeripherOnDma() helps to check if the given DMAC has associated \r
39  * peripheral identifier coded by the given  peripheral.</li>\r
40  * \r
41  * </ul>\r
42 */\r
43 /*@{*/\r
44 /*@}*/\r
45 \r
46 /** \file */\r
47  /*----------------------------------------------------------------------------\r
48  *        Headers\r
49  *----------------------------------------------------------------------------*/\r
50 #include <board.h>\r
51 \r
52 /*----------------------------------------------------------------------------\r
53  *        Local variables\r
54  *----------------------------------------------------------------------------*/\r
55 /** Array of DMA Channel definition for SAMA5 chip*/\r
56 static const DmaHardwareInterface dmaHwIf[] = {\r
57     /* dmac, peripheral,  T/R, Channel Number*/\r
58        {0,   ID_HSMCI0,   0,   0},\r
59        {0,   ID_HSMCI0,   1,   0},\r
60        {0,   ID_SPI0,     0,   1},\r
61        {0,   ID_SPI0,     1,   2},\r
62        {0,   ID_USART0,   0,   3},\r
63        {0,   ID_USART0,   1,   4},\r
64        {0,   ID_USART1,   0,   5},\r
65        {0,   ID_USART1,   1,   6},\r
66        {0,   ID_TWI0,     0,   7},\r
67        {0,   ID_TWI0,     1,   8},\r
68        {0,   ID_TWI1,     0,   9},\r
69        {0,   ID_TWI1,     1,  10},\r
70        {0,   ID_UART0,    0,  11},\r
71        {0,   ID_UART0,    1,  12},\r
72        {0,   ID_SSC0,     0,  13},\r
73        {0,   ID_SSC0,     1,  14},\r
74     /* dmac 1 */   \r
75        {1,   ID_HSMCI1,   0,   0},\r
76        {1,   ID_HSMCI1,   1,   0},\r
77        {1,   ID_HSMCI2,   0,   1},\r
78        {1,   ID_HSMCI2,   1,   1},\r
79        {1,   ID_ADC,      1,   2},\r
80        {1,   ID_SSC1,     0,   3},\r
81        {1,   ID_SSC1,     1,   4},\r
82        {1,   ID_UART1,    0,   5},\r
83        {1,   ID_UART1,    1,   6},\r
84        {1,   ID_USART2,   0,   7},\r
85        {1,   ID_USART2,   1,   8},\r
86        {1,   ID_USART3,   0,   9},\r
87        {1,   ID_USART3,   1,  10},\r
88        {1,   ID_TWI2,     0,  11},\r
89        {1,   ID_TWI2,     1,  12},\r
90        {1,   ID_DBGU,     0,  13},\r
91        {1,   ID_DBGU,     1,  14},\r
92        {1,   ID_SPI1,     0,  15},\r
93        {1,   ID_SPI1,     1,  16},\r
94        {1,   ID_SHA,      0,  17},\r
95        {1,   ID_AES,      0,  18},\r
96        {1,   ID_AES,      1,  19},\r
97        {1,   ID_TDES,     0,  20},\r
98        {1,   ID_TDES,     1,  21}\r
99 };\r
100 \r
101 /*----------------------------------------------------------------------------\r
102  *        Consts\r
103  *----------------------------------------------------------------------------*/\r
104  /** Number of recognized peripheral identifier code for DMA0/1. */\r
105 #define NUMPERIPHERAL   (sizeof(dmaHwIf) / sizeof (DmaHardwareInterface))\r
106 \r
107 /*----------------------------------------------------------------------------\r
108  *        Exported functions\r
109  *----------------------------------------------------------------------------*/\r
110 \r
111 /**\r
112  * \brief Get peripheral identifier coded for hardware handshaking interface\r
113  *\r
114  * \param bDmac      DMA Controller number.\r
115  * \param bPeriphID  Peripheral ID.\r
116  * \param bTransfer  Transfer type 0: Tx, 1 :Rx.\r
117  * \return 0-15 peripheral identifier coded.\r
118  *         0xff : no associated peripheral identifier coded.\r
119  */\r
120 uint8_t DMAIF_Get_ChannelNumber (uint8_t bDmac,\r
121                                  uint8_t bPeriphID, \r
122                                  uint8_t bTransfer)\r
123 {\r
124     uint8_t i;\r
125     for (i = 0; i < NUMPERIPHERAL; i++)\r
126     {\r
127         if ((dmaHwIf[i].bDmac == bDmac) && (dmaHwIf[i].bPeriphID == bPeriphID) && (dmaHwIf[i].bTransfer == bTransfer))\r
128         {\r
129             return dmaHwIf[i].bIfID;\r
130         }\r
131     }\r
132     return 0xff;\r
133 }\r
134 \r
135 /**\r
136  * \brief Check if the given DMAC has associated peripheral identifier coded by \r
137  * the given  peripheral.\r
138  *\r
139  * \param bDmac      DMA Controller number.\r
140  * \param bPeriphID  Peripheral ID (0xff : memory only).\r
141  * \return 1:  Is a validated peripher. 0: no associated peripheral identifier coded.\r
142  */\r
143 uint8_t DMAIF_IsValidatedPeripherOnDma( uint8_t bDmac, uint8_t bPeriphID)\r
144 {\r
145     uint8_t i;\r
146     /* It is always validated when transfer to memory */\r
147     if (bPeriphID == 0xFF) {\r
148         return 1;\r
149     }\r
150     for (i = 0; i < NUMPERIPHERAL; i++)\r
151     {\r
152         if ((dmaHwIf[i].bDmac == bDmac) && (dmaHwIf[i].bPeriphID == bPeriphID))\r
153         {\r
154             return 1;\r
155         }\r
156     }\r
157     return 0;\r
158 }\r
159 \r
160 \r