source: rtems/c/src/lib/libbsp/arm/atsam/libraries/libchip/include/xdmac.h @ f74e2959

5
Last change on this file since f74e2959 was f74e2959, checked in by Sebastian Huber <sebastian.huber@…>, on 12/13/16 at 14:18:00

bsp/atsam: Speed up SPI DMA transfer start

  • Property mode set to 100644
File size: 8.4 KB
Line 
1/* ---------------------------------------------------------------------------- */
2/*                  Atmel Microcontroller Software Support                      */
3/*                       SAM Software Package License                           */
4/* ---------------------------------------------------------------------------- */
5/* Copyright (c) 2015, Atmel Corporation                                        */
6/*                                                                              */
7/* All rights reserved.                                                         */
8/*                                                                              */
9/* Redistribution and use in source and binary forms, with or without           */
10/* modification, are permitted provided that the following condition is met:    */
11/*                                                                              */
12/* - Redistributions of source code must retain the above copyright notice,     */
13/* this list of conditions and the disclaimer below.                            */
14/*                                                                              */
15/* Atmel's name may not be used to endorse or promote products derived from     */
16/* this software without specific prior written permission.                     */
17/*                                                                              */
18/* DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR   */
19/* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
20/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE   */
21/* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,      */
22/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
23/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  */
24/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    */
25/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING         */
26/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
27/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                           */
28/* ---------------------------------------------------------------------------- */
29
30/** \file */
31
32/** \addtogroup dmac_module Working with DMAC
33 *  \ingroup peripherals_module
34 *
35 * \section Usage
36 * <ul>
37 * <li> Enable or disable the a DMAC controller with DMAC_Enable() and or
38 * DMAC_Disable().</li>
39 * <li> Enable or disable %Dma interrupt using DMAC_EnableIt()or
40 * DMAC_DisableIt().</li>
41 * <li> Get %Dma interrupt status by DMAC_GetStatus() and
42 * DMAC_GetInterruptMask().</li>
43 * <li> Enable or disable specified %Dma channel with DMAC_EnableChannel() or
44 * DMAC_DisableChannel().</li>
45 * <li> Get %Dma channel status by DMAC_GetChannelStatus().</li>
46 * <li> ControlA and ControlB register is set by DMAC_SetControlA() and
47 * DMAC_SetControlB().</li>
48 * <li> Configure source and/or destination start address with
49 * DMAC_SetSourceAddr() and/or DMAC_SetDestinationAddr().</li>
50 * <li> Set %Dma descriptor address using DMAC_SetDescriptorAddr().</li>
51 * <li> Set source transfer buffer size with DMAC_SetBufferSize().</li>
52 * <li> Configure source and/or destination Picture-In-Picuture mode with
53 * DMAC_SetSourcePip() and/or DMAC_SetDestPip().</li>
54 * </ul>
55 *
56 * For more accurate information, please look at the DMAC section of the
57 * Datasheet.
58 *
59 * \sa \ref dmad_module
60 *
61 * Related files :\n
62 * \ref dmac.c\n
63 * \ref dmac.h.\n
64 *
65 */
66
67#ifndef DMAC_H
68#define DMAC_H
69/**@{*/
70
71/*------------------------------------------------------------------------------
72 *         Headers
73 *----------------------------------------------------------------------------*/
74
75#include "chip.h"
76
77#ifndef __rtems__
78#include <../../../../utils/utility.h>
79#endif /* __rtems__ */
80#include <stdint.h>
81
82/*------------------------------------------------------------------------------
83 *         Definitions
84 *----------------------------------------------------------------------------*/
85
86/** \addtogroup dmac_defines DMAC Definitions
87 *      @{
88 */
89/** Number of DMA channels */
90#define XDMAC_CONTROLLER_NUM            1
91/** Number of DMA channels */
92#define XDMAC_CHANNEL_NUM               24
93/** Max DMA single transfer size */
94#define XDMAC_MAX_BT_SIZE               0xFFFF
95/**     @}*/
96
97/*----------------------------------------------------------------------------
98 *         Macro
99 *----------------------------------------------------------------------------*/
100#define XDMA_GET_DATASIZE(size) ((size==0)? XDMAC_CC_DWIDTH_BYTE : \
101                                                                 ((size==1)? XDMAC_CC_DWIDTH_HALFWORD : \
102                                                                  (XDMAC_CC_DWIDTH_WORD)))
103#define XDMA_GET_CC_SAM(s)      ((s==0)? XDMAC_CC_SAM_FIXED_AM : \
104                                                                 ((s==1)? XDMAC_CC_SAM_INCREMENTED_AM : \
105                                                                  ((s==2)? XDMAC_CC_SAM_UBS_AM : \
106                                                                   XDMAC_CC_SAM_UBS_DS_AM)))
107#define XDMA_GET_CC_DAM(d)      ((d==0)? XDMAC_CC_DAM_FIXED_AM : \
108                                                                 ((d==1)? XDMAC_CC_DAM_INCREMENTED_AM : \
109                                                                  ((d==2)? XDMAC_CC_DAM_UBS_AM : \
110                                                                   XDMAC_CC_DAM_UBS_DS_AM)))
111#define XDMA_GET_CC_MEMSET(m)   ((m==0)? XDMAC_CC_MEMSET_NORMAL_MODE : \
112                                                                 XDMAC_CC_MEMSET_HW_MODE)
113
114/*------------------------------------------------------------------------------
115 *         Global functions
116 *----------------------------------------------------------------------------*/
117/** \addtogroup dmac_functions
118 *      @{
119 */
120
121#ifdef __cplusplus
122extern "C" {
123#endif
124
125static inline void XDMAC_StartTransfer(Xdmac *pXdmac, uint8_t iChannel)
126{
127        pXdmac->XDMAC_GE = (XDMAC_GE_EN0 << iChannel);
128        pXdmac->XDMAC_GIE = (XDMAC_GIE_IE0 << iChannel);
129}
130
131extern uint32_t XDMAC_GetType(Xdmac *pXdmac);
132extern uint32_t XDMAC_GetConfig(Xdmac *pXdmac);
133extern uint32_t XDMAC_GetArbiter(Xdmac *pXdmac);
134extern void XDMAC_EnableGIt (Xdmac *pXdmac, uint8_t dwInteruptMask);
135extern void XDMAC_DisableGIt (Xdmac *pXdmac, uint8_t dwInteruptMask);
136extern uint32_t XDMAC_GetGItMask(Xdmac *pXdmac);
137extern uint32_t XDMAC_GetGIsr(Xdmac *pXdmac);
138extern uint32_t XDMAC_GetMaskedGIsr(Xdmac *pXdmac);
139extern void XDMAC_EnableChannel(Xdmac *pXdmac, uint8_t channel);
140extern void XDMAC_EnableChannels(Xdmac *pXdmac, uint32_t bmChannels);
141extern void XDMAC_DisableChannel(Xdmac *pXdmac, uint8_t channel);
142extern void XDMAC_DisableChannels(Xdmac *pXdmac, uint32_t bmChannels);
143extern uint32_t XDMAC_GetGlobalChStatus(Xdmac *pXdmac);
144extern void XDMAC_SuspendReadChannel(Xdmac *pXdmac, uint8_t channel);
145extern void XDMAC_SuspendWriteChannel(Xdmac *pXdmac, uint8_t channel);
146extern void XDMAC_SuspendReadWriteChannel(Xdmac *pXdmac, uint8_t channel);
147extern void XDMAC_ResumeReadWriteChannel(Xdmac *pXdmac, uint8_t channel);
148extern void XDMAC_SoftwareTransferReq(Xdmac *pXdmac, uint8_t channel);
149extern uint32_t XDMAC_GetSoftwareTransferStatus(Xdmac *pXdmac);
150extern void XDMAC_SoftwareFlushReq(Xdmac *pXdmac, uint8_t channel);
151extern void XDMAC_EnableChannelIt (Xdmac *pXdmac, uint8_t channel,
152                                                                   uint8_t dwInteruptMask);
153extern void XDMAC_DisableChannelIt (Xdmac *pXdmac, uint8_t channel,
154                                                                        uint8_t dwInteruptMask);
155extern uint32_t XDMAC_GetChannelItMask (Xdmac *pXdmac, uint8_t channel);
156extern uint32_t XDMAC_GetChannelIsr (Xdmac *pXdmac, uint8_t channel);
157extern uint32_t XDMAC_GetMaskChannelIsr (Xdmac *pXdmac, uint8_t channel);
158extern void XDMAC_SetSourceAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr);
159extern void XDMAC_SetDestinationAddr(Xdmac *pXdmac, uint8_t channel,
160                                                                         uint32_t addr);
161extern void XDMAC_SetDescriptorAddr(Xdmac *pXdmac, uint8_t channel,
162                                                                        uint32_t addr, uint8_t ndaif);
163extern void XDMAC_SetDescriptorControl(Xdmac *pXdmac, uint8_t channel,
164                                                                           uint8_t config);
165extern void XDMAC_SetMicroblockControl(Xdmac *pXdmac, uint8_t channel,
166                                                                           uint32_t ublen);
167extern void XDMAC_SetBlockControl(Xdmac *pXdmac, uint8_t channel,
168                                                                  uint16_t blen);
169extern void XDMAC_SetChannelConfig(Xdmac *pXdmac, uint8_t channel,
170                                                                   uint32_t config);
171extern uint32_t XDMAC_GetChannelConfig(Xdmac *pXdmac, uint8_t channel);
172extern void XDMAC_SetDataStride_MemPattern(Xdmac *pXdmac, uint8_t channel,
173                uint32_t dds_msp);
174extern void XDMAC_SetSourceMicroBlockStride(Xdmac *pXdmac, uint8_t channel,
175                uint32_t subs);
176extern void XDMAC_SetDestinationMicroBlockStride(Xdmac *pXdmac, uint8_t channel,
177                uint32_t dubs);
178extern uint32_t XDMAC_GetChDestinationAddr(Xdmac *pXdmac, uint8_t channel);
179#ifdef __cplusplus
180}
181#endif
182
183/**     @}*/
184/**@}*/
185#endif //#ifndef DMAC_H
186
Note: See TracBrowser for help on using the repository browser.