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.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew 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 */