summaryrefslogtreecommitdiffstats
path: root/bsps/arm/atsam/include/libchip/include/hsmci.h
blob: f228a3e261e3df57ba4379738e843181c6ef8917 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/* ---------------------------------------------------------------------------- */
/*                  Atmel Microcontroller Software Support                      */
/*                       SAM Software Package License                           */
/* ---------------------------------------------------------------------------- */
/* Copyright (c) 2015, Atmel Corporation                                        */
/*                                                                              */
/* All rights reserved.                                                         */
/*                                                                              */
/* Redistribution and use in source and binary forms, with or without           */
/* modification, are permitted provided that the following condition is met:    */
/*                                                                              */
/* - Redistributions of source code must retain the above copyright notice,     */
/* this list of conditions and the disclaimer below.                            */
/*                                                                              */
/* Atmel's name may not be used to endorse or promote products derived from     */
/* this software without specific prior written permission.                     */
/*                                                                              */
/* DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR   */
/* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE   */
/* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,      */
/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  */
/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    */
/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING         */
/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                           */
/* ---------------------------------------------------------------------------- */

/** \file */

/** \addtogroup hsmci_module Working with HSMCI
 *  \ingroup mcid_module
 *
 * \section Purpose
 *
 * The HSMCI driver provides the interface to configure and use the HSMCI
 * peripheral.
 *
 * \section Usage
 *
 * -# HSMCI_Enable(), MCI_Disable(): Enable/Disable HSMCI interface.
 * -# HSMCI_Reset(): Reset HSMCI interface.
 * -# HSMCI_Select(): HSMCI slot and buswidth selection
 *                    (\ref Hsmci::HSMCI_SDCR).
 * -# HSMCI_ConfigureMode(): Configure the  MCI CLKDIV in the _MR register
 *                           (\ref Hsmci::HSMCI_MR).
 * -# HSMCI_EnableIt(), HSMCI_DisableIt(), HSMCI_GetItMask(), HSMCI_GetStatus()
 *      HSMCI Interrupt control (\ref Hsmci::HSMCI_IER, \ref Hsmci::HSMCI_IDR,
 *      \ref Hsmci::HSMCI_IMR, \ref Hsmci::HSMCI_SR).
 * -# HSMCI_ConfigureTransfer(): Setup block length and count for MCI transfer
 *                               (\ref Hsmci::HSMCI_BLKR).
 * -# HSMCI_SendCmd(): Send SD/MMC command with argument
 *                     (\ref Hsmci::HSMCI_ARGR, \ref Hsmci::HSMCI_CMDR).
 * -# HSMCI_GetResponse(): Get SD/MMC response after command finished
 *                         (\ref Hsmci::HSMCI_RSPR).
 * -# HSMCI_ConfigureDma(): Configure MCI DMA transfer
 *                          (\ref Hsmci::HSMCI_DMA).
 * -# HSMCI_Configure(): Configure the HSMCI interface (\ref Hsmci::HSMCI_CFG).
 * -# HSMCI_HsEnable(), HSMCI_IsHsEnabled(): High Speed control.
 *
 * For more accurate information, please look at the HSMCI section of the
 * Datasheet.
 *
 * \sa \ref mcid_module
 *
 * Related files :\n
 * \ref hsmci.h\n
 * \ref hsmci.c.\n
 */

#ifndef HSMCID_H
#define HSMCID_H
/** \addtogroup hsmci_module
 *@{
 */

/*----------------------------------------------------------------------------
 *         Headers
 *----------------------------------------------------------------------------*/

#include "chip.h"

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif
/*----------------------------------------------------------------------------
 *         Exported functions
 *----------------------------------------------------------------------------*/
/** \addtogroup hsmci_functions HSMCI Functions
 *      @{
 */

extern void HSMCI_Enable(Hsmci *pRMci);
extern void HSMCI_Disable(Hsmci *pRMci);
extern void HSMCI_Reset(Hsmci *pRMci, uint8_t bBackup);

extern void HSMCI_Select(Hsmci *pRMci, uint8_t bSlot, uint8_t bBusWidth);
extern void HSMCI_SetSlot(Hsmci *pRMci, uint8_t bSlot);
extern void HSMCI_SetBusWidth(Hsmci *pRMci, uint8_t bBusWidth);
extern uint8_t HSMCI_GetBusWidth(Hsmci *pRMci);

extern void HSMCI_ConfigureMode(Hsmci *pRMci, uint32_t dwMode);
extern uint32_t HSMCI_GetMode(Hsmci *pRMci);
extern void HSMCI_ProofEnable(Hsmci *pRMci, uint8_t bRdProof, uint8_t bWrProof);
extern void HSMCI_PadvCtl(Hsmci *pRMci, uint8_t bPadv);
extern void HSMCI_FByteEnable(Hsmci *pRMci, uint8_t bFByteEn);
extern uint8_t HSMCI_IsFByteEnabled(Hsmci *pRMci);
extern void HSMCI_DivCtrl(Hsmci *pRMci, uint32_t bClkDiv, uint8_t bPwsDiv);

extern void HSMCI_EnableIt(Hsmci *pRMci, uint32_t dwSources);
extern void HSMCI_DisableIt(Hsmci *pRMci, uint32_t dwSources);
extern uint32_t HSMCI_GetItMask(Hsmci *pRMci);

extern void HSMCI_ConfigureTransfer(Hsmci *pRMci, uint16_t wBlkLen,
									uint16_t wCnt);
extern void HSMCI_SetBlockLen(Hsmci *pRMci, uint16_t wBlkSize);
extern void HSMCI_SetBlockCount(Hsmci *pRMci, uint16_t wBlkCnt);

extern void HSMCI_ConfigureCompletionTO(Hsmci *pRMci, uint32_t dwConfigure);
extern void HSMCI_ConfigureDataTO(Hsmci *pRMci, uint32_t dwConfigure);

extern void HSMCI_SendCmd(Hsmci *pRMci, uint32_t dwCmd, uint32_t dwArg);
extern uint32_t HSMCI_GetResponse(Hsmci *pRMci);
extern uint32_t HSMCI_Read(Hsmci *pRMci);
extern void HSMCI_ReadFifo(Hsmci *pRMci, uint8_t *pdwData, uint32_t dwSize);
extern void HSMCI_Write(Hsmci *pRMci, uint32_t dwData);
extern void HSMCI_WriteFifo(Hsmci *pRMci, uint8_t *pdwData, uint32_t dwSize);

extern uint32_t HSMCI_GetStatus(Hsmci *pRMci);

extern void HSMCI_ConfigureDma(Hsmci *pRMci, uint32_t dwConfigure);
extern void HSMCI_EnableDma(Hsmci *pRMci, uint8_t bEnable);

extern void HSMCI_Configure(Hsmci *pRMci, uint32_t dwConfigure);
extern void HSMCI_HsEnable(Hsmci *pRMci, uint8_t bHsEnable);
extern uint8_t HSMCI_IsHsEnabled(Hsmci *pRMci);

extern void HSMCI_BusWidthCtl(Hsmci *pRMci, uint8_t bBusWidth);
extern void HSMCI_SlotCtl(Hsmci *pRMci, uint8_t bSlot);
extern uint8_t HSMCI_GetSlot(Hsmci *pRMci);

extern void HSMCI_ConfigureWP(Hsmci *pRMci, uint32_t dwConfigure);
extern uint32_t HSMCI_GetWPStatus(Hsmci *pRMci);

#ifdef __cplusplus
}
#endif

/**     @}*/
/**@}*/
#endif //#ifndef HSMCID_H