RTEMS
6.3
Toggle main menu visibility
Loading...
Searching...
No Matches
bsps
arm
atsam
include
libchip
include
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
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
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
;
102
SpidCallback
callback
;
104
void
*
pArgument
;
105
}
SpidCmd
;
106
109
typedef
struct
_Spid
{
111
Spi
*
pSpiHw
;
113
SpidCmd
*
pCurrentCommand
;
115
sXdmad
*
pXdmad
;
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_ */
sXdmad
struct _Xdmad sXdmad
SPID_ConfigureCS
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
SPID_Configure
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
SPID_IsBusy
uint32_t SPID_IsBusy(const Spid *pSpid)
Check if the SPI driver is busy.
Definition
spi_dma.c:386
SPID_SendCommand
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
SpidCallback
void(*) SpidCallback(uint8_t, void *)
Definition
spi_dma.h:83
SpidCmd
struct _SpidCmd SpidCmd
Spi Transfer Request prepared by the application upper layer.
Spid
struct _Spid Spid
Spi
Spi hardware registers.
Definition
component_spi.h:41
_SpidCmd
Spi Transfer Request prepared by the application upper layer.
Definition
spi_dma.h:90
_SpidCmd::spiCs
uint8_t spiCs
Definition
spi_dma.h:100
_SpidCmd::pArgument
void * pArgument
Definition
spi_dma.h:104
_SpidCmd::pTxBuff
uint8_t * pTxBuff
Definition
spi_dma.h:92
_SpidCmd::pRxBuff
uint8_t * pRxBuff
Definition
spi_dma.h:96
_SpidCmd::callback
SpidCallback callback
Definition
spi_dma.h:102
_SpidCmd::TxSize
uint8_t TxSize
Definition
spi_dma.h:94
_SpidCmd::RxSize
uint16_t RxSize
Definition
spi_dma.h:98
_Spid
Definition
spi_dma.h:109
_Spid::pCurrentCommand
SpidCmd * pCurrentCommand
Definition
spi_dma.h:113
_Spid::pSpiHw
Spi * pSpiHw
Definition
spi_dma.h:111
_Spid::spiId
uint8_t spiId
Definition
spi_dma.h:117
_Spid::pXdmad
sXdmad * pXdmad
Definition
spi_dma.h:115
_Spid::semaphore
volatile int8_t semaphore
Definition
spi_dma.h:119
Generated by
1.18.0