The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_EFM32PG12_STK3402/TOOLCHAIN_ARM_STD/em_ebi.h@171:3a7713b1edbc, 2018-11-08 (annotated)
- Committer:
- AnnaBridge
- Date:
- Thu Nov 08 11:45:42 2018 +0000
- Revision:
- 171:3a7713b1edbc
- Parent:
- TARGET_TB_SENSE_1/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_ebi.h@160:5571c4ff569f
mbed library. Release version 164
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Anna Bridge |
142:4eea097334d6 | 1 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 2 | * @file em_ebi.h |
Anna Bridge |
142:4eea097334d6 | 3 | * @brief External Bus Iterface (EBI) peripheral API |
Anna Bridge |
160:5571c4ff569f | 4 | * @version 5.3.3 |
Anna Bridge |
142:4eea097334d6 | 5 | ******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 6 | * # License |
Anna Bridge |
142:4eea097334d6 | 7 | * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b> |
Anna Bridge |
142:4eea097334d6 | 8 | ******************************************************************************* |
Anna Bridge |
142:4eea097334d6 | 9 | * |
Anna Bridge |
142:4eea097334d6 | 10 | * Permission is granted to anyone to use this software for any purpose, |
Anna Bridge |
142:4eea097334d6 | 11 | * including commercial applications, and to alter it and redistribute it |
Anna Bridge |
142:4eea097334d6 | 12 | * freely, subject to the following restrictions: |
Anna Bridge |
142:4eea097334d6 | 13 | * |
Anna Bridge |
142:4eea097334d6 | 14 | * 1. The origin of this software must not be misrepresented; you must not |
Anna Bridge |
142:4eea097334d6 | 15 | * claim that you wrote the original software. |
Anna Bridge |
142:4eea097334d6 | 16 | * 2. Altered source versions must be plainly marked as such, and must not be |
Anna Bridge |
142:4eea097334d6 | 17 | * misrepresented as being the original software. |
Anna Bridge |
142:4eea097334d6 | 18 | * 3. This notice may not be removed or altered from any source distribution. |
Anna Bridge |
142:4eea097334d6 | 19 | * |
Anna Bridge |
142:4eea097334d6 | 20 | * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no |
Anna Bridge |
142:4eea097334d6 | 21 | * obligation to support this Software. Silicon Labs is providing the |
Anna Bridge |
142:4eea097334d6 | 22 | * Software "AS IS", with no express or implied warranties of any kind, |
Anna Bridge |
142:4eea097334d6 | 23 | * including, but not limited to, any implied warranties of merchantability |
Anna Bridge |
142:4eea097334d6 | 24 | * or fitness for any particular purpose or warranties against infringement |
Anna Bridge |
142:4eea097334d6 | 25 | * of any proprietary rights of a third party. |
Anna Bridge |
142:4eea097334d6 | 26 | * |
Anna Bridge |
142:4eea097334d6 | 27 | * Silicon Labs will not be liable for any consequential, incidental, or |
Anna Bridge |
142:4eea097334d6 | 28 | * special damages, or any other relief, or for any claim by any third party, |
Anna Bridge |
142:4eea097334d6 | 29 | * arising from your use of this Software. |
Anna Bridge |
142:4eea097334d6 | 30 | * |
Anna Bridge |
142:4eea097334d6 | 31 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 32 | |
Anna Bridge |
142:4eea097334d6 | 33 | #ifndef EM_EBI_H |
Anna Bridge |
142:4eea097334d6 | 34 | #define EM_EBI_H |
Anna Bridge |
142:4eea097334d6 | 35 | |
Anna Bridge |
142:4eea097334d6 | 36 | #include "em_device.h" |
Anna Bridge |
142:4eea097334d6 | 37 | #if defined(EBI_COUNT) && (EBI_COUNT > 0) |
Anna Bridge |
142:4eea097334d6 | 38 | |
Anna Bridge |
142:4eea097334d6 | 39 | #include <stdint.h> |
Anna Bridge |
142:4eea097334d6 | 40 | #include <stdbool.h> |
Anna Bridge |
142:4eea097334d6 | 41 | #include "em_assert.h" |
Anna Bridge |
142:4eea097334d6 | 42 | |
Anna Bridge |
142:4eea097334d6 | 43 | #ifdef __cplusplus |
Anna Bridge |
142:4eea097334d6 | 44 | extern "C" { |
Anna Bridge |
142:4eea097334d6 | 45 | #endif |
Anna Bridge |
142:4eea097334d6 | 46 | |
Anna Bridge |
142:4eea097334d6 | 47 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 48 | * @addtogroup emlib |
Anna Bridge |
142:4eea097334d6 | 49 | * @{ |
Anna Bridge |
142:4eea097334d6 | 50 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 51 | |
Anna Bridge |
142:4eea097334d6 | 52 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 53 | * @addtogroup EBI |
Anna Bridge |
142:4eea097334d6 | 54 | * @{ |
Anna Bridge |
142:4eea097334d6 | 55 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 56 | |
Anna Bridge |
142:4eea097334d6 | 57 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 58 | * @verbatim |
Anna Bridge |
142:4eea097334d6 | 59 | * |
Anna Bridge |
142:4eea097334d6 | 60 | * --------- --------- |
Anna Bridge |
142:4eea097334d6 | 61 | * | | /| |\ | Ext. | |
Anna Bridge |
142:4eea097334d6 | 62 | * | EBI | / --------- \ | Async | |
Anna Bridge |
142:4eea097334d6 | 63 | * | | \ --------- / | Device| |
Anna Bridge |
142:4eea097334d6 | 64 | * | | \| |/ | | |
Anna Bridge |
142:4eea097334d6 | 65 | * --------- --------- |
Anna Bridge |
142:4eea097334d6 | 66 | * Parallel interface |
Anna Bridge |
142:4eea097334d6 | 67 | * |
Anna Bridge |
142:4eea097334d6 | 68 | * @endverbatim |
Anna Bridge |
142:4eea097334d6 | 69 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 70 | |
Anna Bridge |
142:4eea097334d6 | 71 | /******************************************************************************* |
Anna Bridge |
142:4eea097334d6 | 72 | ******************************* DEFINES *********************************** |
Anna Bridge |
142:4eea097334d6 | 73 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 74 | |
Anna Bridge |
142:4eea097334d6 | 75 | #define EBI_BANK0 (uint32_t)(1 << 1) /**< EBI address bank 0 */ |
Anna Bridge |
142:4eea097334d6 | 76 | #define EBI_BANK1 (uint32_t)(1 << 2) /**< EBI address bank 1 */ |
Anna Bridge |
142:4eea097334d6 | 77 | #define EBI_BANK2 (uint32_t)(1 << 3) /**< EBI address bank 2 */ |
Anna Bridge |
142:4eea097334d6 | 78 | #define EBI_BANK3 (uint32_t)(1 << 4) /**< EBI address bank 3 */ |
Anna Bridge |
142:4eea097334d6 | 79 | |
Anna Bridge |
142:4eea097334d6 | 80 | #define EBI_CS0 (uint32_t)(1 << 1) /**< EBI chip select line 0 */ |
Anna Bridge |
142:4eea097334d6 | 81 | #define EBI_CS1 (uint32_t)(1 << 2) /**< EBI chip select line 1 */ |
Anna Bridge |
142:4eea097334d6 | 82 | #define EBI_CS2 (uint32_t)(1 << 3) /**< EBI chip select line 2 */ |
Anna Bridge |
142:4eea097334d6 | 83 | #define EBI_CS3 (uint32_t)(1 << 4) /**< EBI chip select line 3 */ |
Anna Bridge |
142:4eea097334d6 | 84 | |
Anna Bridge |
160:5571c4ff569f | 85 | #if defined(_EBI_ROUTE_MASK) && defined(_EBI_ROUTE_APEN_MASK) |
Anna Bridge |
160:5571c4ff569f | 86 | #define EBI_GENERIC_ALB_A0 EBI_ROUTE_ALB_A0 |
Anna Bridge |
160:5571c4ff569f | 87 | #define EBI_GENERIC_ALB_A8 EBI_ROUTE_ALB_A8 |
Anna Bridge |
160:5571c4ff569f | 88 | #define EBI_GENERIC_ALB_A16 EBI_ROUTE_ALB_A16 |
Anna Bridge |
160:5571c4ff569f | 89 | #define EBI_GENERIC_ALB_A24 EBI_ROUTE_ALB_A24 |
Anna Bridge |
160:5571c4ff569f | 90 | #define EBI_GENERIC_APEN_A0 EBI_ROUTE_APEN_A0 |
Anna Bridge |
160:5571c4ff569f | 91 | #define EBI_GENERIC_APEN_A5 EBI_ROUTE_APEN_A5 |
Anna Bridge |
160:5571c4ff569f | 92 | #define EBI_GENERIC_APEN_A6 EBI_ROUTE_APEN_A6 |
Anna Bridge |
160:5571c4ff569f | 93 | #define EBI_GENERIC_APEN_A7 EBI_ROUTE_APEN_A7 |
Anna Bridge |
160:5571c4ff569f | 94 | #define EBI_GENERIC_APEN_A8 EBI_ROUTE_APEN_A8 |
Anna Bridge |
160:5571c4ff569f | 95 | #define EBI_GENERIC_APEN_A9 EBI_ROUTE_APEN_A9 |
Anna Bridge |
160:5571c4ff569f | 96 | #define EBI_GENERIC_APEN_A10 EBI_ROUTE_APEN_A10 |
Anna Bridge |
160:5571c4ff569f | 97 | #define EBI_GENERIC_APEN_A11 EBI_ROUTE_APEN_A11 |
Anna Bridge |
160:5571c4ff569f | 98 | #define EBI_GENERIC_APEN_A12 EBI_ROUTE_APEN_A12 |
Anna Bridge |
160:5571c4ff569f | 99 | #define EBI_GENERIC_APEN_A13 EBI_ROUTE_APEN_A13 |
Anna Bridge |
160:5571c4ff569f | 100 | #define EBI_GENERIC_APEN_A14 EBI_ROUTE_APEN_A14 |
Anna Bridge |
160:5571c4ff569f | 101 | #define EBI_GENERIC_APEN_A15 EBI_ROUTE_APEN_A15 |
Anna Bridge |
160:5571c4ff569f | 102 | #define EBI_GENERIC_APEN_A16 EBI_ROUTE_APEN_A16 |
Anna Bridge |
160:5571c4ff569f | 103 | #define EBI_GENERIC_APEN_A17 EBI_ROUTE_APEN_A17 |
Anna Bridge |
160:5571c4ff569f | 104 | #define EBI_GENERIC_APEN_A18 EBI_ROUTE_APEN_A18 |
Anna Bridge |
160:5571c4ff569f | 105 | #define EBI_GENERIC_APEN_A19 EBI_ROUTE_APEN_A19 |
Anna Bridge |
160:5571c4ff569f | 106 | #define EBI_GENERIC_APEN_A20 EBI_ROUTE_APEN_A20 |
Anna Bridge |
160:5571c4ff569f | 107 | #define EBI_GENERIC_APEN_A21 EBI_ROUTE_APEN_A21 |
Anna Bridge |
160:5571c4ff569f | 108 | #define EBI_GENERIC_APEN_A22 EBI_ROUTE_APEN_A22 |
Anna Bridge |
160:5571c4ff569f | 109 | #define EBI_GENERIC_APEN_A23 EBI_ROUTE_APEN_A23 |
Anna Bridge |
160:5571c4ff569f | 110 | #define EBI_GENERIC_APEN_A24 EBI_ROUTE_APEN_A24 |
Anna Bridge |
160:5571c4ff569f | 111 | #define EBI_GENERIC_APEN_A25 EBI_ROUTE_APEN_A25 |
Anna Bridge |
160:5571c4ff569f | 112 | #define EBI_GENERIC_APEN_A26 EBI_ROUTE_APEN_A26 |
Anna Bridge |
160:5571c4ff569f | 113 | #define EBI_GENERIC_APEN_A27 EBI_ROUTE_APEN_A27 |
Anna Bridge |
160:5571c4ff569f | 114 | #define EBI_GENERIC_APEN_A28 EBI_ROUTE_APEN_A28 |
Anna Bridge |
160:5571c4ff569f | 115 | #elif defined(_EBI_ROUTEPEN_MASK) |
Anna Bridge |
160:5571c4ff569f | 116 | #define EBI_GENERIC_ALB_A0 EBI_ROUTEPEN_ALB_A0 |
Anna Bridge |
160:5571c4ff569f | 117 | #define EBI_GENERIC_ALB_A8 EBI_ROUTEPEN_ALB_A8 |
Anna Bridge |
160:5571c4ff569f | 118 | #define EBI_GENERIC_ALB_A16 EBI_ROUTEPEN_ALB_A16 |
Anna Bridge |
160:5571c4ff569f | 119 | #define EBI_GENERIC_ALB_A24 EBI_ROUTEPEN_ALB_A24 |
Anna Bridge |
160:5571c4ff569f | 120 | #define EBI_GENERIC_APEN_A0 EBI_ROUTEPEN_APEN_A0 |
Anna Bridge |
160:5571c4ff569f | 121 | #define EBI_GENERIC_APEN_A5 EBI_ROUTEPEN_APEN_A5 |
Anna Bridge |
160:5571c4ff569f | 122 | #define EBI_GENERIC_APEN_A6 EBI_ROUTEPEN_APEN_A6 |
Anna Bridge |
160:5571c4ff569f | 123 | #define EBI_GENERIC_APEN_A7 EBI_ROUTEPEN_APEN_A7 |
Anna Bridge |
160:5571c4ff569f | 124 | #define EBI_GENERIC_APEN_A8 EBI_ROUTEPEN_APEN_A8 |
Anna Bridge |
160:5571c4ff569f | 125 | #define EBI_GENERIC_APEN_A9 EBI_ROUTEPEN_APEN_A9 |
Anna Bridge |
160:5571c4ff569f | 126 | #define EBI_GENERIC_APEN_A10 EBI_ROUTEPEN_APEN_A10 |
Anna Bridge |
160:5571c4ff569f | 127 | #define EBI_GENERIC_APEN_A11 EBI_ROUTEPEN_APEN_A11 |
Anna Bridge |
160:5571c4ff569f | 128 | #define EBI_GENERIC_APEN_A12 EBI_ROUTEPEN_APEN_A12 |
Anna Bridge |
160:5571c4ff569f | 129 | #define EBI_GENERIC_APEN_A13 EBI_ROUTEPEN_APEN_A13 |
Anna Bridge |
160:5571c4ff569f | 130 | #define EBI_GENERIC_APEN_A14 EBI_ROUTEPEN_APEN_A14 |
Anna Bridge |
160:5571c4ff569f | 131 | #define EBI_GENERIC_APEN_A15 EBI_ROUTEPEN_APEN_A15 |
Anna Bridge |
160:5571c4ff569f | 132 | #define EBI_GENERIC_APEN_A16 EBI_ROUTEPEN_APEN_A16 |
Anna Bridge |
160:5571c4ff569f | 133 | #define EBI_GENERIC_APEN_A17 EBI_ROUTEPEN_APEN_A17 |
Anna Bridge |
160:5571c4ff569f | 134 | #define EBI_GENERIC_APEN_A18 EBI_ROUTEPEN_APEN_A18 |
Anna Bridge |
160:5571c4ff569f | 135 | #define EBI_GENERIC_APEN_A19 EBI_ROUTEPEN_APEN_A19 |
Anna Bridge |
160:5571c4ff569f | 136 | #define EBI_GENERIC_APEN_A20 EBI_ROUTEPEN_APEN_A20 |
Anna Bridge |
160:5571c4ff569f | 137 | #define EBI_GENERIC_APEN_A21 EBI_ROUTEPEN_APEN_A21 |
Anna Bridge |
160:5571c4ff569f | 138 | #define EBI_GENERIC_APEN_A22 EBI_ROUTEPEN_APEN_A22 |
Anna Bridge |
160:5571c4ff569f | 139 | #define EBI_GENERIC_APEN_A23 EBI_ROUTEPEN_APEN_A23 |
Anna Bridge |
160:5571c4ff569f | 140 | #define EBI_GENERIC_APEN_A24 EBI_ROUTEPEN_APEN_A24 |
Anna Bridge |
160:5571c4ff569f | 141 | #define EBI_GENERIC_APEN_A25 EBI_ROUTEPEN_APEN_A25 |
Anna Bridge |
160:5571c4ff569f | 142 | #define EBI_GENERIC_APEN_A26 EBI_ROUTEPEN_APEN_A26 |
Anna Bridge |
160:5571c4ff569f | 143 | #define EBI_GENERIC_APEN_A27 EBI_ROUTEPEN_APEN_A27 |
Anna Bridge |
160:5571c4ff569f | 144 | #define EBI_GENERIC_APEN_A28 EBI_ROUTEPEN_APEN_A28 |
Anna Bridge |
160:5571c4ff569f | 145 | #endif |
Anna Bridge |
160:5571c4ff569f | 146 | |
Anna Bridge |
142:4eea097334d6 | 147 | /******************************************************************************* |
Anna Bridge |
142:4eea097334d6 | 148 | ******************************** ENUMS ************************************ |
Anna Bridge |
142:4eea097334d6 | 149 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 150 | |
Anna Bridge |
142:4eea097334d6 | 151 | /** EBI Mode of operation */ |
Anna Bridge |
160:5571c4ff569f | 152 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 153 | /** 8 data bits, 8 address bits */ |
Anna Bridge |
142:4eea097334d6 | 154 | ebiModeD8A8 = EBI_CTRL_MODE_D8A8, |
Anna Bridge |
142:4eea097334d6 | 155 | /** 16 data bits, 16 address bits, using address latch enable */ |
Anna Bridge |
142:4eea097334d6 | 156 | ebiModeD16A16ALE = EBI_CTRL_MODE_D16A16ALE, |
Anna Bridge |
142:4eea097334d6 | 157 | /** 8 data bits, 24 address bits, using address latch enable */ |
Anna Bridge |
142:4eea097334d6 | 158 | ebiModeD8A24ALE = EBI_CTRL_MODE_D8A24ALE, |
Anna Bridge |
160:5571c4ff569f | 159 | #if defined(EBI_CTRL_MODE_D16) |
Anna Bridge |
142:4eea097334d6 | 160 | /** Mode D16 */ |
Anna Bridge |
142:4eea097334d6 | 161 | ebiModeD16 = EBI_CTRL_MODE_D16, |
Anna Bridge |
142:4eea097334d6 | 162 | #endif |
Anna Bridge |
142:4eea097334d6 | 163 | } EBI_Mode_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 164 | |
Anna Bridge |
142:4eea097334d6 | 165 | /** EBI Polarity configuration */ |
Anna Bridge |
160:5571c4ff569f | 166 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 167 | /** Active Low */ |
Anna Bridge |
142:4eea097334d6 | 168 | ebiActiveLow = 0, |
Anna Bridge |
142:4eea097334d6 | 169 | /** Active High */ |
Anna Bridge |
142:4eea097334d6 | 170 | ebiActiveHigh = 1 |
Anna Bridge |
142:4eea097334d6 | 171 | } EBI_Polarity_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 172 | |
Anna Bridge |
142:4eea097334d6 | 173 | /** EBI Pin Line types */ |
Anna Bridge |
160:5571c4ff569f | 174 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 175 | /** Address Ready line */ |
Anna Bridge |
142:4eea097334d6 | 176 | ebiLineARDY, |
Anna Bridge |
142:4eea097334d6 | 177 | /** Address Latch Enable line */ |
Anna Bridge |
142:4eea097334d6 | 178 | ebiLineALE, |
Anna Bridge |
142:4eea097334d6 | 179 | /** Write Enable line */ |
Anna Bridge |
142:4eea097334d6 | 180 | ebiLineWE, |
Anna Bridge |
142:4eea097334d6 | 181 | /** Read Enable line */ |
Anna Bridge |
142:4eea097334d6 | 182 | ebiLineRE, |
Anna Bridge |
142:4eea097334d6 | 183 | /** Chip Select line */ |
Anna Bridge |
142:4eea097334d6 | 184 | ebiLineCS, |
Anna Bridge |
160:5571c4ff569f | 185 | #if defined(_EBI_POLARITY_BLPOL_MASK) |
Anna Bridge |
142:4eea097334d6 | 186 | /** BL line */ |
Anna Bridge |
142:4eea097334d6 | 187 | ebiLineBL, |
Anna Bridge |
142:4eea097334d6 | 188 | #endif |
Anna Bridge |
160:5571c4ff569f | 189 | #if defined(_EBI_TFTPOLARITY_MASK) |
Anna Bridge |
142:4eea097334d6 | 190 | /** TFT VSYNC line */ |
Anna Bridge |
142:4eea097334d6 | 191 | ebiLineTFTVSync, |
Anna Bridge |
142:4eea097334d6 | 192 | /** TFT HSYNC line */ |
Anna Bridge |
142:4eea097334d6 | 193 | ebiLineTFTHSync, |
Anna Bridge |
142:4eea097334d6 | 194 | /** TFT Data enable line */ |
Anna Bridge |
142:4eea097334d6 | 195 | ebiLineTFTDataEn, |
Anna Bridge |
142:4eea097334d6 | 196 | /** TFT DCLK line */ |
Anna Bridge |
142:4eea097334d6 | 197 | ebiLineTFTDClk, |
Anna Bridge |
142:4eea097334d6 | 198 | /** TFT Chip select line */ |
Anna Bridge |
142:4eea097334d6 | 199 | ebiLineTFTCS, |
Anna Bridge |
142:4eea097334d6 | 200 | #endif |
Anna Bridge |
142:4eea097334d6 | 201 | } EBI_Line_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 202 | |
Anna Bridge |
160:5571c4ff569f | 203 | #if !defined(_EFM32_GECKO_FAMILY) |
Anna Bridge |
142:4eea097334d6 | 204 | /** Address Pin Enable, lower limit - lower range of pins to enable */ |
Anna Bridge |
160:5571c4ff569f | 205 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 206 | /** Adress lines EBI_A[0] and upwards are enabled by APEN */ |
Anna Bridge |
160:5571c4ff569f | 207 | ebiALowA0 = EBI_GENERIC_ALB_A0, |
Anna Bridge |
142:4eea097334d6 | 208 | /** Adress lines EBI_A[8] and upwards are enabled by APEN */ |
Anna Bridge |
160:5571c4ff569f | 209 | ebiALowA8 = EBI_GENERIC_ALB_A8, |
Anna Bridge |
142:4eea097334d6 | 210 | /** Adress lines EBI_A[16] and upwards are enabled by APEN */ |
Anna Bridge |
160:5571c4ff569f | 211 | ebiALowA16 = EBI_GENERIC_ALB_A16, |
Anna Bridge |
142:4eea097334d6 | 212 | /** Adress lines EBI_A[24] and upwards are enabled by APEN */ |
Anna Bridge |
160:5571c4ff569f | 213 | ebiALowA24 = EBI_GENERIC_ALB_A24, |
Anna Bridge |
142:4eea097334d6 | 214 | } EBI_ALow_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 215 | |
Anna Bridge |
142:4eea097334d6 | 216 | /** Adress Pin Enable, high limit - higher limit of pins to enable */ |
Anna Bridge |
160:5571c4ff569f | 217 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 218 | /** All EBI_A pins are disabled */ |
Anna Bridge |
160:5571c4ff569f | 219 | ebiAHighA0 = EBI_GENERIC_APEN_A0, |
Anna Bridge |
142:4eea097334d6 | 220 | /** All EBI_A[4:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 221 | ebiAHighA5 = EBI_GENERIC_APEN_A5, |
Anna Bridge |
142:4eea097334d6 | 222 | /** All EBI_A[5:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 223 | ebiAHighA6 = EBI_GENERIC_APEN_A6, |
Anna Bridge |
142:4eea097334d6 | 224 | /** All EBI_A[6:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 225 | ebiAHighA7 = EBI_GENERIC_APEN_A7, |
Anna Bridge |
142:4eea097334d6 | 226 | /** All EBI_A[7:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 227 | ebiAHighA8 = EBI_GENERIC_APEN_A8, |
Anna Bridge |
142:4eea097334d6 | 228 | /** All EBI_A[8:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 229 | ebiAHighA9 = EBI_GENERIC_APEN_A9, |
Anna Bridge |
142:4eea097334d6 | 230 | /** All EBI_A[9:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 231 | ebiAHighA10 = EBI_GENERIC_APEN_A10, |
Anna Bridge |
142:4eea097334d6 | 232 | /** All EBI_A[10:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 233 | ebiAHighA11 = EBI_GENERIC_APEN_A11, |
Anna Bridge |
142:4eea097334d6 | 234 | /** All EBI_A[11:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 235 | ebiAHighA12 = EBI_GENERIC_APEN_A12, |
Anna Bridge |
142:4eea097334d6 | 236 | /** All EBI_A[12:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 237 | ebiAHighA13 = EBI_GENERIC_APEN_A13, |
Anna Bridge |
142:4eea097334d6 | 238 | /** All EBI_A[13:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 239 | ebiAHighA14 = EBI_GENERIC_APEN_A14, |
Anna Bridge |
142:4eea097334d6 | 240 | /** All EBI_A[14:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 241 | ebiAHighA15 = EBI_GENERIC_APEN_A15, |
Anna Bridge |
142:4eea097334d6 | 242 | /** All EBI_A[15:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 243 | ebiAHighA16 = EBI_GENERIC_APEN_A16, |
Anna Bridge |
142:4eea097334d6 | 244 | /** All EBI_A[16:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 245 | ebiAHighA17 = EBI_GENERIC_APEN_A17, |
Anna Bridge |
142:4eea097334d6 | 246 | /** All EBI_A[17:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 247 | ebiAHighA18 = EBI_GENERIC_APEN_A18, |
Anna Bridge |
142:4eea097334d6 | 248 | /** All EBI_A[18:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 249 | ebiAHighA19 = EBI_GENERIC_APEN_A19, |
Anna Bridge |
142:4eea097334d6 | 250 | /** All EBI_A[19:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 251 | ebiAHighA20 = EBI_GENERIC_APEN_A20, |
Anna Bridge |
142:4eea097334d6 | 252 | /** All EBI_A[20:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 253 | ebiAHighA21 = EBI_GENERIC_APEN_A21, |
Anna Bridge |
142:4eea097334d6 | 254 | /** All EBI_A[21:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 255 | ebiAHighA22 = EBI_GENERIC_APEN_A22, |
Anna Bridge |
142:4eea097334d6 | 256 | /** All EBI_A[22:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 257 | ebiAHighA23 = EBI_GENERIC_APEN_A23, |
Anna Bridge |
142:4eea097334d6 | 258 | /** All EBI_A[23:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 259 | ebiAHighA24 = EBI_GENERIC_APEN_A24, |
Anna Bridge |
142:4eea097334d6 | 260 | /** All EBI_A[24:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 261 | ebiAHighA25 = EBI_GENERIC_APEN_A25, |
Anna Bridge |
142:4eea097334d6 | 262 | /** All EBI_A[25:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 263 | ebiAHighA26 = EBI_GENERIC_APEN_A26, |
Anna Bridge |
142:4eea097334d6 | 264 | /** All EBI_A[26:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 265 | ebiAHighA27 = EBI_GENERIC_APEN_A27, |
Anna Bridge |
142:4eea097334d6 | 266 | /** All EBI_A[27:ALow] are enabled */ |
Anna Bridge |
160:5571c4ff569f | 267 | ebiAHighA28 = EBI_GENERIC_APEN_A28, |
Anna Bridge |
142:4eea097334d6 | 268 | } EBI_AHigh_TypeDef; |
Anna Bridge |
160:5571c4ff569f | 269 | #endif |
Anna Bridge |
142:4eea097334d6 | 270 | |
Anna Bridge |
160:5571c4ff569f | 271 | #if defined(_EBI_ROUTE_LOCATION_MASK) |
Anna Bridge |
142:4eea097334d6 | 272 | /** EBI I/O Alternate Pin Location */ |
Anna Bridge |
142:4eea097334d6 | 273 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 274 | /** EBI PIN I/O Location 0 */ |
Anna Bridge |
142:4eea097334d6 | 275 | ebiLocation0 = EBI_ROUTE_LOCATION_LOC0, |
Anna Bridge |
142:4eea097334d6 | 276 | /** EBI PIN I/O Location 1 */ |
Anna Bridge |
142:4eea097334d6 | 277 | ebiLocation1 = EBI_ROUTE_LOCATION_LOC1, |
Anna Bridge |
142:4eea097334d6 | 278 | /** EBI PIN I/O Location 2 */ |
Anna Bridge |
142:4eea097334d6 | 279 | ebiLocation2 = EBI_ROUTE_LOCATION_LOC2 |
Anna Bridge |
142:4eea097334d6 | 280 | } EBI_Location_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 281 | #endif |
Anna Bridge |
142:4eea097334d6 | 282 | |
Anna Bridge |
160:5571c4ff569f | 283 | #if defined(_EBI_TFTCTRL_MASK) |
Anna Bridge |
142:4eea097334d6 | 284 | /* TFT support */ |
Anna Bridge |
160:5571c4ff569f | 285 | |
Anna Bridge |
142:4eea097334d6 | 286 | /** EBI TFT Graphics Bank Select */ |
Anna Bridge |
160:5571c4ff569f | 287 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 288 | /** Memory BANK0 contains frame buffer */ |
Anna Bridge |
142:4eea097334d6 | 289 | ebiTFTBank0 = EBI_TFTCTRL_BANKSEL_BANK0, |
Anna Bridge |
142:4eea097334d6 | 290 | /** Memory BANK1 contains frame buffer */ |
Anna Bridge |
142:4eea097334d6 | 291 | ebiTFTBank1 = EBI_TFTCTRL_BANKSEL_BANK1, |
Anna Bridge |
142:4eea097334d6 | 292 | /** Memory BANK2 contains frame buffer */ |
Anna Bridge |
142:4eea097334d6 | 293 | ebiTFTBank2 = EBI_TFTCTRL_BANKSEL_BANK2, |
Anna Bridge |
142:4eea097334d6 | 294 | /** Memory BANK3 contains frame buffer */ |
Anna Bridge |
142:4eea097334d6 | 295 | ebiTFTBank3 = EBI_TFTCTRL_BANKSEL_BANK3 |
Anna Bridge |
142:4eea097334d6 | 296 | } EBI_TFTBank_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 297 | |
Anna Bridge |
142:4eea097334d6 | 298 | /** Masking and Alpha blending source color*/ |
Anna Bridge |
160:5571c4ff569f | 299 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 300 | /** Use memory as source color for masking/alpha blending */ |
Anna Bridge |
142:4eea097334d6 | 301 | ebiTFTColorSrcMem = EBI_TFTCTRL_COLOR1SRC_MEM, |
Anna Bridge |
142:4eea097334d6 | 302 | /** Use PIXEL1 register as source color for masking/alpha blending */ |
Anna Bridge |
142:4eea097334d6 | 303 | ebiTFTColorSrcPixel1 = EBI_TFTCTRL_COLOR1SRC_PIXEL1, |
Anna Bridge |
142:4eea097334d6 | 304 | } EBI_TFTColorSrc_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 305 | |
Anna Bridge |
142:4eea097334d6 | 306 | /** Bus Data Interleave Mode */ |
Anna Bridge |
160:5571c4ff569f | 307 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 308 | /** Unlimited interleaved accesses per EBI_DCLK period. Can cause jitter */ |
Anna Bridge |
142:4eea097334d6 | 309 | ebiTFTInterleaveUnlimited = EBI_TFTCTRL_INTERLEAVE_UNLIMITED, |
Anna Bridge |
142:4eea097334d6 | 310 | /** Allow 1 interleaved access per EBI_DCLK period */ |
Anna Bridge |
142:4eea097334d6 | 311 | ebiTFTInterleaveOnePerDClk = EBI_TFTCTRL_INTERLEAVE_ONEPERDCLK, |
Anna Bridge |
142:4eea097334d6 | 312 | /** Only allow accesses during porch periods */ |
Anna Bridge |
142:4eea097334d6 | 313 | ebiTFTInterleavePorch = EBI_TFTCTRL_INTERLEAVE_PORCH, |
Anna Bridge |
142:4eea097334d6 | 314 | } EBI_TFTInterleave_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 315 | |
Anna Bridge |
142:4eea097334d6 | 316 | /** Control frame base pointer copy */ |
Anna Bridge |
160:5571c4ff569f | 317 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 318 | /** Trigger update of frame buffer pointer on vertical sync */ |
Anna Bridge |
142:4eea097334d6 | 319 | ebiTFTFrameBufTriggerVSync = EBI_TFTCTRL_FBCTRIG_VSYNC, |
Anna Bridge |
142:4eea097334d6 | 320 | /** Trigger update of frame buffer pointer on horizontal sync */ |
Anna Bridge |
142:4eea097334d6 | 321 | ebiTFTFrameBufTriggerHSync = EBI_TFTCTRL_FBCTRIG_HSYNC, |
Anna Bridge |
142:4eea097334d6 | 322 | } EBI_TFTFrameBufTrigger_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 323 | |
Anna Bridge |
142:4eea097334d6 | 324 | /** Control of mask and alpha blending mode */ |
Anna Bridge |
160:5571c4ff569f | 325 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 326 | /** Masking and blending are disabled */ |
Anna Bridge |
142:4eea097334d6 | 327 | ebiTFTMBDisabled = EBI_TFTCTRL_MASKBLEND_DISABLED, |
Anna Bridge |
142:4eea097334d6 | 328 | /** Internal masking */ |
Anna Bridge |
142:4eea097334d6 | 329 | ebiTFTMBIMask = EBI_TFTCTRL_MASKBLEND_IMASK, |
Anna Bridge |
142:4eea097334d6 | 330 | /** Internal alpha blending */ |
Anna Bridge |
142:4eea097334d6 | 331 | ebiTFTMBIAlpha = EBI_TFTCTRL_MASKBLEND_IALPHA, |
Anna Bridge |
142:4eea097334d6 | 332 | /** Internal masking and alpha blending are enabled */ |
Anna Bridge |
160:5571c4ff569f | 333 | #if defined(EBI_TFTCTRL_MASKBLEND_IMASKIALPHA) |
Anna Bridge |
142:4eea097334d6 | 334 | ebiTFTMBIMaskAlpha = EBI_TFTCTRL_MASKBLEND_IMASKIALPHA, |
Anna Bridge |
160:5571c4ff569f | 335 | #else |
Anna Bridge |
160:5571c4ff569f | 336 | ebiTFTMBIMaskAlpha = EBI_TFTCTRL_MASKBLEND_IMASKALPHA, |
Anna Bridge |
160:5571c4ff569f | 337 | #endif |
Anna Bridge |
160:5571c4ff569f | 338 | #if defined(EBI_TFTCTRL_MASKBLEND_EMASK) |
Anna Bridge |
142:4eea097334d6 | 339 | /** External masking */ |
Anna Bridge |
142:4eea097334d6 | 340 | ebiTFTMBEMask = EBI_TFTCTRL_MASKBLEND_EMASK, |
Anna Bridge |
142:4eea097334d6 | 341 | /** External alpha blending */ |
Anna Bridge |
142:4eea097334d6 | 342 | ebiTFTMBEAlpha = EBI_TFTCTRL_MASKBLEND_EALPHA, |
Anna Bridge |
142:4eea097334d6 | 343 | /** External masking and alpha blending */ |
Anna Bridge |
142:4eea097334d6 | 344 | ebiTFTMBEMaskAlpha = EBI_TFTCTRL_MASKBLEND_EMASKEALPHA, |
Anna Bridge |
160:5571c4ff569f | 345 | #else |
Anna Bridge |
160:5571c4ff569f | 346 | /** External masking */ |
Anna Bridge |
160:5571c4ff569f | 347 | ebiTFTMBEMask = EBI_TFTCTRL_MASKBLEND_EFBMASK, |
Anna Bridge |
160:5571c4ff569f | 348 | /** External alpha blending */ |
Anna Bridge |
160:5571c4ff569f | 349 | ebiTFTMBEAlpha = EBI_TFTCTRL_MASKBLEND_EFBALPHA, |
Anna Bridge |
160:5571c4ff569f | 350 | /** External masking and alpha blending */ |
Anna Bridge |
160:5571c4ff569f | 351 | ebiTFTMBEMaskAlpha = EBI_TFTCTRL_MASKBLEND_EFBMASKALPHA, |
Anna Bridge |
160:5571c4ff569f | 352 | #endif |
Anna Bridge |
142:4eea097334d6 | 353 | } EBI_TFTMaskBlend_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 354 | |
Anna Bridge |
142:4eea097334d6 | 355 | /** TFT Direct Drive mode */ |
Anna Bridge |
160:5571c4ff569f | 356 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 357 | /** Disabled */ |
Anna Bridge |
142:4eea097334d6 | 358 | ebiTFTDDModeDisabled = EBI_TFTCTRL_DD_DISABLED, |
Anna Bridge |
142:4eea097334d6 | 359 | /** Direct Drive from internal memory */ |
Anna Bridge |
142:4eea097334d6 | 360 | ebiTFTDDModeInternal = EBI_TFTCTRL_DD_INTERNAL, |
Anna Bridge |
142:4eea097334d6 | 361 | /** Direct Drive from external memory */ |
Anna Bridge |
142:4eea097334d6 | 362 | ebiTFTDDModeExternal = EBI_TFTCTRL_DD_EXTERNAL, |
Anna Bridge |
142:4eea097334d6 | 363 | } EBI_TFTDDMode_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 364 | |
Anna Bridge |
142:4eea097334d6 | 365 | /** TFT Data Increment Width */ |
Anna Bridge |
160:5571c4ff569f | 366 | typedef enum { |
Anna Bridge |
142:4eea097334d6 | 367 | /** Pixel increments are 1 byte at a time */ |
Anna Bridge |
142:4eea097334d6 | 368 | ebiTFTWidthByte = EBI_TFTCTRL_WIDTH_BYTE, |
Anna Bridge |
142:4eea097334d6 | 369 | /** Pixel increments are 2 bytes (half word) */ |
Anna Bridge |
142:4eea097334d6 | 370 | ebiTFTWidthHalfWord = EBI_TFTCTRL_WIDTH_HALFWORD, |
Anna Bridge |
142:4eea097334d6 | 371 | } EBI_TFTWidth_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 372 | |
Anna Bridge |
160:5571c4ff569f | 373 | #endif // _EBI_TFTCTRL_MASK |
Anna Bridge |
142:4eea097334d6 | 374 | |
Anna Bridge |
142:4eea097334d6 | 375 | /******************************************************************************* |
Anna Bridge |
142:4eea097334d6 | 376 | ******************************* STRUCTS *********************************** |
Anna Bridge |
142:4eea097334d6 | 377 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 378 | |
Anna Bridge |
142:4eea097334d6 | 379 | /** EBI Initialization structure */ |
Anna Bridge |
160:5571c4ff569f | 380 | typedef struct { |
Anna Bridge |
142:4eea097334d6 | 381 | /** EBI operation mode, data and address limits */ |
Anna Bridge |
142:4eea097334d6 | 382 | EBI_Mode_TypeDef mode; |
Anna Bridge |
142:4eea097334d6 | 383 | /** Address Ready pin polarity, active high or low */ |
Anna Bridge |
142:4eea097334d6 | 384 | EBI_Polarity_TypeDef ardyPolarity; |
Anna Bridge |
142:4eea097334d6 | 385 | /** Address Latch Enable pin polarity, active high or low */ |
Anna Bridge |
142:4eea097334d6 | 386 | EBI_Polarity_TypeDef alePolarity; |
Anna Bridge |
142:4eea097334d6 | 387 | /** Write Enable pin polarity, active high or low */ |
Anna Bridge |
142:4eea097334d6 | 388 | EBI_Polarity_TypeDef wePolarity; |
Anna Bridge |
142:4eea097334d6 | 389 | /** Read Enable pin polarity, active high or low */ |
Anna Bridge |
142:4eea097334d6 | 390 | EBI_Polarity_TypeDef rePolarity; |
Anna Bridge |
142:4eea097334d6 | 391 | /** Chip Select pin polarity, active high or low */ |
Anna Bridge |
142:4eea097334d6 | 392 | EBI_Polarity_TypeDef csPolarity; |
Anna Bridge |
160:5571c4ff569f | 393 | #if !defined(_EFM32_GECKO_FAMILY) |
Anna Bridge |
160:5571c4ff569f | 394 | /** Byte Lane pin polarity, active high or low */ |
Anna Bridge |
142:4eea097334d6 | 395 | EBI_Polarity_TypeDef blPolarity; |
Anna Bridge |
142:4eea097334d6 | 396 | /** Flag to enable or disable Byte Lane support */ |
Anna Bridge |
142:4eea097334d6 | 397 | bool blEnable; |
Anna Bridge |
142:4eea097334d6 | 398 | /** Flag to enable or disable idle state insertion between transfers */ |
Anna Bridge |
142:4eea097334d6 | 399 | bool noIdle; |
Anna Bridge |
142:4eea097334d6 | 400 | #endif |
Anna Bridge |
142:4eea097334d6 | 401 | /** Flag to enable or disable Address Ready support */ |
Anna Bridge |
142:4eea097334d6 | 402 | bool ardyEnable; |
Anna Bridge |
142:4eea097334d6 | 403 | /** Set to turn off 32 cycle timeout ability */ |
Anna Bridge |
142:4eea097334d6 | 404 | bool ardyDisableTimeout; |
Anna Bridge |
142:4eea097334d6 | 405 | /** Mask of flags which selects address banks to configure EBI_BANK<0-3> */ |
Anna Bridge |
142:4eea097334d6 | 406 | uint32_t banks; |
Anna Bridge |
142:4eea097334d6 | 407 | /** Mask of flags which selects chip select lines to configure EBI_CS<0-3> */ |
Anna Bridge |
142:4eea097334d6 | 408 | uint32_t csLines; |
Anna Bridge |
142:4eea097334d6 | 409 | /** Number of cycles address is held after Adress Latch Enable is asserted */ |
Anna Bridge |
142:4eea097334d6 | 410 | int addrSetupCycles; |
Anna Bridge |
142:4eea097334d6 | 411 | /** Number of cycles address is driven onto the ADDRDAT bus before ALE is asserted */ |
Anna Bridge |
142:4eea097334d6 | 412 | int addrHoldCycles; |
Anna Bridge |
160:5571c4ff569f | 413 | #if !defined(_EFM32_GECKO_FAMILY) |
Anna Bridge |
142:4eea097334d6 | 414 | /** Enable or disables half cycle duration of the ALE strobe in the last address setup cycle */ |
Anna Bridge |
142:4eea097334d6 | 415 | bool addrHalfALE; |
Anna Bridge |
142:4eea097334d6 | 416 | #endif |
Anna Bridge |
142:4eea097334d6 | 417 | /** Number of cycles for address setup before REn is asserted */ |
Anna Bridge |
142:4eea097334d6 | 418 | int readSetupCycles; |
Anna Bridge |
142:4eea097334d6 | 419 | /** Number of cycles REn is held active */ |
Anna Bridge |
142:4eea097334d6 | 420 | int readStrobeCycles; |
Anna Bridge |
142:4eea097334d6 | 421 | /** Number of cycles CSn is held active after REn is deasserted */ |
Anna Bridge |
142:4eea097334d6 | 422 | int readHoldCycles; |
Anna Bridge |
160:5571c4ff569f | 423 | #if !defined(_EFM32_GECKO_FAMILY) |
Anna Bridge |
142:4eea097334d6 | 424 | /** Enable or disable page mode reads */ |
Anna Bridge |
142:4eea097334d6 | 425 | bool readPageMode; |
Anna Bridge |
142:4eea097334d6 | 426 | /** Enables or disable prefetching from sequential addresses */ |
Anna Bridge |
142:4eea097334d6 | 427 | bool readPrefetch; |
Anna Bridge |
142:4eea097334d6 | 428 | /** Enabled or disables half cycle duration of the REn signal in the last strobe cycle */ |
Anna Bridge |
142:4eea097334d6 | 429 | bool readHalfRE; |
Anna Bridge |
142:4eea097334d6 | 430 | #endif |
Anna Bridge |
142:4eea097334d6 | 431 | /** Number of cycles for address setup before WEn is asserted */ |
Anna Bridge |
142:4eea097334d6 | 432 | int writeSetupCycles; |
Anna Bridge |
142:4eea097334d6 | 433 | /** Number of cycles WEn is held active */ |
Anna Bridge |
142:4eea097334d6 | 434 | int writeStrobeCycles; |
Anna Bridge |
142:4eea097334d6 | 435 | /** Number of cycles CSn is held active after WEn is deasserted */ |
Anna Bridge |
142:4eea097334d6 | 436 | int writeHoldCycles; |
Anna Bridge |
160:5571c4ff569f | 437 | #if !defined(_EFM32_GECKO_FAMILY) |
Anna Bridge |
142:4eea097334d6 | 438 | /** Enable or disable the write buffer */ |
Anna Bridge |
142:4eea097334d6 | 439 | bool writeBufferDisable; |
Anna Bridge |
142:4eea097334d6 | 440 | /** Enables or disables half cycle duration of the WEn signal in the last strobe cycle */ |
Anna Bridge |
142:4eea097334d6 | 441 | bool writeHalfWE; |
Anna Bridge |
142:4eea097334d6 | 442 | /** Lower address pin limit to enable */ |
Anna Bridge |
142:4eea097334d6 | 443 | EBI_ALow_TypeDef aLow; |
Anna Bridge |
142:4eea097334d6 | 444 | /** High address pin limit to enable */ |
Anna Bridge |
142:4eea097334d6 | 445 | EBI_AHigh_TypeDef aHigh; |
Anna Bridge |
160:5571c4ff569f | 446 | #endif |
Anna Bridge |
160:5571c4ff569f | 447 | #if defined(_EBI_ROUTE_LOCATION_MASK) |
Anna Bridge |
142:4eea097334d6 | 448 | /** Pin Location */ |
Anna Bridge |
142:4eea097334d6 | 449 | EBI_Location_TypeDef location; |
Anna Bridge |
142:4eea097334d6 | 450 | #endif |
Anna Bridge |
142:4eea097334d6 | 451 | /** Flag, if EBI should be enabled after configuration */ |
Anna Bridge |
142:4eea097334d6 | 452 | bool enable; |
Anna Bridge |
142:4eea097334d6 | 453 | } EBI_Init_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 454 | |
Anna Bridge |
142:4eea097334d6 | 455 | /** Default config for EBI init structures */ |
Anna Bridge |
160:5571c4ff569f | 456 | #if defined(_SILICON_LABS_32B_SERIES_1) |
Anna Bridge |
142:4eea097334d6 | 457 | #define EBI_INIT_DEFAULT \ |
Anna Bridge |
160:5571c4ff569f | 458 | { \ |
Anna Bridge |
160:5571c4ff569f | 459 | ebiModeD8A8, /* 8 bit address, 8 bit data */ \ |
Anna Bridge |
160:5571c4ff569f | 460 | ebiActiveLow, /* ARDY polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 461 | ebiActiveLow, /* ALE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 462 | ebiActiveLow, /* WE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 463 | ebiActiveLow, /* RE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 464 | ebiActiveLow, /* CS polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 465 | ebiActiveLow, /* BL polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 466 | false, /* enable BL */ \ |
Anna Bridge |
160:5571c4ff569f | 467 | false, /* enable NOIDLE */ \ |
Anna Bridge |
160:5571c4ff569f | 468 | false, /* enable ARDY */ \ |
Anna Bridge |
160:5571c4ff569f | 469 | false, /* don't disable ARDY timeout */ \ |
Anna Bridge |
160:5571c4ff569f | 470 | EBI_BANK0, /* enable bank 0 */ \ |
Anna Bridge |
160:5571c4ff569f | 471 | EBI_CS0, /* enable chip select 0 */ \ |
Anna Bridge |
160:5571c4ff569f | 472 | 0, /* addr setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 473 | 1, /* addr hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 474 | false, /* do not enable half cycle ALE strobe */ \ |
Anna Bridge |
160:5571c4ff569f | 475 | 0, /* read setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 476 | 0, /* read strobe cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 477 | 0, /* read hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 478 | false, /* disable page mode */ \ |
Anna Bridge |
160:5571c4ff569f | 479 | false, /* disable prefetch */ \ |
Anna Bridge |
160:5571c4ff569f | 480 | false, /* do not enable half cycle REn strobe */ \ |
Anna Bridge |
160:5571c4ff569f | 481 | 0, /* write setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 482 | 0, /* write strobe cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 483 | 1, /* write hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 484 | false, /* do not disable the write buffer */ \ |
Anna Bridge |
160:5571c4ff569f | 485 | false, /* do not enable halc cycle WEn strobe */ \ |
Anna Bridge |
160:5571c4ff569f | 486 | ebiALowA0, /* ALB - Low bound, address lines */ \ |
Anna Bridge |
160:5571c4ff569f | 487 | ebiAHighA0, /* APEN - High bound, address lines */ \ |
Anna Bridge |
160:5571c4ff569f | 488 | true, /* enable EBI */ \ |
Anna Bridge |
160:5571c4ff569f | 489 | } |
Anna Bridge |
160:5571c4ff569f | 490 | #elif !defined(_EFM32_GECKO_FAMILY) |
Anna Bridge |
160:5571c4ff569f | 491 | #define EBI_INIT_DEFAULT \ |
Anna Bridge |
160:5571c4ff569f | 492 | { \ |
Anna Bridge |
160:5571c4ff569f | 493 | ebiModeD8A8, /* 8 bit address, 8 bit data */ \ |
Anna Bridge |
160:5571c4ff569f | 494 | ebiActiveLow, /* ARDY polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 495 | ebiActiveLow, /* ALE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 496 | ebiActiveLow, /* WE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 497 | ebiActiveLow, /* RE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 498 | ebiActiveLow, /* CS polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 499 | ebiActiveLow, /* BL polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 500 | false, /* enable BL */ \ |
Anna Bridge |
160:5571c4ff569f | 501 | false, /* enable NOIDLE */ \ |
Anna Bridge |
160:5571c4ff569f | 502 | false, /* enable ARDY */ \ |
Anna Bridge |
160:5571c4ff569f | 503 | false, /* don't disable ARDY timeout */ \ |
Anna Bridge |
160:5571c4ff569f | 504 | EBI_BANK0, /* enable bank 0 */ \ |
Anna Bridge |
160:5571c4ff569f | 505 | EBI_CS0, /* enable chip select 0 */ \ |
Anna Bridge |
160:5571c4ff569f | 506 | 0, /* addr setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 507 | 1, /* addr hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 508 | false, /* do not enable half cycle ALE strobe */ \ |
Anna Bridge |
160:5571c4ff569f | 509 | 0, /* read setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 510 | 0, /* read strobe cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 511 | 0, /* read hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 512 | false, /* disable page mode */ \ |
Anna Bridge |
160:5571c4ff569f | 513 | false, /* disable prefetch */ \ |
Anna Bridge |
160:5571c4ff569f | 514 | false, /* do not enable half cycle REn strobe */ \ |
Anna Bridge |
160:5571c4ff569f | 515 | 0, /* write setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 516 | 0, /* write strobe cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 517 | 1, /* write hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 518 | false, /* do not disable the write buffer */ \ |
Anna Bridge |
160:5571c4ff569f | 519 | false, /* do not enable halc cycle WEn strobe */ \ |
Anna Bridge |
160:5571c4ff569f | 520 | ebiALowA0, /* ALB - Low bound, address lines */ \ |
Anna Bridge |
160:5571c4ff569f | 521 | ebiAHighA0, /* APEN - High bound, address lines */ \ |
Anna Bridge |
160:5571c4ff569f | 522 | ebiLocation0, /* Use Location 0 */ \ |
Anna Bridge |
160:5571c4ff569f | 523 | true, /* enable EBI */ \ |
Anna Bridge |
160:5571c4ff569f | 524 | } |
Anna Bridge |
142:4eea097334d6 | 525 | #else |
Anna Bridge |
142:4eea097334d6 | 526 | #define EBI_INIT_DEFAULT \ |
Anna Bridge |
160:5571c4ff569f | 527 | { \ |
Anna Bridge |
160:5571c4ff569f | 528 | ebiModeD8A8, /* 8 bit address, 8 bit data */ \ |
Anna Bridge |
160:5571c4ff569f | 529 | ebiActiveLow, /* ARDY polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 530 | ebiActiveLow, /* ALE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 531 | ebiActiveLow, /* WE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 532 | ebiActiveLow, /* RE polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 533 | ebiActiveLow, /* CS polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 534 | false, /* enable ARDY */ \ |
Anna Bridge |
160:5571c4ff569f | 535 | false, /* don't disable ARDY timeout */ \ |
Anna Bridge |
160:5571c4ff569f | 536 | EBI_BANK0, /* enable bank 0 */ \ |
Anna Bridge |
160:5571c4ff569f | 537 | EBI_CS0, /* enable chip select 0 */ \ |
Anna Bridge |
160:5571c4ff569f | 538 | 0, /* addr setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 539 | 1, /* addr hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 540 | 0, /* read setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 541 | 0, /* read strobe cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 542 | 0, /* read hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 543 | 0, /* write setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 544 | 0, /* write strobe cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 545 | 1, /* write hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 546 | true, /* enable EBI */ \ |
Anna Bridge |
160:5571c4ff569f | 547 | } |
Anna Bridge |
142:4eea097334d6 | 548 | #endif |
Anna Bridge |
142:4eea097334d6 | 549 | |
Anna Bridge |
160:5571c4ff569f | 550 | #if defined(_EBI_TFTCTRL_MASK) |
Anna Bridge |
142:4eea097334d6 | 551 | |
Anna Bridge |
142:4eea097334d6 | 552 | /** TFT Initialization structure */ |
Anna Bridge |
160:5571c4ff569f | 553 | typedef struct { |
Anna Bridge |
142:4eea097334d6 | 554 | /** External memory bank for driving display */ |
Anna Bridge |
142:4eea097334d6 | 555 | EBI_TFTBank_TypeDef bank; |
Anna Bridge |
142:4eea097334d6 | 556 | /** Width */ |
Anna Bridge |
142:4eea097334d6 | 557 | EBI_TFTWidth_TypeDef width; |
Anna Bridge |
142:4eea097334d6 | 558 | /** Color source for masking and alpha blending */ |
Anna Bridge |
142:4eea097334d6 | 559 | EBI_TFTColorSrc_TypeDef colSrc; |
Anna Bridge |
142:4eea097334d6 | 560 | /** Bus Interleave mode */ |
Anna Bridge |
142:4eea097334d6 | 561 | EBI_TFTInterleave_TypeDef interleave; |
Anna Bridge |
142:4eea097334d6 | 562 | /** Trigger for updating frame buffer pointer */ |
Anna Bridge |
142:4eea097334d6 | 563 | EBI_TFTFrameBufTrigger_TypeDef fbTrigger; |
Anna Bridge |
142:4eea097334d6 | 564 | /** Drive DCLK from negative clock edge of internal clock */ |
Anna Bridge |
142:4eea097334d6 | 565 | bool shiftDClk; |
Anna Bridge |
142:4eea097334d6 | 566 | /** Masking and alpha blending mode */ |
Anna Bridge |
142:4eea097334d6 | 567 | EBI_TFTMaskBlend_TypeDef maskBlend; |
Anna Bridge |
142:4eea097334d6 | 568 | /** TFT Direct Drive mode */ |
Anna Bridge |
142:4eea097334d6 | 569 | EBI_TFTDDMode_TypeDef driveMode; |
Anna Bridge |
142:4eea097334d6 | 570 | /** TFT Polarity for Chip Select (CS) Line */ |
Anna Bridge |
142:4eea097334d6 | 571 | EBI_Polarity_TypeDef csPolarity; |
Anna Bridge |
142:4eea097334d6 | 572 | /** TFT Polarity for Data Clock (DCLK) Line */ |
Anna Bridge |
142:4eea097334d6 | 573 | EBI_Polarity_TypeDef dclkPolarity; |
Anna Bridge |
142:4eea097334d6 | 574 | /** TFT Polarity for Data Enable (DATAEN) Line */ |
Anna Bridge |
142:4eea097334d6 | 575 | EBI_Polarity_TypeDef dataenPolarity; |
Anna Bridge |
142:4eea097334d6 | 576 | /** TFT Polarity for Horizontal Sync (HSYNC) Line */ |
Anna Bridge |
142:4eea097334d6 | 577 | EBI_Polarity_TypeDef hsyncPolarity; |
Anna Bridge |
142:4eea097334d6 | 578 | /** TFT Polarity for Vertical Sync (VSYNC) Line */ |
Anna Bridge |
142:4eea097334d6 | 579 | EBI_Polarity_TypeDef vsyncPolarity; |
Anna Bridge |
142:4eea097334d6 | 580 | /** Horizontal size in pixels */ |
Anna Bridge |
142:4eea097334d6 | 581 | int hsize; |
Anna Bridge |
142:4eea097334d6 | 582 | /** Horizontal Front Porch Size */ |
Anna Bridge |
142:4eea097334d6 | 583 | int hPorchFront; |
Anna Bridge |
142:4eea097334d6 | 584 | /** Horizontal Back Porch Size */ |
Anna Bridge |
142:4eea097334d6 | 585 | int hPorchBack; |
Anna Bridge |
142:4eea097334d6 | 586 | /** Horizontal Synchronization Pulse Width */ |
Anna Bridge |
142:4eea097334d6 | 587 | int hPulseWidth; |
Anna Bridge |
142:4eea097334d6 | 588 | /** Vertical size in pixels */ |
Anna Bridge |
142:4eea097334d6 | 589 | int vsize; |
Anna Bridge |
142:4eea097334d6 | 590 | /** Vertical Front Porch Size */ |
Anna Bridge |
142:4eea097334d6 | 591 | int vPorchFront; |
Anna Bridge |
142:4eea097334d6 | 592 | /** Vertical Back Porch Size */ |
Anna Bridge |
142:4eea097334d6 | 593 | int vPorchBack; |
Anna Bridge |
142:4eea097334d6 | 594 | /** Vertical Synchronization Pulse Width */ |
Anna Bridge |
142:4eea097334d6 | 595 | int vPulseWidth; |
Anna Bridge |
142:4eea097334d6 | 596 | /** TFT Frame Buffer address, offset to EBI bank base address */ |
Anna Bridge |
142:4eea097334d6 | 597 | uint32_t addressOffset; |
Anna Bridge |
142:4eea097334d6 | 598 | /** TFT DCLK period in internal cycles */ |
Anna Bridge |
142:4eea097334d6 | 599 | int dclkPeriod; |
Anna Bridge |
142:4eea097334d6 | 600 | /** Starting position of External Direct Drive relative to DCLK inactive edge */ |
Anna Bridge |
142:4eea097334d6 | 601 | int startPosition; |
Anna Bridge |
142:4eea097334d6 | 602 | /** Number of cycles RGB data is driven before active edge of DCLK */ |
Anna Bridge |
142:4eea097334d6 | 603 | int setupCycles; |
Anna Bridge |
142:4eea097334d6 | 604 | /** Number of cycles RGB data is held after active edge of DCLK */ |
Anna Bridge |
142:4eea097334d6 | 605 | int holdCycles; |
Anna Bridge |
142:4eea097334d6 | 606 | } EBI_TFTInit_TypeDef; |
Anna Bridge |
142:4eea097334d6 | 607 | |
Anna Bridge |
142:4eea097334d6 | 608 | /** Default configuration for EBI TFT init structure */ |
Anna Bridge |
142:4eea097334d6 | 609 | #define EBI_TFTINIT_DEFAULT \ |
Anna Bridge |
160:5571c4ff569f | 610 | { \ |
Anna Bridge |
160:5571c4ff569f | 611 | ebiTFTBank0, /* Select EBI Bank 0 */ \ |
Anna Bridge |
160:5571c4ff569f | 612 | ebiTFTWidthHalfWord, /* Select 2-byte increments */ \ |
Anna Bridge |
160:5571c4ff569f | 613 | ebiTFTColorSrcMem, /* Use memory as source for mask/blending */ \ |
Anna Bridge |
160:5571c4ff569f | 614 | ebiTFTInterleaveUnlimited, /* Unlimited interleaved accesses */ \ |
Anna Bridge |
160:5571c4ff569f | 615 | ebiTFTFrameBufTriggerVSync, /* VSYNC as frame buffer update trigger */ \ |
Anna Bridge |
160:5571c4ff569f | 616 | false, /* Drive DCLK from negative edge of internal clock */ \ |
Anna Bridge |
160:5571c4ff569f | 617 | ebiTFTMBDisabled, /* No masking and alpha blending enabled */ \ |
Anna Bridge |
160:5571c4ff569f | 618 | ebiTFTDDModeExternal, /* Drive from external memory */ \ |
Anna Bridge |
160:5571c4ff569f | 619 | ebiActiveLow, /* CS Active Low polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 620 | ebiActiveLow, /* DCLK Active Low polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 621 | ebiActiveLow, /* DATAEN Active Low polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 622 | ebiActiveLow, /* HSYNC Active Low polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 623 | ebiActiveLow, /* VSYNC Active Low polarity */ \ |
Anna Bridge |
160:5571c4ff569f | 624 | 320, /* Horizontal size in pixels */ \ |
Anna Bridge |
160:5571c4ff569f | 625 | 1, /* Horizontal Front Porch */ \ |
Anna Bridge |
160:5571c4ff569f | 626 | 29, /* Horizontal Back Porch */ \ |
Anna Bridge |
160:5571c4ff569f | 627 | 2, /* Horizontal Synchronization Pulse Width */ \ |
Anna Bridge |
160:5571c4ff569f | 628 | 240, /* Vertical size in pixels */ \ |
Anna Bridge |
160:5571c4ff569f | 629 | 1, /* Vertical Front Porch */ \ |
Anna Bridge |
160:5571c4ff569f | 630 | 4, /* Vertical Back Porch */ \ |
Anna Bridge |
160:5571c4ff569f | 631 | 2, /* Vertical Synchronization Pulse Width */ \ |
Anna Bridge |
160:5571c4ff569f | 632 | 0x0000, /* Address offset to EBI memory base */ \ |
Anna Bridge |
160:5571c4ff569f | 633 | 5, /* DCLK Period */ \ |
Anna Bridge |
160:5571c4ff569f | 634 | 2, /* DCLK Start */ \ |
Anna Bridge |
160:5571c4ff569f | 635 | 1, /* DCLK Setup cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 636 | 1, /* DCLK Hold cycles */ \ |
Anna Bridge |
160:5571c4ff569f | 637 | } |
Anna Bridge |
160:5571c4ff569f | 638 | #endif |
Anna Bridge |
142:4eea097334d6 | 639 | |
Anna Bridge |
142:4eea097334d6 | 640 | /******************************************************************************* |
Anna Bridge |
142:4eea097334d6 | 641 | ***************************** PROTOTYPES ********************************** |
Anna Bridge |
142:4eea097334d6 | 642 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 643 | |
Anna Bridge |
142:4eea097334d6 | 644 | void EBI_Init(const EBI_Init_TypeDef *ebiInit); |
Anna Bridge |
142:4eea097334d6 | 645 | void EBI_Disable(void); |
Anna Bridge |
142:4eea097334d6 | 646 | uint32_t EBI_BankAddress(uint32_t bank); |
Anna Bridge |
142:4eea097334d6 | 647 | void EBI_BankEnable(uint32_t banks, bool enable); |
Anna Bridge |
142:4eea097334d6 | 648 | |
Anna Bridge |
160:5571c4ff569f | 649 | #if defined(_EBI_TFTCTRL_MASK) |
Anna Bridge |
142:4eea097334d6 | 650 | void EBI_TFTInit(const EBI_TFTInit_TypeDef *ebiTFTInit); |
Anna Bridge |
142:4eea097334d6 | 651 | void EBI_TFTSizeSet(uint32_t horizontal, uint32_t vertical); |
Anna Bridge |
142:4eea097334d6 | 652 | void EBI_TFTHPorchSet(int front, int back, int pulseWidth); |
Anna Bridge |
142:4eea097334d6 | 653 | void EBI_TFTVPorchSet(int front, int back, int pulseWidth); |
Anna Bridge |
142:4eea097334d6 | 654 | void EBI_TFTTimingSet(int dclkPeriod, int start, int setup, int hold); |
Anna Bridge |
142:4eea097334d6 | 655 | #endif |
Anna Bridge |
142:4eea097334d6 | 656 | |
Anna Bridge |
160:5571c4ff569f | 657 | #if !defined(_EFM32_GECKO_FAMILY) |
Anna Bridge |
142:4eea097334d6 | 658 | /* This functionality is only available on devices with independent timing support */ |
Anna Bridge |
142:4eea097334d6 | 659 | void EBI_BankReadTimingSet(uint32_t bank, int setupCycles, int strobeCycles, int holdCycles); |
Anna Bridge |
142:4eea097334d6 | 660 | void EBI_BankReadTimingConfig(uint32_t bank, bool pageMode, bool prefetch, bool halfRE); |
Anna Bridge |
142:4eea097334d6 | 661 | |
Anna Bridge |
142:4eea097334d6 | 662 | void EBI_BankWriteTimingSet(uint32_t bank, int setupCycles, int strobeCycles, int holdCycles); |
Anna Bridge |
142:4eea097334d6 | 663 | void EBI_BankWriteTimingConfig(uint32_t bank, bool writeBufDisable, bool halfWE); |
Anna Bridge |
142:4eea097334d6 | 664 | |
Anna Bridge |
142:4eea097334d6 | 665 | void EBI_BankAddressTimingSet(uint32_t bank, int setupCycles, int holdCycles); |
Anna Bridge |
142:4eea097334d6 | 666 | void EBI_BankAddressTimingConfig(uint32_t bank, bool halfALE); |
Anna Bridge |
142:4eea097334d6 | 667 | |
Anna Bridge |
142:4eea097334d6 | 668 | void EBI_BankPolaritySet(uint32_t bank, EBI_Line_TypeDef line, EBI_Polarity_TypeDef polarity); |
Anna Bridge |
142:4eea097334d6 | 669 | void EBI_BankByteLaneEnable(uint32_t bank, bool enable); |
Anna Bridge |
142:4eea097334d6 | 670 | void EBI_AltMapEnable(bool enable); |
Anna Bridge |
160:5571c4ff569f | 671 | #endif |
Anna Bridge |
142:4eea097334d6 | 672 | |
Anna Bridge |
160:5571c4ff569f | 673 | #if defined(_EBI_TFTCTRL_MASK) |
Anna Bridge |
142:4eea097334d6 | 674 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 675 | * @brief |
Anna Bridge |
142:4eea097334d6 | 676 | * Enable or disable TFT Direct Drive |
Anna Bridge |
142:4eea097334d6 | 677 | * |
Anna Bridge |
142:4eea097334d6 | 678 | * @param[in] mode |
Anna Bridge |
142:4eea097334d6 | 679 | * Drive from Internal or External memory, or Disable Direct Drive |
Anna Bridge |
142:4eea097334d6 | 680 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 681 | __STATIC_INLINE void EBI_TFTEnable(EBI_TFTDDMode_TypeDef mode) |
Anna Bridge |
142:4eea097334d6 | 682 | { |
Anna Bridge |
142:4eea097334d6 | 683 | EBI->TFTCTRL = (EBI->TFTCTRL & ~(_EBI_TFTCTRL_DD_MASK)) | (uint32_t) mode; |
Anna Bridge |
142:4eea097334d6 | 684 | } |
Anna Bridge |
142:4eea097334d6 | 685 | |
Anna Bridge |
142:4eea097334d6 | 686 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 687 | * @brief |
Anna Bridge |
142:4eea097334d6 | 688 | * Configure frame buffer pointer |
Anna Bridge |
142:4eea097334d6 | 689 | * |
Anna Bridge |
142:4eea097334d6 | 690 | * @param[in] address |
Anna Bridge |
142:4eea097334d6 | 691 | * Frame pointer address, as offset by EBI base address |
Anna Bridge |
142:4eea097334d6 | 692 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 693 | __STATIC_INLINE void EBI_TFTFrameBaseSet(uint32_t address) |
Anna Bridge |
142:4eea097334d6 | 694 | { |
Anna Bridge |
142:4eea097334d6 | 695 | EBI->TFTFRAMEBASE = (uint32_t) address; |
Anna Bridge |
142:4eea097334d6 | 696 | } |
Anna Bridge |
142:4eea097334d6 | 697 | |
Anna Bridge |
142:4eea097334d6 | 698 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 699 | * @brief Set TFT Pixel Color 0 or 1 |
Anna Bridge |
142:4eea097334d6 | 700 | * |
Anna Bridge |
142:4eea097334d6 | 701 | * @param[in] pixel |
Anna Bridge |
142:4eea097334d6 | 702 | * Which pixel instance to set |
Anna Bridge |
142:4eea097334d6 | 703 | * @param[in] color |
Anna Bridge |
142:4eea097334d6 | 704 | * Color of pixel, 16-bit value |
Anna Bridge |
142:4eea097334d6 | 705 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 706 | __STATIC_INLINE void EBI_TFTPixelSet(int pixel, uint32_t color) |
Anna Bridge |
142:4eea097334d6 | 707 | { |
Anna Bridge |
142:4eea097334d6 | 708 | EFM_ASSERT(pixel == 0 || pixel == 1); |
Anna Bridge |
142:4eea097334d6 | 709 | |
Anna Bridge |
160:5571c4ff569f | 710 | if (pixel == 0) { |
Anna Bridge |
142:4eea097334d6 | 711 | EBI->TFTPIXEL0 = color; |
Anna Bridge |
142:4eea097334d6 | 712 | } |
Anna Bridge |
160:5571c4ff569f | 713 | if (pixel == 1) { |
Anna Bridge |
142:4eea097334d6 | 714 | EBI->TFTPIXEL1 = color; |
Anna Bridge |
142:4eea097334d6 | 715 | } |
Anna Bridge |
142:4eea097334d6 | 716 | } |
Anna Bridge |
142:4eea097334d6 | 717 | |
Anna Bridge |
142:4eea097334d6 | 718 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 719 | * @brief Masking and Blending Mode Set |
Anna Bridge |
142:4eea097334d6 | 720 | * |
Anna Bridge |
142:4eea097334d6 | 721 | * @param[in] maskBlend |
Anna Bridge |
142:4eea097334d6 | 722 | * Masking and alpha blending mode |
Anna Bridge |
142:4eea097334d6 | 723 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 724 | __STATIC_INLINE void EBI_TFTMaskBlendMode(EBI_TFTMaskBlend_TypeDef maskBlend) |
Anna Bridge |
142:4eea097334d6 | 725 | { |
Anna Bridge |
160:5571c4ff569f | 726 | EBI->TFTCTRL = (EBI->TFTCTRL & (~_EBI_TFTCTRL_MASKBLEND_MASK)) | maskBlend; |
Anna Bridge |
142:4eea097334d6 | 727 | } |
Anna Bridge |
142:4eea097334d6 | 728 | |
Anna Bridge |
142:4eea097334d6 | 729 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 730 | * @brief Set TFT Alpha Blending Factor |
Anna Bridge |
142:4eea097334d6 | 731 | * |
Anna Bridge |
142:4eea097334d6 | 732 | * @param[in] alpha |
Anna Bridge |
142:4eea097334d6 | 733 | * 8-bit value indicating blending factor |
Anna Bridge |
142:4eea097334d6 | 734 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 735 | __STATIC_INLINE void EBI_TFTAlphaBlendSet(uint8_t alpha) |
Anna Bridge |
142:4eea097334d6 | 736 | { |
Anna Bridge |
142:4eea097334d6 | 737 | EBI->TFTALPHA = alpha; |
Anna Bridge |
142:4eea097334d6 | 738 | } |
Anna Bridge |
142:4eea097334d6 | 739 | |
Anna Bridge |
142:4eea097334d6 | 740 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 741 | * @brief Set TFT mask value |
Anna Bridge |
142:4eea097334d6 | 742 | * Data accesses that matches this value are suppressed |
Anna Bridge |
142:4eea097334d6 | 743 | * @param[in] mask |
Anna Bridge |
142:4eea097334d6 | 744 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 745 | __STATIC_INLINE void EBI_TFTMaskSet(uint32_t mask) |
Anna Bridge |
142:4eea097334d6 | 746 | { |
Anna Bridge |
142:4eea097334d6 | 747 | EBI->TFTMASK = mask; |
Anna Bridge |
142:4eea097334d6 | 748 | } |
Anna Bridge |
142:4eea097334d6 | 749 | |
Anna Bridge |
142:4eea097334d6 | 750 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 751 | * @brief Get current vertical position counter |
Anna Bridge |
142:4eea097334d6 | 752 | * @return |
Anna Bridge |
142:4eea097334d6 | 753 | * Returns the current line position for the visible part of a frame |
Anna Bridge |
142:4eea097334d6 | 754 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 755 | __STATIC_INLINE uint32_t EBI_TFTVCount(void) |
Anna Bridge |
142:4eea097334d6 | 756 | { |
Anna Bridge |
142:4eea097334d6 | 757 | return((EBI->TFTSTATUS & _EBI_TFTSTATUS_VCNT_MASK) >> _EBI_TFTSTATUS_VCNT_SHIFT); |
Anna Bridge |
142:4eea097334d6 | 758 | } |
Anna Bridge |
142:4eea097334d6 | 759 | |
Anna Bridge |
142:4eea097334d6 | 760 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 761 | * @brief Get current horizontal position counter |
Anna Bridge |
142:4eea097334d6 | 762 | * @return |
Anna Bridge |
142:4eea097334d6 | 763 | * Returns the current horizontal pixel position within a visible line |
Anna Bridge |
142:4eea097334d6 | 764 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 765 | __STATIC_INLINE uint32_t EBI_TFTHCount(void) |
Anna Bridge |
142:4eea097334d6 | 766 | { |
Anna Bridge |
142:4eea097334d6 | 767 | return((EBI->TFTSTATUS & _EBI_TFTSTATUS_HCNT_MASK) >> _EBI_TFTSTATUS_HCNT_SHIFT); |
Anna Bridge |
142:4eea097334d6 | 768 | } |
Anna Bridge |
142:4eea097334d6 | 769 | |
Anna Bridge |
142:4eea097334d6 | 770 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 771 | * @brief Set Frame Buffer Trigger |
Anna Bridge |
142:4eea097334d6 | 772 | * |
Anna Bridge |
142:4eea097334d6 | 773 | * @details |
Anna Bridge |
142:4eea097334d6 | 774 | * Frame buffer pointer will be updated either on each horizontal line (hsync) |
Anna Bridge |
142:4eea097334d6 | 775 | * or vertical update (vsync). |
Anna Bridge |
142:4eea097334d6 | 776 | * |
Anna Bridge |
142:4eea097334d6 | 777 | * @param[in] sync |
Anna Bridge |
142:4eea097334d6 | 778 | * Trigger update of frame buffer pointer on vertical or horisontal sync. |
Anna Bridge |
142:4eea097334d6 | 779 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 780 | __STATIC_INLINE void EBI_TFTFBTriggerSet(EBI_TFTFrameBufTrigger_TypeDef sync) |
Anna Bridge |
142:4eea097334d6 | 781 | { |
Anna Bridge |
160:5571c4ff569f | 782 | EBI->TFTCTRL = ((EBI->TFTCTRL & ~_EBI_TFTCTRL_FBCTRIG_MASK) | sync); |
Anna Bridge |
142:4eea097334d6 | 783 | } |
Anna Bridge |
142:4eea097334d6 | 784 | |
Anna Bridge |
142:4eea097334d6 | 785 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 786 | * @brief Set horizontal TFT stride value in number of bytes |
Anna Bridge |
142:4eea097334d6 | 787 | * |
Anna Bridge |
142:4eea097334d6 | 788 | * @param[in] nbytes |
Anna Bridge |
142:4eea097334d6 | 789 | * Number of bytes to add to frame buffer pointer after each horizontal line |
Anna Bridge |
142:4eea097334d6 | 790 | * update |
Anna Bridge |
142:4eea097334d6 | 791 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 792 | __STATIC_INLINE void EBI_TFTHStrideSet(uint32_t nbytes) |
Anna Bridge |
142:4eea097334d6 | 793 | { |
Anna Bridge |
142:4eea097334d6 | 794 | EFM_ASSERT(nbytes < 0x1000); |
Anna Bridge |
142:4eea097334d6 | 795 | |
Anna Bridge |
160:5571c4ff569f | 796 | EBI->TFTSTRIDE = (EBI->TFTSTRIDE & ~(_EBI_TFTSTRIDE_HSTRIDE_MASK)) |
Anna Bridge |
160:5571c4ff569f | 797 | | (nbytes << _EBI_TFTSTRIDE_HSTRIDE_SHIFT); |
Anna Bridge |
142:4eea097334d6 | 798 | } |
Anna Bridge |
160:5571c4ff569f | 799 | #endif // _EBI_TFTCTRL_MASK |
Anna Bridge |
142:4eea097334d6 | 800 | |
Anna Bridge |
160:5571c4ff569f | 801 | #if defined(_EBI_IF_MASK) |
Anna Bridge |
142:4eea097334d6 | 802 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 803 | * @brief |
Anna Bridge |
142:4eea097334d6 | 804 | * Clear one or more pending EBI interrupts. |
Anna Bridge |
142:4eea097334d6 | 805 | * @param[in] flags |
Anna Bridge |
142:4eea097334d6 | 806 | * Pending EBI interrupt source to clear. Use a logical OR combination |
Anna Bridge |
142:4eea097334d6 | 807 | * of valid interrupt flags for the EBI module (EBI_IF_nnn). |
Anna Bridge |
142:4eea097334d6 | 808 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 809 | __STATIC_INLINE void EBI_IntClear(uint32_t flags) |
Anna Bridge |
142:4eea097334d6 | 810 | { |
Anna Bridge |
142:4eea097334d6 | 811 | EBI->IFC = flags; |
Anna Bridge |
142:4eea097334d6 | 812 | } |
Anna Bridge |
142:4eea097334d6 | 813 | |
Anna Bridge |
142:4eea097334d6 | 814 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 815 | * @brief |
Anna Bridge |
142:4eea097334d6 | 816 | * Set one or more pending EBI interrupts. |
Anna Bridge |
142:4eea097334d6 | 817 | * |
Anna Bridge |
142:4eea097334d6 | 818 | * @param[in] flags |
Anna Bridge |
142:4eea097334d6 | 819 | * EBI interrupt sources to set to pending. Use a logical OR combination of |
Anna Bridge |
142:4eea097334d6 | 820 | * valid interrupt flags for the EBI module (EBI_IF_nnn). |
Anna Bridge |
142:4eea097334d6 | 821 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 822 | __STATIC_INLINE void EBI_IntSet(uint32_t flags) |
Anna Bridge |
142:4eea097334d6 | 823 | { |
Anna Bridge |
142:4eea097334d6 | 824 | EBI->IFS = flags; |
Anna Bridge |
142:4eea097334d6 | 825 | } |
Anna Bridge |
142:4eea097334d6 | 826 | |
Anna Bridge |
142:4eea097334d6 | 827 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 828 | * @brief |
Anna Bridge |
142:4eea097334d6 | 829 | * Disable one or more EBI interrupts. |
Anna Bridge |
142:4eea097334d6 | 830 | * |
Anna Bridge |
142:4eea097334d6 | 831 | * @param[in] flags |
Anna Bridge |
142:4eea097334d6 | 832 | * EBI interrupt sources to disable. Use logical OR combination of valid |
Anna Bridge |
142:4eea097334d6 | 833 | * interrupt flags for the EBI module (EBI_IF_nnn) |
Anna Bridge |
142:4eea097334d6 | 834 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 835 | __STATIC_INLINE void EBI_IntDisable(uint32_t flags) |
Anna Bridge |
142:4eea097334d6 | 836 | { |
Anna Bridge |
142:4eea097334d6 | 837 | EBI->IEN &= ~(flags); |
Anna Bridge |
142:4eea097334d6 | 838 | } |
Anna Bridge |
142:4eea097334d6 | 839 | |
Anna Bridge |
142:4eea097334d6 | 840 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 841 | * @brief |
Anna Bridge |
142:4eea097334d6 | 842 | * Enable one or more EBI interrupts. |
Anna Bridge |
142:4eea097334d6 | 843 | * |
Anna Bridge |
142:4eea097334d6 | 844 | * @param[in] flags |
Anna Bridge |
142:4eea097334d6 | 845 | * EBI interrupt sources to enable. Use logical OR combination of valid |
Anna Bridge |
142:4eea097334d6 | 846 | * interrupt flags for the EBI module (EBI_IF_nnn) |
Anna Bridge |
142:4eea097334d6 | 847 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 848 | __STATIC_INLINE void EBI_IntEnable(uint32_t flags) |
Anna Bridge |
142:4eea097334d6 | 849 | { |
Anna Bridge |
142:4eea097334d6 | 850 | EBI->IEN |= flags; |
Anna Bridge |
142:4eea097334d6 | 851 | } |
Anna Bridge |
142:4eea097334d6 | 852 | |
Anna Bridge |
142:4eea097334d6 | 853 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 854 | * @brief |
Anna Bridge |
142:4eea097334d6 | 855 | * Get pending EBI interrupt flags. |
Anna Bridge |
142:4eea097334d6 | 856 | * |
Anna Bridge |
142:4eea097334d6 | 857 | * @note |
Anna Bridge |
142:4eea097334d6 | 858 | * The event bits are not cleared by the use of this function |
Anna Bridge |
142:4eea097334d6 | 859 | * |
Anna Bridge |
142:4eea097334d6 | 860 | * @return |
Anna Bridge |
142:4eea097334d6 | 861 | * EBI interrupt sources pending, a logical combination of valid EBI |
Anna Bridge |
142:4eea097334d6 | 862 | * interrupt flags, EBI_IF_nnn |
Anna Bridge |
142:4eea097334d6 | 863 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 864 | __STATIC_INLINE uint32_t EBI_IntGet(void) |
Anna Bridge |
142:4eea097334d6 | 865 | { |
Anna Bridge |
142:4eea097334d6 | 866 | return EBI->IF; |
Anna Bridge |
142:4eea097334d6 | 867 | } |
Anna Bridge |
142:4eea097334d6 | 868 | |
Anna Bridge |
142:4eea097334d6 | 869 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 870 | * @brief |
Anna Bridge |
142:4eea097334d6 | 871 | * Get enabled and pending EBI interrupt flags. |
Anna Bridge |
142:4eea097334d6 | 872 | * Useful for handling more interrupt sources in the same interrupt handler. |
Anna Bridge |
142:4eea097334d6 | 873 | * |
Anna Bridge |
142:4eea097334d6 | 874 | * @note |
Anna Bridge |
142:4eea097334d6 | 875 | * Interrupt flags are not cleared by the use of this function. |
Anna Bridge |
142:4eea097334d6 | 876 | * |
Anna Bridge |
142:4eea097334d6 | 877 | * @return |
Anna Bridge |
142:4eea097334d6 | 878 | * Pending and enabled EBI interrupt sources |
Anna Bridge |
142:4eea097334d6 | 879 | * The return value is the bitwise AND of |
Anna Bridge |
142:4eea097334d6 | 880 | * - the enabled interrupt sources in EBI_IEN and |
Anna Bridge |
142:4eea097334d6 | 881 | * - the pending interrupt flags EBI_IF |
Anna Bridge |
142:4eea097334d6 | 882 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 883 | __STATIC_INLINE uint32_t EBI_IntGetEnabled(void) |
Anna Bridge |
142:4eea097334d6 | 884 | { |
Anna Bridge |
142:4eea097334d6 | 885 | uint32_t ien; |
Anna Bridge |
142:4eea097334d6 | 886 | |
Anna Bridge |
142:4eea097334d6 | 887 | ien = EBI->IEN; |
Anna Bridge |
142:4eea097334d6 | 888 | return EBI->IF & ien; |
Anna Bridge |
142:4eea097334d6 | 889 | } |
Anna Bridge |
160:5571c4ff569f | 890 | #endif // _EBI_IF_MASK |
Anna Bridge |
142:4eea097334d6 | 891 | |
Anna Bridge |
160:5571c4ff569f | 892 | #if defined(_EBI_CMD_MASK) |
Anna Bridge |
142:4eea097334d6 | 893 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 894 | * @brief |
Anna Bridge |
142:4eea097334d6 | 895 | * Start ECC generator on NAND flash transfers. |
Anna Bridge |
142:4eea097334d6 | 896 | ******************************************************************************/ |
Anna Bridge |
142:4eea097334d6 | 897 | __STATIC_INLINE void EBI_StartNandEccGen(void) |
Anna Bridge |
142:4eea097334d6 | 898 | { |
Anna Bridge |
142:4eea097334d6 | 899 | EBI->CMD = EBI_CMD_ECCSTART | EBI_CMD_ECCCLEAR; |
Anna Bridge |
142:4eea097334d6 | 900 | } |
Anna Bridge |
142:4eea097334d6 | 901 | |
Anna Bridge |
142:4eea097334d6 | 902 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 903 | * @brief |
Anna Bridge |
142:4eea097334d6 | 904 | * Stop NAND flash ECC generator and return generated ECC. |
Anna Bridge |
142:4eea097334d6 | 905 | * |
Anna Bridge |
142:4eea097334d6 | 906 | * @return |
Anna Bridge |
142:4eea097334d6 | 907 | * The generated ECC. |
Anna Bridge |
142:4eea097334d6 | 908 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 909 | __STATIC_INLINE uint32_t EBI_StopNandEccGen(void) |
Anna Bridge |
142:4eea097334d6 | 910 | { |
Anna Bridge |
142:4eea097334d6 | 911 | EBI->CMD = EBI_CMD_ECCSTOP; |
Anna Bridge |
142:4eea097334d6 | 912 | return EBI->ECCPARITY; |
Anna Bridge |
142:4eea097334d6 | 913 | } |
Anna Bridge |
160:5571c4ff569f | 914 | #endif // _EBI_CMD_MASK |
Anna Bridge |
142:4eea097334d6 | 915 | |
Anna Bridge |
142:4eea097334d6 | 916 | void EBI_ChipSelectEnable(uint32_t banks, bool enable); |
Anna Bridge |
142:4eea097334d6 | 917 | void EBI_ReadTimingSet(int setupCycles, int strobeCycles, int holdCycles); |
Anna Bridge |
142:4eea097334d6 | 918 | void EBI_WriteTimingSet(int setupCycles, int strobeCycles, int holdCycles); |
Anna Bridge |
142:4eea097334d6 | 919 | void EBI_AddressTimingSet(int setupCycles, int holdCycles); |
Anna Bridge |
142:4eea097334d6 | 920 | void EBI_PolaritySet(EBI_Line_TypeDef line, EBI_Polarity_TypeDef polarity); |
Anna Bridge |
142:4eea097334d6 | 921 | |
Anna Bridge |
142:4eea097334d6 | 922 | /** @} (end addtogroup EBI) */ |
Anna Bridge |
142:4eea097334d6 | 923 | /** @} (end addtogroup emlib) */ |
Anna Bridge |
142:4eea097334d6 | 924 | |
Anna Bridge |
142:4eea097334d6 | 925 | #ifdef __cplusplus |
Anna Bridge |
142:4eea097334d6 | 926 | } |
Anna Bridge |
142:4eea097334d6 | 927 | #endif |
Anna Bridge |
142:4eea097334d6 | 928 | |
Anna Bridge |
142:4eea097334d6 | 929 | #endif /* defined(EBI_COUNT) && (EBI_COUNT > 0) */ |
Anna Bridge |
142:4eea097334d6 | 930 | |
Anna Bridge |
142:4eea097334d6 | 931 | #endif /* EM_EBI_H */ |