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

5
Last change on this file since e1eeb883 was e1eeb883, checked in by Sebastian Huber <sebastian.huber@…>, on 01/12/16 at 14:34:31

bsp/atsam: Import SAM Software Package

Import selected files of the "SAM V71 / V70 / E70 / S70 Software
Package" obtained from the "SAMV71-XULT GNU Software Package 1.5".

Converted files via dos2unix before import.

Update #2529.

  • Property mode set to 100644
File size: 5.7 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/**
31 * \file
32 *
33 * Implementation of SPI driver, transfer data through DMA.
34 *
35 */
36
37#ifndef _SPI_DMA_
38#define _SPI_DMA_
39
40/*----------------------------------------------------------------------------
41 *        Headers
42 *----------------------------------------------------------------------------*/
43
44#include "chip.h"
45
46/*----------------------------------------------------------------------------
47 *        Definitions
48 *----------------------------------------------------------------------------*/
49
50/** An unspecified error has occurred.*/
51#define SPID_ERROR          1
52
53/** SPI driver is currently in use.*/
54#define SPID_ERROR_LOCK     2
55
56/*----------------------------------------------------------------------------
57 *        Macros
58 *----------------------------------------------------------------------------*/
59
60/** Calculates the value of the SCBR field of the Chip Select Register
61    given MCK and SPCK.*/
62#define SPID_CSR_SCBR(mck, spck)    SPI_CSR_SCBR((mck) / (spck))
63
64/** Calculates the value of the DLYBS field of the Chip Select Register
65    given delay in ns and MCK.*/
66#define SPID_CSR_DLYBS(mck, delay)  SPI_CSR_DLYBS((((delay) * \
67                ((mck) / 1000000)) / 1000) + 1)
68
69/** Calculates the value of the DLYBCT field of the Chip Select Register
70    given delay in ns and MCK.*/
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
82/** SPI transfer complete callback. */
83typedef void (*SpidCallback)(uint8_t, void *);
84
85/** \brief Spi Transfer Request prepared by the application upper layer.
86 *
87 * This structure is sent to the SPI_SendCommand function to start the transfer.
88 * At the end of the transfer, the callback is invoked by the interrupt handler.
89 */
90typedef struct _SpidCmd {
91        /** Pointer to the Tx data. */
92        uint8_t *pTxBuff;
93        /** Tx size in bytes. */
94        uint8_t TxSize;
95        /** Pointer to the Rx data. */
96        uint8_t *pRxBuff;
97        /** Rx size in bytes. */
98        uint16_t RxSize;
99        /** SPI chip select. */
100        uint8_t spiCs;
101        /** Callback function invoked at the end of transfer. */
102        SpidCallback callback;
103        /** Callback arguments. */
104        void *pArgument;
105} SpidCmd;
106
107/** Constant structure associated with SPI port. This structure prevents
108    client applications to have access in the same time. */
109typedef struct _Spid {
110        /** Pointer to SPI Hardware registers */
111        Spi *pSpiHw;
112        /** Current SpiCommand being processed */
113        SpidCmd *pCurrentCommand;
114        /** Pointer to DMA driver */
115        sXdmad *pXdmad;
116        /** SPI Id as defined in the product datasheet */
117        uint8_t spiId;
118        /** Mutual exclusion semaphore. */
119        volatile int8_t semaphore;
120} Spid;
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_ */
Note: See TracBrowser for help on using the repository browser.