]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/libchip_samv7/include/qspi.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained_IAR_Keil / libchip_samv7 / include / qspi.h
1 /* ----------------------------------------------------------------------------\r
2  *         ATMEL Microcontroller Software Support\r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2010, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /**\r
31  * \file\r
32  *\r
33  * Interface for Serial Peripheral Interface (SPI) controller.\r
34  *\r
35  */\r
36 \r
37 #ifndef _QSPI_\r
38 #define _QSPI_\r
39 \r
40 /*----------------------------------------------------------------------------\r
41  *        Headers\r
42  *----------------------------------------------------------------------------*/\r
43 \r
44 /*----------------------------------------------------------------------------\r
45  *        Macros\r
46  *----------------------------------------------------------------------------*/\r
47 \r
48 /**\r
49  *\r
50  * Here are several macros which should be used when configuring a SPI\r
51  * peripheral.\r
52  *\r
53  * \section qspi_configuration_macros SPI Configuration Macros\r
54  * - \ref QSPI_PCS\r
55  * - \ref QSPI_SCBR\r
56  * - \ref QSPI_DLYBS\r
57  * - \ref QSPI_DLYBCT\r
58  */\r
59 \r
60 \r
61 /** Calculates the value of the CSR SCBR field given the baudrate and MCK. */\r
62 #define QSPI_SCBR(baudrate, masterClock) ((uint32_t) (masterClock / baudrate) << 8)\r
63 \r
64 /** Calculates the value of the CSR DLYBS field given the desired delay (in ns) */\r
65 #define QSPI_DLYBS(delay, masterClock) ((uint32_t) (((masterClock / 1000000) * delay) / 1000) << 16)\r
66 \r
67 /** Calculates the value of the CSR DLYBCT field given the desired delay (in ns) */\r
68 #define QSPI_DLYBCT(delay, masterClock) ((uint32_t) (((masterClock / 1000000) * delay) / 32000) << 24)\r
69 \r
70 /*------------------------------------------------------------------------------ */\r
71 \r
72 #ifdef __cplusplus\r
73  extern "C" {\r
74 #endif\r
75 \r
76 /*----------------------------------------------------------------------------\r
77  *        Exported functions\r
78  *----------------------------------------------------------------------------*/\r
79    \r
80 typedef enum{\r
81      Device_Read,\r
82      Device_Write\r
83 }AccesType;\r
84        \r
85 \r
86 typedef struct {\r
87   uint8_t       Instruction;\r
88   uint8_t       InstAddrFlag;  \r
89   uint8_t       Option;\r
90   uint8_t       OptionEn;\r
91   uint8_t       OptionLen;\r
92   uint8_t       ContinuousRead;\r
93   uint8_t       DummyCycles;\r
94   uint8_t       spiMode;  \r
95   uint32_t      DataSize;\r
96   uint32_t      InstAddr;\r
97   uint8_t       *pData;\r
98 }qspiFrame;\r
99 \r
100 extern volatile uint8_t INSTRE_Flag;\r
101 extern void QSPI_Enable( Qspi* qspi ) ;\r
102 extern void QSPI_Disable( Qspi* qspi ) ;\r
103 extern void QSPI_EnableIt( Qspi* qspi, uint32_t dwSources ) ;\r
104 extern void QSPI_DisableIt( Qspi* qspi, uint32_t dwSources ) ;\r
105 extern uint32_t QSPI_GetItMask( Qspi* qspi );\r
106 \r
107 extern void QSPI_Configure( Qspi* qspi, uint32_t dwConfiguration ) ;\r
108 void QSPI_ConfigureClock( Qspi* qspi,uint32_t dwConfiguration );\r
109 extern void QSPI_SwReset( Qspi* qspi );\r
110 \r
111 extern void QSPI_ConfigureCs( Qspi* qspi, uint8_t spiCs );\r
112 \r
113 extern int QSPI_RxEmpty(Qspi *qspi);\r
114 extern int QSPI_TxRdy(Qspi *qspi);\r
115 \r
116 extern uint32_t QSPI_Read( Qspi* qspi ) ;\r
117 extern void QSPI_Write( Qspi* qspi, uint16_t wData ) ;\r
118 extern void QSPI_WriteLast( Qspi* qspi,  uint16_t wData );\r
119 \r
120 extern uint32_t QSPI_GetStatus( Qspi* qspi ) ;\r
121 extern uint32_t QSPI_IsFinished( Qspi* pQspi ) ;\r
122 \r
123 extern uint32_t QSPI_IsEOFInst( Qspi* qspi );\r
124 extern uint32_t QSPI_IsCsRise( Qspi* qspi );\r
125 extern uint32_t QSPI_IsCsAsserted( Qspi* qspi );\r
126 \r
127 extern void QSPI_SendFrame( Qspi* qspi, qspiFrame *pFrame, AccesType  ReadWrite);\r
128 \r
129 extern void QSPI_SendFrameToMem( Qspi* qspi, qspiFrame *pFrame, AccesType  ReadWrite );\r
130 \r
131 #ifdef __cplusplus\r
132 }\r
133 #endif\r
134 \r
135 #endif /* #ifndef _QSPI_ */\r
136 \r