RTEMS 6.1-rc1
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
75extern "C" {
76#endif
77
78/*----------------------------------------------------------------------------
79 * Types
80 *----------------------------------------------------------------------------*/
81
83typedef void (*SpidCallback)(uint8_t, void *);
84
90typedef struct _SpidCmd {
92 uint8_t *pTxBuff;
94 uint8_t TxSize;
96 uint8_t *pRxBuff;
98 uint16_t RxSize;
100 uint8_t spiCs;
106
109typedef struct _Spid {
117 uint8_t spiId;
119 volatile int8_t semaphore;
121
122/*----------------------------------------------------------------------------
123 * Exported functions
124 *----------------------------------------------------------------------------*/
125
126extern uint32_t SPID_Configure(Spid *pSpid,
127 Spi *pSpiHw,
128 uint8_t spiId,
129 uint32_t SpiMode,
130 sXdmad *pXdmad);
131
132extern void SPID_ConfigureCS(Spid *pSpid, uint32_t dwCS, uint32_t dwCsr);
133
134extern uint32_t SPID_SendCommand(Spid *pSpid, SpidCmd *pCommand);
135
136extern void SPID_Handler(Spid *pSpid);
137
138extern void SPID_DmaHandler(Spid *pSpid);
139
140extern uint32_t SPID_IsBusy(const Spid *pSpid);
141
142#ifdef __cplusplus
143}
144#endif
145
146#endif /* #ifndef _SPI_DMA_ */
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
uint32_t SPID_IsBusy(const Spid *pSpid)
Check if the SPI driver is busy.
Definition: spi_dma.c:386
struct _SpidCmd SpidCmd
Spi Transfer Request prepared by the application upper layer.
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....
Definition: spi_dma.c:280
struct _Spid Spid
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
void(* SpidCallback)(uint8_t, void *)
Definition: spi_dma.h:83
Spi hardware registers.
Definition: component_spi.h:41
Spi Transfer Request prepared by the application upper layer.
Definition: spi_dma.h:90
uint8_t spiCs
Definition: spi_dma.h:100
void * pArgument
Definition: spi_dma.h:104
uint8_t * pTxBuff
Definition: spi_dma.h:92
uint8_t * pRxBuff
Definition: spi_dma.h:96
SpidCallback callback
Definition: spi_dma.h:102
uint8_t TxSize
Definition: spi_dma.h:94
uint16_t RxSize
Definition: spi_dma.h:98
Definition: spi_dma.h:109
SpidCmd * pCurrentCommand
Definition: spi_dma.h:113
Spi * pSpiHw
Definition: spi_dma.h:111
uint8_t spiId
Definition: spi_dma.h:117
sXdmad * pXdmad
Definition: spi_dma.h:115
volatile int8_t semaphore
Definition: spi_dma.h:119
Definition: xdmad.h:127