]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained/libchip_samv7/include/mcid.h
Update version number ready for V8.2.1 release.
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained / libchip_samv7 / include / mcid.h
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2013, 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 /**\r
34  * \ingroup sdmmc_hal\r
35  * \addtogroup mcid_module MCI Driver (HAL for SD/MMC Lib)\r
36  *\r
37  * \section Purpose\r
38  *\r
39  * This driver implements SD(IO)/MMC command operations and MCI configuration\r
40  * routines to perform SD(IO)/MMC access. It's used for upper layer\r
41  * (\ref libsdmmc_module "SD/MMC driver") to perform SD/MMC operations.\r
42  *\r
43  * \section Usage\r
44  *\r
45  * -# MCID_Init(): Initializes a MCI driver instance and the underlying\r
46  *                 peripheral.\r
47  * -# MCID_SendCmd(): Starts a MCI transfer which described by\r
48  *                    \ref sSdmmcCommand.\r
49  * -# MCID_CancelCmd(): Cancel a pending command.\r
50  * -# MCID_IsCmdCompleted(): Check if MCI transfer is finished.\r
51  * -# MCID_Handler(): Interrupt handler which is called by ISR handler.\r
52  * -# MCID_IOCtrl(): IO control function to report HW attributes to upper\r
53  *                   layer driver and modify HW settings (such as clock\r
54  *                   frequency, High-speed support, etc. See\r
55  *                   \ref sdmmc_ioctrls).\r
56  *\r
57  * \sa \ref dmad_module "DMA Driver", \ref hsmci_module "HSMCI",\r
58  *     \ref libsdmmc_module "SD/MMC Library"\r
59  *\r
60  * Related files:\n\r
61  * \ref mcid.h\n\r
62  * \ref mcid_dma.c.\n\r
63  */\r
64 \r
65 #ifndef MCID_H\r
66 #define MCID_H\r
67 /** \addtogroup mcid_module\r
68  *@{\r
69  */\r
70 \r
71 /*----------------------------------------------------------------------------\r
72  *         Headers\r
73  *----------------------------------------------------------------------------*/\r
74 \r
75 #include "chip.h"\r
76 \r
77 #include <stdint.h>\r
78 #include <stdio.h>\r
79 \r
80 /** \addtogroup mcid_defines MCI Driver Defines\r
81  *      @{*/\r
82 \r
83 /*----------------------------------------------------------------------------\r
84  *         Constants\r
85  *----------------------------------------------------------------------------*/\r
86 \r
87 /** MCI States */\r
88 #define MCID_IDLE   0       /**< Idle */\r
89 #define MCID_LOCKED 1       /**< Locked for specific slot */\r
90 #define MCID_CMD    2       /**< Processing the command */\r
91 #define MCID_ERROR  3       /**< Command error */\r
92 \r
93 /** MCI Initialize clock 400K Hz */\r
94 #define MCI_INITIAL_SPEED   400000\r
95 \r
96 /**     @}*/\r
97 \r
98 /*----------------------------------------------------------------------------\r
99  *         Types\r
100  *----------------------------------------------------------------------------*/\r
101 /** \addtogroup mcid_structs MCI Driver Data Structs\r
102  *      @{\r
103  */\r
104 #ifdef __cplusplus\r
105  extern "C" {\r
106 #endif\r
107 \r
108 /**\r
109  *  \brief MCI Driver\r
110  */\r
111 typedef struct _Mcid\r
112 {\r
113     /** Pointer to a MCI peripheral. */\r
114     Hsmci         *pMciHw;\r
115     /** Pointer to a DMA driver */\r
116     sXdmad         *pXdmad;\r
117     /** Pointer to currently executing command. */\r
118     void          *pCmd;\r
119     /** MCK source, Hz */\r
120     uint32_t       dwMck;\r
121     /** DMA transfer channel */\r
122     uint32_t       dwDmaCh;\r
123     /** DMA transferred data index (bytes) */\r
124     uint32_t       dwXfrNdx;\r
125     /** DMA transfer size (bytes) */\r
126     uint32_t       dwXSize;\r
127     /** MCI peripheral identifier. */\r
128     uint8_t        bID;\r
129     /** Polling mode */\r
130     uint8_t        bPolling;\r
131     /** Reserved */\r
132     uint8_t        reserved;\r
133     /** state. */\r
134     volatile uint8_t bState;\r
135     /** Status. */\r
136     volatile uint8_t bOpStatus;\r
137 } sMcid;\r
138 \r
139 /**     @}*/\r
140 /*----------------------------------------------------------------------------\r
141  *         Exported functions\r
142  *----------------------------------------------------------------------------*/\r
143 /** \addtogroup mcid_functions MCI Driver Functions\r
144         @{*/\r
145 extern void MCID_Init(sMcid * pMcid,\r
146                       Hsmci * pMci, uint8_t bID, uint32_t dwMck,\r
147                       sXdmad * pXdmad,\r
148                       uint8_t bPolling);\r
149 \r
150 extern void MCID_Reset(sMcid * pMcid);\r
151 \r
152 extern void MCID_SetSlot(Hsmci *pMci, uint8_t slot);\r
153 \r
154 extern uint32_t MCID_Lock(sMcid * pMcid, uint8_t bSlot);\r
155 \r
156 extern uint32_t MCID_Release(sMcid * pMcid);\r
157 \r
158 extern void MCID_Handler(sMcid * pMcid);\r
159 \r
160 extern uint32_t MCID_SendCmd(sMcid * pMcid, void * pCmd);\r
161 \r
162 extern uint32_t MCID_CancelCmd(sMcid * pMcid);\r
163 \r
164 extern uint32_t MCID_IsCmdCompleted(sMcid * pMcid);\r
165 \r
166 extern uint32_t MCID_IOCtrl(sMcid * pMcid,uint32_t bCtl,uint32_t param);\r
167 \r
168 #ifdef __cplusplus\r
169 }\r
170 #endif\r
171 /**     @}*/\r
172 /**@}*/\r
173 #endif //#ifndef HSMCID_H\r
174 \r