]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/libchip_samv7/include/smc.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained_IAR_Keil / libchip_samv7 / include / smc.h
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2011, 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 *  Definitions and function prototype for smc module\r
34 */\r
35 \r
36 #ifndef _SMC_\r
37 #define _SMC_\r
38 \r
39 /*----------------------------------------------------------------------------\r
40  *        Headers\r
41  *----------------------------------------------------------------------------*/\r
42 #include "chip.h"\r
43 \r
44 /*----------------------------------------------------------------------------\r
45  *        Types\r
46  *----------------------------------------------------------------------------*/\r
47 typedef union _SmcStatus {\r
48     uint8_t BStatus;\r
49     struct _SmcStatusBits {\r
50         uint8_t smcSts:1,    /**< NAND Flash Controller Status */\r
51                 xfrDone:1,   /**< NFC Data Transfer Terminated */\r
52                 cmdDone:1,   /**< Command Done */\r
53                 rbEdge: 1,   /**< Ready/Busy Line 3 Edge Detected*/\r
54            hammingReady:1;   /**< Hamming ecc ready */\r
55     } bStatus;\r
56 } SmcStatus;\r
57 \r
58 /*----------------------------------------------------------------------------\r
59  *        Definitions\r
60  *----------------------------------------------------------------------------*/\r
61 /*\r
62  * NFC definitions\r
63  */\r
64 \r
65 /** Base address of NFC SRAM */\r
66 #define NFC_SRAM_BASE_ADDRESS 0x200000\r
67 /** Base address for NFC Address Command */\r
68 #define NFC_CMD_BASE_ADDR     0x70000000\r
69 \r
70 \r
71 /* -------- NFCADDR_CMD : NFC Address Command -------- */\r
72 #define NFCADDR_CMD_CMD1      (0xFFu <<  2) /* Command Register Value for Cycle 1 */\r
73 #define NFCADDR_CMD_CMD2      (0xFFu << 10) /* Command Register Value for Cycle 2 */\r
74 #define NFCADDR_CMD_VCMD2     (0x1u << 18)  /* Valid Cycle 2 Command */\r
75 #define NFCADDR_CMD_ACYCLE    (0x7u << 19)  /* Number of Address required for the current command */\r
76 #define   NFCADDR_CMD_ACYCLE_NONE    (0x0u << 19) /* No address cycle */\r
77 #define   NFCADDR_CMD_ACYCLE_ONE     (0x1u << 19) /* One address cycle */\r
78 #define   NFCADDR_CMD_ACYCLE_TWO     (0x2u << 19) /* Two address cycles */\r
79 #define   NFCADDR_CMD_ACYCLE_THREE   (0x3u << 19) /* Three address cycles */\r
80 #define   NFCADDR_CMD_ACYCLE_FOUR    (0x4u << 19) /* Four address cycles */\r
81 #define   NFCADDR_CMD_ACYCLE_FIVE    (0x5u << 19) /* Five address cycles */\r
82 #define NFCADDR_CMD_CSID      (0x7u << 22)  /* Chip Select Identifier */\r
83 #define   NFCADDR_CMD_CSID_0                    (0x0u << 22) /* CS0 */\r
84 #define   NFCADDR_CMD_CSID_1                    (0x1u << 22) /* CS1 */\r
85 #define   NFCADDR_CMD_CSID_2                    (0x2u << 22) /* CS2 */\r
86 #define   NFCADDR_CMD_CSID_3                    (0x3u << 22) /* CS3 */\r
87 #define   NFCADDR_CMD_CSID_4                    (0x4u << 22) /* CS4 */\r
88 #define   NFCADDR_CMD_CSID_5                    (0x5u << 22) /* CS5 */\r
89 #define   NFCADDR_CMD_CSID_6                    (0x6u << 22) /* CS6 */\r
90 #define   NFCADDR_CMD_CSID_7                    (0x7u << 22) /* CS7 */\r
91 #define NFCADDR_CMD_DATAEN   (0x1u << 25)  /* NFC Data Enable */\r
92 #define NFCADDR_CMD_DATADIS  (0x0u << 25)  /* NFC Data disable */\r
93 #define NFCADDR_CMD_NFCRD    (0x0u << 26)  /* NFC Read Enable */\r
94 #define NFCADDR_CMD_NFCWR    (0x1u << 26)  /* NFC Write Enable */\r
95 #define NFCADDR_CMD_NFCCMD   (0x1u << 27)  /* NFC Command Enable */\r
96 \r
97 /*\r
98  * ECC definitions (Hsiao Code Errors)\r
99  */\r
100 \r
101 /** A single bit was incorrect but has been recovered. */\r
102 #define Hsiao_ERROR_SINGLEBIT         1\r
103 \r
104 /** The original code has been corrupted. */\r
105 #define Hsiao_ERROR_ECC               2\r
106 \r
107 /** Multiple bits are incorrect in the data and they cannot be corrected. */\r
108 #define Hsiao_ERROR_MULTIPLEBITS      3\r
109 \r
110 /*----------------------------------------------------------------------------\r
111  *        Exported functions\r
112  *----------------------------------------------------------------------------*/\r
113 \r
114 /*\r
115  * NFC functions\r
116  */\r
117 \r
118 extern void SMC_NFC_Configure(uint32_t mode);\r
119 extern void SMC_NFC_Reset(void);\r
120 extern void SMC_NFC_EnableNfc(void);\r
121 extern void SMC_NFC_EnableSpareRead(void);\r
122 extern void SMC_NFC_DisableSpareRead(void);\r
123 extern void SMC_NFC_EnableSpareWrite(void);\r
124 extern void SMC_NFC_DisableSpareWrite(void);\r
125 extern uint8_t SMC_NFC_isSpareRead(void);\r
126 extern uint8_t SMC_NFC_isSpareWrite(void);\r
127 extern uint8_t SMC_NFC_isTransferComplete(void);\r
128 extern uint8_t SMC_NFC_isReadyBusy(void);\r
129 extern uint8_t SMC_NFC_isNfcBusy(void);\r
130 extern uint32_t SMC_NFC_GetStatus(void);\r
131 \r
132 extern void SMC_NFC_SendCommand(uint32_t cmd, uint32_t addressCycle, uint32_t cycle0);\r
133 extern void SMC_NFC_Wait_CommandDone(void);\r
134 extern void SMC_NFC_Wait_XfrDone(void);\r
135 extern void SMC_NFC_Wait_RBbusy(void);\r
136 extern void SMC_NFC_Wait_HammingReady(void);\r
137 \r
138 extern void SMC_ECC_Configure(uint32_t type, uint32_t pageSize);\r
139 extern uint32_t SMC_ECC_GetCorrectoinType(void);\r
140 extern uint8_t SMC_ECC_GetStatus(uint8_t eccNumber);\r
141 \r
142 extern void SMC_ECC_GetValue(uint32_t *ecc);\r
143 extern void SMC_ECC_GetEccParity(uint32_t pageDataSize, uint8_t *code, uint8_t busWidth);\r
144 extern uint8_t SMC_ECC_VerifyHsiao(uint8_t *data, uint32_t size, const uint8_t *originalCode, const uint8_t *verifyCode, uint8_t busWidth);\r
145 #endif /* #ifndef _SMC_ */\r
146 \r