RTEMS  5.0.0
spi_dma.h
Go to the documentation of this file.
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 
37 #ifndef _SPI_DMA_
38 #define _SPI_DMA_
39 
40 /*----------------------------------------------------------------------------
41  * Headers
42  *----------------------------------------------------------------------------*/
43 
44 #include "chip.h"
45 
46 /*----------------------------------------------------------------------------
47  * Definitions
48  *----------------------------------------------------------------------------*/
49 
51 #define SPID_ERROR 1
52 
54 #define SPID_ERROR_LOCK 2
55 
56 /*----------------------------------------------------------------------------
57  * Macros
58  *----------------------------------------------------------------------------*/
59 
62 #define SPID_CSR_SCBR(mck, spck) SPI_CSR_SCBR((mck) / (spck))
63 
66 #define SPID_CSR_DLYBS(mck, delay) SPI_CSR_DLYBS((((delay) * \
67  ((mck) / 1000000)) / 1000) + 1)
68 
71 #define SPID_CSR_DLYBCT(mck, delay) SPI_CSR_DLYBCT((((delay) / 32 * \
72  ((mck) / 1000000)) / 1000) + 1)
73 
74 #ifdef __cplusplus
75 extern "C" {
76 #endif
77 
78 /*----------------------------------------------------------------------------
79  * Types
80  *----------------------------------------------------------------------------*/
81 
83 typedef void (*SpidCallback)(uint8_t, void *);
84 
90 typedef struct _SpidCmd {
92  uint8_t *pTxBuff;
94  uint8_t TxSize;
96  uint8_t *pRxBuff;
98  uint16_t RxSize;
100  uint8_t spiCs;
104  void *pArgument;
105 } SpidCmd;
106 
109 typedef struct _Spid {
117  uint8_t spiId;
119  volatile int8_t semaphore;
120 } Spid;
121 
122 /*----------------------------------------------------------------------------
123  * Exported functions
124  *----------------------------------------------------------------------------*/
125 
126 extern uint32_t SPID_Configure(Spid *pSpid,
127  Spi *pSpiHw,
128  uint8_t spiId,
129  uint32_t SpiMode,
130  sXdmad *pXdmad);
131 
132 extern void SPID_ConfigureCS(Spid *pSpid, uint32_t dwCS, uint32_t dwCsr);
133 
134 extern uint32_t SPID_SendCommand(Spid *pSpid, SpidCmd *pCommand);
135 
136 extern void SPID_Handler(Spid *pSpid);
137 
138 extern void SPID_DmaHandler(Spid *pSpid);
139 
140 extern uint32_t SPID_IsBusy(const Spid *pSpid);
141 
142 #ifdef __cplusplus
143 }
144 #endif
145 
146 #endif /* #ifndef _SPI_DMA_ */
uint8_t * pTxBuff
Definition: spi_dma.h:92
void(* SpidCallback)(uint8_t, void *)
Definition: spi_dma.h:83
struct _SpidCmd SpidCmd
Spi Transfer Request prepared by the application upper layer.
Spi Transfer Request prepared by the application upper layer.
Definition: spi_dma.h:90
uint32_t SPID_IsBusy(const Spid *pSpid)
Check if the SPI driver is busy.
Definition: spi_dma.c:386
uint8_t * pRxBuff
Definition: spi_dma.h:96
void SPID_ConfigureCS(Spid *pSpid, uint32_t dwCS, uint32_t dwCsr)
Configures the parameters for the device corresponding to the cs value.
Definition: spi_dma.c:308
Spi hardware registers.
Definition: component_spi.h:41
uint16_t RxSize
Definition: spi_dma.h:98
uint8_t spiId
Definition: spi_dma.h:117
struct _Spid Spid
uint32_t SPID_Configure(Spid *pSpid, Spi *pSpiHw, uint8_t spiId, uint32_t SpiMode, sXdmad *pXdmad)
Initializes the Spid structure and the corresponding SPI & DMA hardware. select value. The driver will uses DMA channel 0 for RX and DMA channel 1 for TX. The DMA channels are freed automatically when no SPI command processing.
Definition: spi_dma.c:280
uint32_t SPID_SendCommand(Spid *pSpid, SpidCmd *pCommand)
Starts a SPI master transfer. This is a non blocking function. It will return as soon as the transfer...
Definition: spi_dma.c:334
uint8_t spiCs
Definition: spi_dma.h:100
Spi * pSpiHw
Definition: spi_dma.h:111
volatile int8_t semaphore
Definition: spi_dma.h:119
uint8_t TxSize
Definition: spi_dma.h:94
SpidCallback callback
Definition: spi_dma.h:102
SpidCmd * pCurrentCommand
Definition: spi_dma.h:113
sXdmad * pXdmad
Definition: spi_dma.h:115
Definition: xdmad.h:127
void * pArgument
Definition: spi_dma.h:104
Definition: spi_dma.h:109