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:
Anna Bridge
Date:
Wed May 10 11:31:27 2017 +0100
Revision:
142:4eea097334d6
Child:
159:7130f322cb7e
Release 142 of the mbed library

Ports for Upcoming Targets


Fixes and Changes

4059: [Silicon Labs] Rename targets https://github.com/ARMmbed/mbed-os/pull/4059
4187: [NCS36510] Reduce default heap size allocated by IAR to 1/4 of RAM https://github.com/ARMmbed/mbed-os/pull/4187
4225: fixed missing device_name for xDot and removed progen https://github.com/ARMmbed/mbed-os/pull/4225
4251: Fix C++11 build error w/ u-blox EVK-ODIN-W2 https://github.com/ARMmbed/mbed-os/pull/4251
4236: STM32 Fixed warning related to __packed redefinition https://github.com/ARMmbed/mbed-os/pull/4236
4190: LPC4088: Enable LWIP feature https://github.com/ARMmbed/mbed-os/pull/4190
4260: Inherit Xadow M0 target from LPC11U35_501 https://github.com/ARMmbed/mbed-os/pull/4260
4249: Add consistent button names across targets https://github.com/ARMmbed/mbed-os/pull/4249

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 142:4eea097334d6 4 * @version 5.1.2
Anna Bridge 142:4eea097334d6 5 *******************************************************************************
Anna Bridge 142:4eea097334d6 6 * @section 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 142:4eea097334d6 85 /*******************************************************************************
Anna Bridge 142:4eea097334d6 86 ******************************** ENUMS ************************************
Anna Bridge 142:4eea097334d6 87 ******************************************************************************/
Anna Bridge 142:4eea097334d6 88
Anna Bridge 142:4eea097334d6 89 /** EBI Mode of operation */
Anna Bridge 142:4eea097334d6 90 typedef enum
Anna Bridge 142:4eea097334d6 91 {
Anna Bridge 142:4eea097334d6 92 /** 8 data bits, 8 address bits */
Anna Bridge 142:4eea097334d6 93 ebiModeD8A8 = EBI_CTRL_MODE_D8A8,
Anna Bridge 142:4eea097334d6 94 /** 16 data bits, 16 address bits, using address latch enable */
Anna Bridge 142:4eea097334d6 95 ebiModeD16A16ALE = EBI_CTRL_MODE_D16A16ALE,
Anna Bridge 142:4eea097334d6 96 /** 8 data bits, 24 address bits, using address latch enable */
Anna Bridge 142:4eea097334d6 97 ebiModeD8A24ALE = EBI_CTRL_MODE_D8A24ALE,
Anna Bridge 142:4eea097334d6 98 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 99 /** Mode D16 */
Anna Bridge 142:4eea097334d6 100 ebiModeD16 = EBI_CTRL_MODE_D16,
Anna Bridge 142:4eea097334d6 101 #endif
Anna Bridge 142:4eea097334d6 102 } EBI_Mode_TypeDef;
Anna Bridge 142:4eea097334d6 103
Anna Bridge 142:4eea097334d6 104 /** EBI Polarity configuration */
Anna Bridge 142:4eea097334d6 105 typedef enum
Anna Bridge 142:4eea097334d6 106 {
Anna Bridge 142:4eea097334d6 107 /** Active Low */
Anna Bridge 142:4eea097334d6 108 ebiActiveLow = 0,
Anna Bridge 142:4eea097334d6 109 /** Active High */
Anna Bridge 142:4eea097334d6 110 ebiActiveHigh = 1
Anna Bridge 142:4eea097334d6 111 } EBI_Polarity_TypeDef;
Anna Bridge 142:4eea097334d6 112
Anna Bridge 142:4eea097334d6 113 /** EBI Pin Line types */
Anna Bridge 142:4eea097334d6 114 typedef enum
Anna Bridge 142:4eea097334d6 115 {
Anna Bridge 142:4eea097334d6 116 /** Address Ready line */
Anna Bridge 142:4eea097334d6 117 ebiLineARDY,
Anna Bridge 142:4eea097334d6 118 /** Address Latch Enable line */
Anna Bridge 142:4eea097334d6 119 ebiLineALE,
Anna Bridge 142:4eea097334d6 120 /** Write Enable line */
Anna Bridge 142:4eea097334d6 121 ebiLineWE,
Anna Bridge 142:4eea097334d6 122 /** Read Enable line */
Anna Bridge 142:4eea097334d6 123 ebiLineRE,
Anna Bridge 142:4eea097334d6 124 /** Chip Select line */
Anna Bridge 142:4eea097334d6 125 ebiLineCS,
Anna Bridge 142:4eea097334d6 126 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 127 /** BL line */
Anna Bridge 142:4eea097334d6 128 ebiLineBL,
Anna Bridge 142:4eea097334d6 129 #endif
Anna Bridge 142:4eea097334d6 130 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 131 /** TFT VSYNC line */
Anna Bridge 142:4eea097334d6 132 ebiLineTFTVSync,
Anna Bridge 142:4eea097334d6 133 /** TFT HSYNC line */
Anna Bridge 142:4eea097334d6 134 ebiLineTFTHSync,
Anna Bridge 142:4eea097334d6 135 /** TFT Data enable line */
Anna Bridge 142:4eea097334d6 136 ebiLineTFTDataEn,
Anna Bridge 142:4eea097334d6 137 /** TFT DCLK line */
Anna Bridge 142:4eea097334d6 138 ebiLineTFTDClk,
Anna Bridge 142:4eea097334d6 139 /** TFT Chip select line */
Anna Bridge 142:4eea097334d6 140 ebiLineTFTCS,
Anna Bridge 142:4eea097334d6 141 #endif
Anna Bridge 142:4eea097334d6 142 } EBI_Line_TypeDef;
Anna Bridge 142:4eea097334d6 143
Anna Bridge 142:4eea097334d6 144 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 145 /** Address Pin Enable, lower limit - lower range of pins to enable */
Anna Bridge 142:4eea097334d6 146 typedef enum
Anna Bridge 142:4eea097334d6 147 {
Anna Bridge 142:4eea097334d6 148 /** Adress lines EBI_A[0] and upwards are enabled by APEN */
Anna Bridge 142:4eea097334d6 149 ebiALowA0 = EBI_ROUTE_ALB_A0,
Anna Bridge 142:4eea097334d6 150 /** Adress lines EBI_A[8] and upwards are enabled by APEN */
Anna Bridge 142:4eea097334d6 151 ebiALowA8 = EBI_ROUTE_ALB_A8,
Anna Bridge 142:4eea097334d6 152 /** Adress lines EBI_A[16] and upwards are enabled by APEN */
Anna Bridge 142:4eea097334d6 153 ebiALowA16 = EBI_ROUTE_ALB_A16,
Anna Bridge 142:4eea097334d6 154 /** Adress lines EBI_A[24] and upwards are enabled by APEN */
Anna Bridge 142:4eea097334d6 155 ebiALowA24 = EBI_ROUTE_ALB_A24,
Anna Bridge 142:4eea097334d6 156 } EBI_ALow_TypeDef;
Anna Bridge 142:4eea097334d6 157
Anna Bridge 142:4eea097334d6 158 /** Adress Pin Enable, high limit - higher limit of pins to enable */
Anna Bridge 142:4eea097334d6 159 typedef enum
Anna Bridge 142:4eea097334d6 160 {
Anna Bridge 142:4eea097334d6 161 /** All EBI_A pins are disabled */
Anna Bridge 142:4eea097334d6 162 ebiAHighA0 = EBI_ROUTE_APEN_A0,
Anna Bridge 142:4eea097334d6 163 /** All EBI_A[4:ALow] are enabled */
Anna Bridge 142:4eea097334d6 164 ebiAHighA5 = EBI_ROUTE_APEN_A5,
Anna Bridge 142:4eea097334d6 165 /** All EBI_A[5:ALow] are enabled */
Anna Bridge 142:4eea097334d6 166 ebiAHighA6 = EBI_ROUTE_APEN_A6,
Anna Bridge 142:4eea097334d6 167 /** All EBI_A[6:ALow] are enabled */
Anna Bridge 142:4eea097334d6 168 ebiAHighA7 = EBI_ROUTE_APEN_A7,
Anna Bridge 142:4eea097334d6 169 /** All EBI_A[7:ALow] are enabled */
Anna Bridge 142:4eea097334d6 170 ebiAHighA8 = EBI_ROUTE_APEN_A8,
Anna Bridge 142:4eea097334d6 171 /** All EBI_A[8:ALow] are enabled */
Anna Bridge 142:4eea097334d6 172 ebiAHighA9 = EBI_ROUTE_APEN_A9,
Anna Bridge 142:4eea097334d6 173 /** All EBI_A[9:ALow] are enabled */
Anna Bridge 142:4eea097334d6 174 ebiAHighA10 = EBI_ROUTE_APEN_A10,
Anna Bridge 142:4eea097334d6 175 /** All EBI_A[10:ALow] are enabled */
Anna Bridge 142:4eea097334d6 176 ebiAHighA11 = EBI_ROUTE_APEN_A11,
Anna Bridge 142:4eea097334d6 177 /** All EBI_A[11:ALow] are enabled */
Anna Bridge 142:4eea097334d6 178 ebiAHighA12 = EBI_ROUTE_APEN_A12,
Anna Bridge 142:4eea097334d6 179 /** All EBI_A[12:ALow] are enabled */
Anna Bridge 142:4eea097334d6 180 ebiAHighA13 = EBI_ROUTE_APEN_A13,
Anna Bridge 142:4eea097334d6 181 /** All EBI_A[13:ALow] are enabled */
Anna Bridge 142:4eea097334d6 182 ebiAHighA14 = EBI_ROUTE_APEN_A14,
Anna Bridge 142:4eea097334d6 183 /** All EBI_A[14:ALow] are enabled */
Anna Bridge 142:4eea097334d6 184 ebiAHighA15 = EBI_ROUTE_APEN_A15,
Anna Bridge 142:4eea097334d6 185 /** All EBI_A[15:ALow] are enabled */
Anna Bridge 142:4eea097334d6 186 ebiAHighA16 = EBI_ROUTE_APEN_A16,
Anna Bridge 142:4eea097334d6 187 /** All EBI_A[16:ALow] are enabled */
Anna Bridge 142:4eea097334d6 188 ebiAHighA17 = EBI_ROUTE_APEN_A17,
Anna Bridge 142:4eea097334d6 189 /** All EBI_A[17:ALow] are enabled */
Anna Bridge 142:4eea097334d6 190 ebiAHighA18 = EBI_ROUTE_APEN_A18,
Anna Bridge 142:4eea097334d6 191 /** All EBI_A[18:ALow] are enabled */
Anna Bridge 142:4eea097334d6 192 ebiAHighA19 = EBI_ROUTE_APEN_A19,
Anna Bridge 142:4eea097334d6 193 /** All EBI_A[19:ALow] are enabled */
Anna Bridge 142:4eea097334d6 194 ebiAHighA20 = EBI_ROUTE_APEN_A20,
Anna Bridge 142:4eea097334d6 195 /** All EBI_A[20:ALow] are enabled */
Anna Bridge 142:4eea097334d6 196 ebiAHighA21 = EBI_ROUTE_APEN_A21,
Anna Bridge 142:4eea097334d6 197 /** All EBI_A[21:ALow] are enabled */
Anna Bridge 142:4eea097334d6 198 ebiAHighA22 = EBI_ROUTE_APEN_A22,
Anna Bridge 142:4eea097334d6 199 /** All EBI_A[22:ALow] are enabled */
Anna Bridge 142:4eea097334d6 200 ebiAHighA23 = EBI_ROUTE_APEN_A23,
Anna Bridge 142:4eea097334d6 201 /** All EBI_A[23:ALow] are enabled */
Anna Bridge 142:4eea097334d6 202 ebiAHighA24 = EBI_ROUTE_APEN_A24,
Anna Bridge 142:4eea097334d6 203 /** All EBI_A[24:ALow] are enabled */
Anna Bridge 142:4eea097334d6 204 ebiAHighA25 = EBI_ROUTE_APEN_A25,
Anna Bridge 142:4eea097334d6 205 /** All EBI_A[25:ALow] are enabled */
Anna Bridge 142:4eea097334d6 206 ebiAHighA26 = EBI_ROUTE_APEN_A26,
Anna Bridge 142:4eea097334d6 207 /** All EBI_A[26:ALow] are enabled */
Anna Bridge 142:4eea097334d6 208 ebiAHighA27 = EBI_ROUTE_APEN_A27,
Anna Bridge 142:4eea097334d6 209 /** All EBI_A[27:ALow] are enabled */
Anna Bridge 142:4eea097334d6 210 ebiAHighA28 = EBI_ROUTE_APEN_A28,
Anna Bridge 142:4eea097334d6 211 } EBI_AHigh_TypeDef;
Anna Bridge 142:4eea097334d6 212
Anna Bridge 142:4eea097334d6 213 /** EBI I/O Alternate Pin Location */
Anna Bridge 142:4eea097334d6 214 typedef enum {
Anna Bridge 142:4eea097334d6 215 /** EBI PIN I/O Location 0 */
Anna Bridge 142:4eea097334d6 216 ebiLocation0 = EBI_ROUTE_LOCATION_LOC0,
Anna Bridge 142:4eea097334d6 217 /** EBI PIN I/O Location 1 */
Anna Bridge 142:4eea097334d6 218 ebiLocation1 = EBI_ROUTE_LOCATION_LOC1,
Anna Bridge 142:4eea097334d6 219 /** EBI PIN I/O Location 2 */
Anna Bridge 142:4eea097334d6 220 ebiLocation2 = EBI_ROUTE_LOCATION_LOC2
Anna Bridge 142:4eea097334d6 221 } EBI_Location_TypeDef;
Anna Bridge 142:4eea097334d6 222 #endif
Anna Bridge 142:4eea097334d6 223
Anna Bridge 142:4eea097334d6 224 /* TFT support */
Anna Bridge 142:4eea097334d6 225 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 226 /** EBI TFT Graphics Bank Select */
Anna Bridge 142:4eea097334d6 227 typedef enum
Anna Bridge 142:4eea097334d6 228 {
Anna Bridge 142:4eea097334d6 229 /** Memory BANK0 contains frame buffer */
Anna Bridge 142:4eea097334d6 230 ebiTFTBank0 = EBI_TFTCTRL_BANKSEL_BANK0,
Anna Bridge 142:4eea097334d6 231 /** Memory BANK1 contains frame buffer */
Anna Bridge 142:4eea097334d6 232 ebiTFTBank1 = EBI_TFTCTRL_BANKSEL_BANK1,
Anna Bridge 142:4eea097334d6 233 /** Memory BANK2 contains frame buffer */
Anna Bridge 142:4eea097334d6 234 ebiTFTBank2 = EBI_TFTCTRL_BANKSEL_BANK2,
Anna Bridge 142:4eea097334d6 235 /** Memory BANK3 contains frame buffer */
Anna Bridge 142:4eea097334d6 236 ebiTFTBank3 = EBI_TFTCTRL_BANKSEL_BANK3
Anna Bridge 142:4eea097334d6 237 } EBI_TFTBank_TypeDef;
Anna Bridge 142:4eea097334d6 238
Anna Bridge 142:4eea097334d6 239 /** Masking and Alpha blending source color*/
Anna Bridge 142:4eea097334d6 240 typedef enum
Anna Bridge 142:4eea097334d6 241 {
Anna Bridge 142:4eea097334d6 242 /** Use memory as source color for masking/alpha blending */
Anna Bridge 142:4eea097334d6 243 ebiTFTColorSrcMem = EBI_TFTCTRL_COLOR1SRC_MEM,
Anna Bridge 142:4eea097334d6 244 /** Use PIXEL1 register as source color for masking/alpha blending */
Anna Bridge 142:4eea097334d6 245 ebiTFTColorSrcPixel1 = EBI_TFTCTRL_COLOR1SRC_PIXEL1,
Anna Bridge 142:4eea097334d6 246 } EBI_TFTColorSrc_TypeDef;
Anna Bridge 142:4eea097334d6 247
Anna Bridge 142:4eea097334d6 248 /** Bus Data Interleave Mode */
Anna Bridge 142:4eea097334d6 249 typedef enum
Anna Bridge 142:4eea097334d6 250 {
Anna Bridge 142:4eea097334d6 251 /** Unlimited interleaved accesses per EBI_DCLK period. Can cause jitter */
Anna Bridge 142:4eea097334d6 252 ebiTFTInterleaveUnlimited = EBI_TFTCTRL_INTERLEAVE_UNLIMITED,
Anna Bridge 142:4eea097334d6 253 /** Allow 1 interleaved access per EBI_DCLK period */
Anna Bridge 142:4eea097334d6 254 ebiTFTInterleaveOnePerDClk = EBI_TFTCTRL_INTERLEAVE_ONEPERDCLK,
Anna Bridge 142:4eea097334d6 255 /** Only allow accesses during porch periods */
Anna Bridge 142:4eea097334d6 256 ebiTFTInterleavePorch = EBI_TFTCTRL_INTERLEAVE_PORCH,
Anna Bridge 142:4eea097334d6 257 } EBI_TFTInterleave_TypeDef;
Anna Bridge 142:4eea097334d6 258
Anna Bridge 142:4eea097334d6 259 /** Control frame base pointer copy */
Anna Bridge 142:4eea097334d6 260 typedef enum
Anna Bridge 142:4eea097334d6 261 {
Anna Bridge 142:4eea097334d6 262 /** Trigger update of frame buffer pointer on vertical sync */
Anna Bridge 142:4eea097334d6 263 ebiTFTFrameBufTriggerVSync = EBI_TFTCTRL_FBCTRIG_VSYNC,
Anna Bridge 142:4eea097334d6 264 /** Trigger update of frame buffer pointer on horizontal sync */
Anna Bridge 142:4eea097334d6 265 ebiTFTFrameBufTriggerHSync = EBI_TFTCTRL_FBCTRIG_HSYNC,
Anna Bridge 142:4eea097334d6 266 } EBI_TFTFrameBufTrigger_TypeDef;
Anna Bridge 142:4eea097334d6 267
Anna Bridge 142:4eea097334d6 268 /** Control of mask and alpha blending mode */
Anna Bridge 142:4eea097334d6 269 typedef enum
Anna Bridge 142:4eea097334d6 270 {
Anna Bridge 142:4eea097334d6 271 /** Masking and blending are disabled */
Anna Bridge 142:4eea097334d6 272 ebiTFTMBDisabled = EBI_TFTCTRL_MASKBLEND_DISABLED,
Anna Bridge 142:4eea097334d6 273 /** Internal masking */
Anna Bridge 142:4eea097334d6 274 ebiTFTMBIMask = EBI_TFTCTRL_MASKBLEND_IMASK,
Anna Bridge 142:4eea097334d6 275 /** Internal alpha blending */
Anna Bridge 142:4eea097334d6 276 ebiTFTMBIAlpha = EBI_TFTCTRL_MASKBLEND_IALPHA,
Anna Bridge 142:4eea097334d6 277 /** Internal masking and alpha blending are enabled */
Anna Bridge 142:4eea097334d6 278 ebiTFTMBIMaskAlpha = EBI_TFTCTRL_MASKBLEND_IMASKIALPHA,
Anna Bridge 142:4eea097334d6 279 /** External masking */
Anna Bridge 142:4eea097334d6 280 ebiTFTMBEMask = EBI_TFTCTRL_MASKBLEND_EMASK,
Anna Bridge 142:4eea097334d6 281 /** External alpha blending */
Anna Bridge 142:4eea097334d6 282 ebiTFTMBEAlpha = EBI_TFTCTRL_MASKBLEND_EALPHA,
Anna Bridge 142:4eea097334d6 283 /** External masking and alpha blending */
Anna Bridge 142:4eea097334d6 284 ebiTFTMBEMaskAlpha = EBI_TFTCTRL_MASKBLEND_EMASKEALPHA,
Anna Bridge 142:4eea097334d6 285 } EBI_TFTMaskBlend_TypeDef;
Anna Bridge 142:4eea097334d6 286
Anna Bridge 142:4eea097334d6 287 /** TFT Direct Drive mode */
Anna Bridge 142:4eea097334d6 288 typedef enum
Anna Bridge 142:4eea097334d6 289 {
Anna Bridge 142:4eea097334d6 290 /** Disabled */
Anna Bridge 142:4eea097334d6 291 ebiTFTDDModeDisabled = EBI_TFTCTRL_DD_DISABLED,
Anna Bridge 142:4eea097334d6 292 /** Direct Drive from internal memory */
Anna Bridge 142:4eea097334d6 293 ebiTFTDDModeInternal = EBI_TFTCTRL_DD_INTERNAL,
Anna Bridge 142:4eea097334d6 294 /** Direct Drive from external memory */
Anna Bridge 142:4eea097334d6 295 ebiTFTDDModeExternal = EBI_TFTCTRL_DD_EXTERNAL,
Anna Bridge 142:4eea097334d6 296 } EBI_TFTDDMode_TypeDef;
Anna Bridge 142:4eea097334d6 297
Anna Bridge 142:4eea097334d6 298 /** TFT Data Increment Width */
Anna Bridge 142:4eea097334d6 299 typedef enum
Anna Bridge 142:4eea097334d6 300 {
Anna Bridge 142:4eea097334d6 301 /** Pixel increments are 1 byte at a time */
Anna Bridge 142:4eea097334d6 302 ebiTFTWidthByte = EBI_TFTCTRL_WIDTH_BYTE,
Anna Bridge 142:4eea097334d6 303 /** Pixel increments are 2 bytes (half word) */
Anna Bridge 142:4eea097334d6 304 ebiTFTWidthHalfWord = EBI_TFTCTRL_WIDTH_HALFWORD,
Anna Bridge 142:4eea097334d6 305 } EBI_TFTWidth_TypeDef;
Anna Bridge 142:4eea097334d6 306
Anna Bridge 142:4eea097334d6 307 #endif
Anna Bridge 142:4eea097334d6 308
Anna Bridge 142:4eea097334d6 309 /*******************************************************************************
Anna Bridge 142:4eea097334d6 310 ******************************* STRUCTS ***********************************
Anna Bridge 142:4eea097334d6 311 ******************************************************************************/
Anna Bridge 142:4eea097334d6 312
Anna Bridge 142:4eea097334d6 313 /** EBI Initialization structure */
Anna Bridge 142:4eea097334d6 314 typedef struct
Anna Bridge 142:4eea097334d6 315 {
Anna Bridge 142:4eea097334d6 316 /** EBI operation mode, data and address limits */
Anna Bridge 142:4eea097334d6 317 EBI_Mode_TypeDef mode;
Anna Bridge 142:4eea097334d6 318 /** Address Ready pin polarity, active high or low */
Anna Bridge 142:4eea097334d6 319 EBI_Polarity_TypeDef ardyPolarity;
Anna Bridge 142:4eea097334d6 320 /** Address Latch Enable pin polarity, active high or low */
Anna Bridge 142:4eea097334d6 321 EBI_Polarity_TypeDef alePolarity;
Anna Bridge 142:4eea097334d6 322 /** Write Enable pin polarity, active high or low */
Anna Bridge 142:4eea097334d6 323 EBI_Polarity_TypeDef wePolarity;
Anna Bridge 142:4eea097334d6 324 /** Read Enable pin polarity, active high or low */
Anna Bridge 142:4eea097334d6 325 EBI_Polarity_TypeDef rePolarity;
Anna Bridge 142:4eea097334d6 326 /** Chip Select pin polarity, active high or low */
Anna Bridge 142:4eea097334d6 327 EBI_Polarity_TypeDef csPolarity;
Anna Bridge 142:4eea097334d6 328 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 329 /** Byte Lane pin polaritym, active high or low */
Anna Bridge 142:4eea097334d6 330 EBI_Polarity_TypeDef blPolarity;
Anna Bridge 142:4eea097334d6 331 /** Flag to enable or disable Byte Lane support */
Anna Bridge 142:4eea097334d6 332 bool blEnable;
Anna Bridge 142:4eea097334d6 333 /** Flag to enable or disable idle state insertion between transfers */
Anna Bridge 142:4eea097334d6 334 bool noIdle;
Anna Bridge 142:4eea097334d6 335 #endif
Anna Bridge 142:4eea097334d6 336 /** Flag to enable or disable Address Ready support */
Anna Bridge 142:4eea097334d6 337 bool ardyEnable;
Anna Bridge 142:4eea097334d6 338 /** Set to turn off 32 cycle timeout ability */
Anna Bridge 142:4eea097334d6 339 bool ardyDisableTimeout;
Anna Bridge 142:4eea097334d6 340 /** Mask of flags which selects address banks to configure EBI_BANK<0-3> */
Anna Bridge 142:4eea097334d6 341 uint32_t banks;
Anna Bridge 142:4eea097334d6 342 /** Mask of flags which selects chip select lines to configure EBI_CS<0-3> */
Anna Bridge 142:4eea097334d6 343 uint32_t csLines;
Anna Bridge 142:4eea097334d6 344 /** Number of cycles address is held after Adress Latch Enable is asserted */
Anna Bridge 142:4eea097334d6 345 int addrSetupCycles;
Anna Bridge 142:4eea097334d6 346 /** Number of cycles address is driven onto the ADDRDAT bus before ALE is asserted */
Anna Bridge 142:4eea097334d6 347 int addrHoldCycles;
Anna Bridge 142:4eea097334d6 348 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 349 /** Enable or disables half cycle duration of the ALE strobe in the last address setup cycle */
Anna Bridge 142:4eea097334d6 350 bool addrHalfALE;
Anna Bridge 142:4eea097334d6 351 #endif
Anna Bridge 142:4eea097334d6 352 /** Number of cycles for address setup before REn is asserted */
Anna Bridge 142:4eea097334d6 353 int readSetupCycles;
Anna Bridge 142:4eea097334d6 354 /** Number of cycles REn is held active */
Anna Bridge 142:4eea097334d6 355 int readStrobeCycles;
Anna Bridge 142:4eea097334d6 356 /** Number of cycles CSn is held active after REn is deasserted */
Anna Bridge 142:4eea097334d6 357 int readHoldCycles;
Anna Bridge 142:4eea097334d6 358 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 359 /** Enable or disable page mode reads */
Anna Bridge 142:4eea097334d6 360 bool readPageMode;
Anna Bridge 142:4eea097334d6 361 /** Enables or disable prefetching from sequential addresses */
Anna Bridge 142:4eea097334d6 362 bool readPrefetch;
Anna Bridge 142:4eea097334d6 363 /** Enabled or disables half cycle duration of the REn signal in the last strobe cycle */
Anna Bridge 142:4eea097334d6 364 bool readHalfRE;
Anna Bridge 142:4eea097334d6 365 #endif
Anna Bridge 142:4eea097334d6 366 /** Number of cycles for address setup before WEn is asserted */
Anna Bridge 142:4eea097334d6 367 int writeSetupCycles;
Anna Bridge 142:4eea097334d6 368 /** Number of cycles WEn is held active */
Anna Bridge 142:4eea097334d6 369 int writeStrobeCycles;
Anna Bridge 142:4eea097334d6 370 /** Number of cycles CSn is held active after WEn is deasserted */
Anna Bridge 142:4eea097334d6 371 int writeHoldCycles;
Anna Bridge 142:4eea097334d6 372 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 373 /** Enable or disable the write buffer */
Anna Bridge 142:4eea097334d6 374 bool writeBufferDisable;
Anna Bridge 142:4eea097334d6 375 /** Enables or disables half cycle duration of the WEn signal in the last strobe cycle */
Anna Bridge 142:4eea097334d6 376 bool writeHalfWE;
Anna Bridge 142:4eea097334d6 377 /** Lower address pin limit to enable */
Anna Bridge 142:4eea097334d6 378 EBI_ALow_TypeDef aLow;
Anna Bridge 142:4eea097334d6 379 /** High address pin limit to enable */
Anna Bridge 142:4eea097334d6 380 EBI_AHigh_TypeDef aHigh;
Anna Bridge 142:4eea097334d6 381 /** Pin Location */
Anna Bridge 142:4eea097334d6 382 EBI_Location_TypeDef location;
Anna Bridge 142:4eea097334d6 383 #endif
Anna Bridge 142:4eea097334d6 384 /** Flag, if EBI should be enabled after configuration */
Anna Bridge 142:4eea097334d6 385 bool enable;
Anna Bridge 142:4eea097334d6 386 } EBI_Init_TypeDef;
Anna Bridge 142:4eea097334d6 387
Anna Bridge 142:4eea097334d6 388 /** Default config for EBI init structures */
Anna Bridge 142:4eea097334d6 389 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 390 #define EBI_INIT_DEFAULT \
Anna Bridge 142:4eea097334d6 391 { \
Anna Bridge 142:4eea097334d6 392 ebiModeD8A8, /* 8 bit address, 8 bit data */ \
Anna Bridge 142:4eea097334d6 393 ebiActiveLow, /* ARDY polarity */ \
Anna Bridge 142:4eea097334d6 394 ebiActiveLow, /* ALE polarity */ \
Anna Bridge 142:4eea097334d6 395 ebiActiveLow, /* WE polarity */ \
Anna Bridge 142:4eea097334d6 396 ebiActiveLow, /* RE polarity */ \
Anna Bridge 142:4eea097334d6 397 ebiActiveLow, /* CS polarity */ \
Anna Bridge 142:4eea097334d6 398 ebiActiveLow, /* BL polarity */ \
Anna Bridge 142:4eea097334d6 399 false, /* enable BL */ \
Anna Bridge 142:4eea097334d6 400 false, /* enable NOIDLE */ \
Anna Bridge 142:4eea097334d6 401 false, /* enable ARDY */ \
Anna Bridge 142:4eea097334d6 402 false, /* don't disable ARDY timeout */ \
Anna Bridge 142:4eea097334d6 403 EBI_BANK0, /* enable bank 0 */ \
Anna Bridge 142:4eea097334d6 404 EBI_CS0, /* enable chip select 0 */ \
Anna Bridge 142:4eea097334d6 405 0, /* addr setup cycles */ \
Anna Bridge 142:4eea097334d6 406 1, /* addr hold cycles */ \
Anna Bridge 142:4eea097334d6 407 false, /* do not enable half cycle ALE strobe */ \
Anna Bridge 142:4eea097334d6 408 0, /* read setup cycles */ \
Anna Bridge 142:4eea097334d6 409 0, /* read strobe cycles */ \
Anna Bridge 142:4eea097334d6 410 0, /* read hold cycles */ \
Anna Bridge 142:4eea097334d6 411 false, /* disable page mode */ \
Anna Bridge 142:4eea097334d6 412 false, /* disable prefetch */ \
Anna Bridge 142:4eea097334d6 413 false, /* do not enable half cycle REn strobe */ \
Anna Bridge 142:4eea097334d6 414 0, /* write setup cycles */ \
Anna Bridge 142:4eea097334d6 415 0, /* write strobe cycles */ \
Anna Bridge 142:4eea097334d6 416 1, /* write hold cycles */ \
Anna Bridge 142:4eea097334d6 417 false, /* do not disable the write buffer */ \
Anna Bridge 142:4eea097334d6 418 false, /* do not enable halc cycle WEn strobe */ \
Anna Bridge 142:4eea097334d6 419 ebiALowA0, /* ALB - Low bound, address lines */ \
Anna Bridge 142:4eea097334d6 420 ebiAHighA0, /* APEN - High bound, address lines */ \
Anna Bridge 142:4eea097334d6 421 ebiLocation0, /* Use Location 0 */ \
Anna Bridge 142:4eea097334d6 422 true, /* enable EBI */ \
Anna Bridge 142:4eea097334d6 423 }
Anna Bridge 142:4eea097334d6 424 #else
Anna Bridge 142:4eea097334d6 425 #define EBI_INIT_DEFAULT \
Anna Bridge 142:4eea097334d6 426 { \
Anna Bridge 142:4eea097334d6 427 ebiModeD8A8, /* 8 bit address, 8 bit data */ \
Anna Bridge 142:4eea097334d6 428 ebiActiveLow, /* ARDY polarity */ \
Anna Bridge 142:4eea097334d6 429 ebiActiveLow, /* ALE polarity */ \
Anna Bridge 142:4eea097334d6 430 ebiActiveLow, /* WE polarity */ \
Anna Bridge 142:4eea097334d6 431 ebiActiveLow, /* RE polarity */ \
Anna Bridge 142:4eea097334d6 432 ebiActiveLow, /* CS polarity */ \
Anna Bridge 142:4eea097334d6 433 false, /* enable ARDY */ \
Anna Bridge 142:4eea097334d6 434 false, /* don't disable ARDY timeout */ \
Anna Bridge 142:4eea097334d6 435 EBI_BANK0, /* enable bank 0 */ \
Anna Bridge 142:4eea097334d6 436 EBI_CS0, /* enable chip select 0 */ \
Anna Bridge 142:4eea097334d6 437 0, /* addr setup cycles */ \
Anna Bridge 142:4eea097334d6 438 1, /* addr hold cycles */ \
Anna Bridge 142:4eea097334d6 439 0, /* read setup cycles */ \
Anna Bridge 142:4eea097334d6 440 0, /* read strobe cycles */ \
Anna Bridge 142:4eea097334d6 441 0, /* read hold cycles */ \
Anna Bridge 142:4eea097334d6 442 0, /* write setup cycles */ \
Anna Bridge 142:4eea097334d6 443 0, /* write strobe cycles */ \
Anna Bridge 142:4eea097334d6 444 1, /* write hold cycles */ \
Anna Bridge 142:4eea097334d6 445 true, /* enable EBI */ \
Anna Bridge 142:4eea097334d6 446 }
Anna Bridge 142:4eea097334d6 447 #endif
Anna Bridge 142:4eea097334d6 448
Anna Bridge 142:4eea097334d6 449 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 450
Anna Bridge 142:4eea097334d6 451 /** TFT Initialization structure */
Anna Bridge 142:4eea097334d6 452 typedef struct
Anna Bridge 142:4eea097334d6 453 {
Anna Bridge 142:4eea097334d6 454 /** External memory bank for driving display */
Anna Bridge 142:4eea097334d6 455 EBI_TFTBank_TypeDef bank;
Anna Bridge 142:4eea097334d6 456 /** Width */
Anna Bridge 142:4eea097334d6 457 EBI_TFTWidth_TypeDef width;
Anna Bridge 142:4eea097334d6 458 /** Color source for masking and alpha blending */
Anna Bridge 142:4eea097334d6 459 EBI_TFTColorSrc_TypeDef colSrc;
Anna Bridge 142:4eea097334d6 460 /** Bus Interleave mode */
Anna Bridge 142:4eea097334d6 461 EBI_TFTInterleave_TypeDef interleave;
Anna Bridge 142:4eea097334d6 462 /** Trigger for updating frame buffer pointer */
Anna Bridge 142:4eea097334d6 463 EBI_TFTFrameBufTrigger_TypeDef fbTrigger;
Anna Bridge 142:4eea097334d6 464 /** Drive DCLK from negative clock edge of internal clock */
Anna Bridge 142:4eea097334d6 465 bool shiftDClk;
Anna Bridge 142:4eea097334d6 466 /** Masking and alpha blending mode */
Anna Bridge 142:4eea097334d6 467 EBI_TFTMaskBlend_TypeDef maskBlend;
Anna Bridge 142:4eea097334d6 468 /** TFT Direct Drive mode */
Anna Bridge 142:4eea097334d6 469 EBI_TFTDDMode_TypeDef driveMode;
Anna Bridge 142:4eea097334d6 470 /** TFT Polarity for Chip Select (CS) Line */
Anna Bridge 142:4eea097334d6 471 EBI_Polarity_TypeDef csPolarity;
Anna Bridge 142:4eea097334d6 472 /** TFT Polarity for Data Clock (DCLK) Line */
Anna Bridge 142:4eea097334d6 473 EBI_Polarity_TypeDef dclkPolarity;
Anna Bridge 142:4eea097334d6 474 /** TFT Polarity for Data Enable (DATAEN) Line */
Anna Bridge 142:4eea097334d6 475 EBI_Polarity_TypeDef dataenPolarity;
Anna Bridge 142:4eea097334d6 476 /** TFT Polarity for Horizontal Sync (HSYNC) Line */
Anna Bridge 142:4eea097334d6 477 EBI_Polarity_TypeDef hsyncPolarity;
Anna Bridge 142:4eea097334d6 478 /** TFT Polarity for Vertical Sync (VSYNC) Line */
Anna Bridge 142:4eea097334d6 479 EBI_Polarity_TypeDef vsyncPolarity;
Anna Bridge 142:4eea097334d6 480 /** Horizontal size in pixels */
Anna Bridge 142:4eea097334d6 481 int hsize;
Anna Bridge 142:4eea097334d6 482 /** Horizontal Front Porch Size */
Anna Bridge 142:4eea097334d6 483 int hPorchFront;
Anna Bridge 142:4eea097334d6 484 /** Horizontal Back Porch Size */
Anna Bridge 142:4eea097334d6 485 int hPorchBack;
Anna Bridge 142:4eea097334d6 486 /** Horizontal Synchronization Pulse Width */
Anna Bridge 142:4eea097334d6 487 int hPulseWidth;
Anna Bridge 142:4eea097334d6 488 /** Vertical size in pixels */
Anna Bridge 142:4eea097334d6 489 int vsize;
Anna Bridge 142:4eea097334d6 490 /** Vertical Front Porch Size */
Anna Bridge 142:4eea097334d6 491 int vPorchFront;
Anna Bridge 142:4eea097334d6 492 /** Vertical Back Porch Size */
Anna Bridge 142:4eea097334d6 493 int vPorchBack;
Anna Bridge 142:4eea097334d6 494 /** Vertical Synchronization Pulse Width */
Anna Bridge 142:4eea097334d6 495 int vPulseWidth;
Anna Bridge 142:4eea097334d6 496 /** TFT Frame Buffer address, offset to EBI bank base address */
Anna Bridge 142:4eea097334d6 497 uint32_t addressOffset;
Anna Bridge 142:4eea097334d6 498 /** TFT DCLK period in internal cycles */
Anna Bridge 142:4eea097334d6 499 int dclkPeriod;
Anna Bridge 142:4eea097334d6 500 /** Starting position of External Direct Drive relative to DCLK inactive edge */
Anna Bridge 142:4eea097334d6 501 int startPosition;
Anna Bridge 142:4eea097334d6 502 /** Number of cycles RGB data is driven before active edge of DCLK */
Anna Bridge 142:4eea097334d6 503 int setupCycles;
Anna Bridge 142:4eea097334d6 504 /** Number of cycles RGB data is held after active edge of DCLK */
Anna Bridge 142:4eea097334d6 505 int holdCycles;
Anna Bridge 142:4eea097334d6 506 } EBI_TFTInit_TypeDef;
Anna Bridge 142:4eea097334d6 507
Anna Bridge 142:4eea097334d6 508 /** Default configuration for EBI TFT init structure */
Anna Bridge 142:4eea097334d6 509 #define EBI_TFTINIT_DEFAULT \
Anna Bridge 142:4eea097334d6 510 { \
Anna Bridge 142:4eea097334d6 511 ebiTFTBank0, /* Select EBI Bank 0 */ \
Anna Bridge 142:4eea097334d6 512 ebiTFTWidthHalfWord, /* Select 2-byte increments */ \
Anna Bridge 142:4eea097334d6 513 ebiTFTColorSrcMem, /* Use memory as source for mask/blending */ \
Anna Bridge 142:4eea097334d6 514 ebiTFTInterleaveUnlimited, /* Unlimited interleaved accesses */ \
Anna Bridge 142:4eea097334d6 515 ebiTFTFrameBufTriggerVSync, /* VSYNC as frame buffer update trigger */ \
Anna Bridge 142:4eea097334d6 516 false, /* Drive DCLK from negative edge of internal clock */ \
Anna Bridge 142:4eea097334d6 517 ebiTFTMBDisabled, /* No masking and alpha blending enabled */ \
Anna Bridge 142:4eea097334d6 518 ebiTFTDDModeExternal, /* Drive from external memory */ \
Anna Bridge 142:4eea097334d6 519 ebiActiveLow, /* CS Active Low polarity */ \
Anna Bridge 142:4eea097334d6 520 ebiActiveLow, /* DCLK Active Low polarity */ \
Anna Bridge 142:4eea097334d6 521 ebiActiveLow, /* DATAEN Active Low polarity */ \
Anna Bridge 142:4eea097334d6 522 ebiActiveLow, /* HSYNC Active Low polarity */ \
Anna Bridge 142:4eea097334d6 523 ebiActiveLow, /* VSYNC Active Low polarity */ \
Anna Bridge 142:4eea097334d6 524 320, /* Horizontal size in pixels */ \
Anna Bridge 142:4eea097334d6 525 1, /* Horizontal Front Porch */ \
Anna Bridge 142:4eea097334d6 526 29, /* Horizontal Back Porch */ \
Anna Bridge 142:4eea097334d6 527 2, /* Horizontal Synchronization Pulse Width */ \
Anna Bridge 142:4eea097334d6 528 240, /* Vertical size in pixels */ \
Anna Bridge 142:4eea097334d6 529 1, /* Vertical Front Porch */ \
Anna Bridge 142:4eea097334d6 530 4, /* Vertical Back Porch */ \
Anna Bridge 142:4eea097334d6 531 2, /* Vertical Synchronization Pulse Width */ \
Anna Bridge 142:4eea097334d6 532 0x0000, /* Address offset to EBI memory base */ \
Anna Bridge 142:4eea097334d6 533 5, /* DCLK Period */ \
Anna Bridge 142:4eea097334d6 534 2, /* DCLK Start */ \
Anna Bridge 142:4eea097334d6 535 1, /* DCLK Setup cycles */ \
Anna Bridge 142:4eea097334d6 536 1, /* DCLK Hold cycles */ \
Anna Bridge 142:4eea097334d6 537 }
Anna Bridge 142:4eea097334d6 538
Anna Bridge 142:4eea097334d6 539 #endif
Anna Bridge 142:4eea097334d6 540 /*******************************************************************************
Anna Bridge 142:4eea097334d6 541 ***************************** PROTOTYPES **********************************
Anna Bridge 142:4eea097334d6 542 ******************************************************************************/
Anna Bridge 142:4eea097334d6 543
Anna Bridge 142:4eea097334d6 544 void EBI_Init(const EBI_Init_TypeDef *ebiInit);
Anna Bridge 142:4eea097334d6 545 void EBI_Disable(void);
Anna Bridge 142:4eea097334d6 546 uint32_t EBI_BankAddress(uint32_t bank);
Anna Bridge 142:4eea097334d6 547 void EBI_BankEnable(uint32_t banks, bool enable);
Anna Bridge 142:4eea097334d6 548
Anna Bridge 142:4eea097334d6 549 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 550 void EBI_TFTInit(const EBI_TFTInit_TypeDef *ebiTFTInit);
Anna Bridge 142:4eea097334d6 551 void EBI_TFTSizeSet(uint32_t horizontal, uint32_t vertical);
Anna Bridge 142:4eea097334d6 552 void EBI_TFTHPorchSet(int front, int back, int pulseWidth);
Anna Bridge 142:4eea097334d6 553 void EBI_TFTVPorchSet(int front, int back, int pulseWidth);
Anna Bridge 142:4eea097334d6 554 void EBI_TFTTimingSet(int dclkPeriod, int start, int setup, int hold);
Anna Bridge 142:4eea097334d6 555 #endif
Anna Bridge 142:4eea097334d6 556
Anna Bridge 142:4eea097334d6 557 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
Anna Bridge 142:4eea097334d6 558 /* This functionality is only available on devices with independent timing support */
Anna Bridge 142:4eea097334d6 559 void EBI_BankReadTimingSet(uint32_t bank, int setupCycles, int strobeCycles, int holdCycles);
Anna Bridge 142:4eea097334d6 560 void EBI_BankReadTimingConfig(uint32_t bank, bool pageMode, bool prefetch, bool halfRE);
Anna Bridge 142:4eea097334d6 561
Anna Bridge 142:4eea097334d6 562 void EBI_BankWriteTimingSet(uint32_t bank, int setupCycles, int strobeCycles, int holdCycles);
Anna Bridge 142:4eea097334d6 563 void EBI_BankWriteTimingConfig(uint32_t bank, bool writeBufDisable, bool halfWE);
Anna Bridge 142:4eea097334d6 564
Anna Bridge 142:4eea097334d6 565 void EBI_BankAddressTimingSet(uint32_t bank, int setupCycles, int holdCycles);
Anna Bridge 142:4eea097334d6 566 void EBI_BankAddressTimingConfig(uint32_t bank, bool halfALE);
Anna Bridge 142:4eea097334d6 567
Anna Bridge 142:4eea097334d6 568 void EBI_BankPolaritySet(uint32_t bank, EBI_Line_TypeDef line, EBI_Polarity_TypeDef polarity);
Anna Bridge 142:4eea097334d6 569 void EBI_BankByteLaneEnable(uint32_t bank, bool enable);
Anna Bridge 142:4eea097334d6 570 void EBI_AltMapEnable(bool enable);
Anna Bridge 142:4eea097334d6 571
Anna Bridge 142:4eea097334d6 572 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 573 * @brief
Anna Bridge 142:4eea097334d6 574 * Enable or disable TFT Direct Drive
Anna Bridge 142:4eea097334d6 575 *
Anna Bridge 142:4eea097334d6 576 * @param[in] mode
Anna Bridge 142:4eea097334d6 577 * Drive from Internal or External memory, or Disable Direct Drive
Anna Bridge 142:4eea097334d6 578 ******************************************************************************/
Anna Bridge 142:4eea097334d6 579 __STATIC_INLINE void EBI_TFTEnable(EBI_TFTDDMode_TypeDef mode)
Anna Bridge 142:4eea097334d6 580 {
Anna Bridge 142:4eea097334d6 581 EBI->TFTCTRL = (EBI->TFTCTRL & ~(_EBI_TFTCTRL_DD_MASK)) | (uint32_t) mode;
Anna Bridge 142:4eea097334d6 582 }
Anna Bridge 142:4eea097334d6 583
Anna Bridge 142:4eea097334d6 584
Anna Bridge 142:4eea097334d6 585 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 586 * @brief
Anna Bridge 142:4eea097334d6 587 * Configure frame buffer pointer
Anna Bridge 142:4eea097334d6 588 *
Anna Bridge 142:4eea097334d6 589 * @param[in] address
Anna Bridge 142:4eea097334d6 590 * Frame pointer address, as offset by EBI base address
Anna Bridge 142:4eea097334d6 591 ******************************************************************************/
Anna Bridge 142:4eea097334d6 592 __STATIC_INLINE void EBI_TFTFrameBaseSet(uint32_t address)
Anna Bridge 142:4eea097334d6 593 {
Anna Bridge 142:4eea097334d6 594 EBI->TFTFRAMEBASE = (uint32_t) address;
Anna Bridge 142:4eea097334d6 595 }
Anna Bridge 142:4eea097334d6 596
Anna Bridge 142:4eea097334d6 597
Anna Bridge 142:4eea097334d6 598 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 599 * @brief Set TFT Pixel Color 0 or 1
Anna Bridge 142:4eea097334d6 600 *
Anna Bridge 142:4eea097334d6 601 * @param[in] pixel
Anna Bridge 142:4eea097334d6 602 * Which pixel instance to set
Anna Bridge 142:4eea097334d6 603 * @param[in] color
Anna Bridge 142:4eea097334d6 604 * Color of pixel, 16-bit value
Anna Bridge 142:4eea097334d6 605 ******************************************************************************/
Anna Bridge 142:4eea097334d6 606 __STATIC_INLINE void EBI_TFTPixelSet(int pixel, uint32_t color)
Anna Bridge 142:4eea097334d6 607 {
Anna Bridge 142:4eea097334d6 608 EFM_ASSERT(pixel == 0 || pixel == 1);
Anna Bridge 142:4eea097334d6 609
Anna Bridge 142:4eea097334d6 610 if (pixel == 0)
Anna Bridge 142:4eea097334d6 611 {
Anna Bridge 142:4eea097334d6 612 EBI->TFTPIXEL0 = color;
Anna Bridge 142:4eea097334d6 613 }
Anna Bridge 142:4eea097334d6 614 if (pixel == 1)
Anna Bridge 142:4eea097334d6 615 {
Anna Bridge 142:4eea097334d6 616 EBI->TFTPIXEL1 = color;
Anna Bridge 142:4eea097334d6 617 }
Anna Bridge 142:4eea097334d6 618 }
Anna Bridge 142:4eea097334d6 619
Anna Bridge 142:4eea097334d6 620
Anna Bridge 142:4eea097334d6 621 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 622 * @brief Masking and Blending Mode Set
Anna Bridge 142:4eea097334d6 623 *
Anna Bridge 142:4eea097334d6 624 * @param[in] maskBlend
Anna Bridge 142:4eea097334d6 625 * Masking and alpha blending mode
Anna Bridge 142:4eea097334d6 626 ******************************************************************************/
Anna Bridge 142:4eea097334d6 627 __STATIC_INLINE void EBI_TFTMaskBlendMode(EBI_TFTMaskBlend_TypeDef maskBlend)
Anna Bridge 142:4eea097334d6 628 {
Anna Bridge 142:4eea097334d6 629 EBI->TFTCTRL = (EBI->TFTCTRL & (~_EBI_TFTCTRL_MASKBLEND_MASK))|maskBlend;
Anna Bridge 142:4eea097334d6 630 }
Anna Bridge 142:4eea097334d6 631
Anna Bridge 142:4eea097334d6 632
Anna Bridge 142:4eea097334d6 633 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 634 * @brief Set TFT Alpha Blending Factor
Anna Bridge 142:4eea097334d6 635 *
Anna Bridge 142:4eea097334d6 636 * @param[in] alpha
Anna Bridge 142:4eea097334d6 637 * 8-bit value indicating blending factor
Anna Bridge 142:4eea097334d6 638 ******************************************************************************/
Anna Bridge 142:4eea097334d6 639 __STATIC_INLINE void EBI_TFTAlphaBlendSet(uint8_t alpha)
Anna Bridge 142:4eea097334d6 640 {
Anna Bridge 142:4eea097334d6 641 EBI->TFTALPHA = alpha;
Anna Bridge 142:4eea097334d6 642 }
Anna Bridge 142:4eea097334d6 643
Anna Bridge 142:4eea097334d6 644
Anna Bridge 142:4eea097334d6 645 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 646 * @brief Set TFT mask value
Anna Bridge 142:4eea097334d6 647 * Data accesses that matches this value are suppressed
Anna Bridge 142:4eea097334d6 648 * @param[in] mask
Anna Bridge 142:4eea097334d6 649 ******************************************************************************/
Anna Bridge 142:4eea097334d6 650 __STATIC_INLINE void EBI_TFTMaskSet(uint32_t mask)
Anna Bridge 142:4eea097334d6 651 {
Anna Bridge 142:4eea097334d6 652 EBI->TFTMASK = mask;
Anna Bridge 142:4eea097334d6 653 }
Anna Bridge 142:4eea097334d6 654
Anna Bridge 142:4eea097334d6 655
Anna Bridge 142:4eea097334d6 656 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 657 * @brief Get current vertical position counter
Anna Bridge 142:4eea097334d6 658 * @return
Anna Bridge 142:4eea097334d6 659 * Returns the current line position for the visible part of a frame
Anna Bridge 142:4eea097334d6 660 ******************************************************************************/
Anna Bridge 142:4eea097334d6 661 __STATIC_INLINE uint32_t EBI_TFTVCount(void)
Anna Bridge 142:4eea097334d6 662 {
Anna Bridge 142:4eea097334d6 663 return((EBI->TFTSTATUS & _EBI_TFTSTATUS_VCNT_MASK) >> _EBI_TFTSTATUS_VCNT_SHIFT);
Anna Bridge 142:4eea097334d6 664 }
Anna Bridge 142:4eea097334d6 665
Anna Bridge 142:4eea097334d6 666
Anna Bridge 142:4eea097334d6 667 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 668 * @brief Get current horizontal position counter
Anna Bridge 142:4eea097334d6 669 * @return
Anna Bridge 142:4eea097334d6 670 * Returns the current horizontal pixel position within a visible line
Anna Bridge 142:4eea097334d6 671 ******************************************************************************/
Anna Bridge 142:4eea097334d6 672 __STATIC_INLINE uint32_t EBI_TFTHCount(void)
Anna Bridge 142:4eea097334d6 673 {
Anna Bridge 142:4eea097334d6 674 return((EBI->TFTSTATUS & _EBI_TFTSTATUS_HCNT_MASK) >> _EBI_TFTSTATUS_HCNT_SHIFT);
Anna Bridge 142:4eea097334d6 675 }
Anna Bridge 142:4eea097334d6 676
Anna Bridge 142:4eea097334d6 677
Anna Bridge 142:4eea097334d6 678 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 679 * @brief Set Frame Buffer Trigger
Anna Bridge 142:4eea097334d6 680 *
Anna Bridge 142:4eea097334d6 681 * @details
Anna Bridge 142:4eea097334d6 682 * Frame buffer pointer will be updated either on each horizontal line (hsync)
Anna Bridge 142:4eea097334d6 683 * or vertical update (vsync).
Anna Bridge 142:4eea097334d6 684 *
Anna Bridge 142:4eea097334d6 685 * @param[in] sync
Anna Bridge 142:4eea097334d6 686 * Trigger update of frame buffer pointer on vertical or horisontal sync.
Anna Bridge 142:4eea097334d6 687 ******************************************************************************/
Anna Bridge 142:4eea097334d6 688 __STATIC_INLINE void EBI_TFTFBTriggerSet(EBI_TFTFrameBufTrigger_TypeDef sync)
Anna Bridge 142:4eea097334d6 689 {
Anna Bridge 142:4eea097334d6 690 EBI->TFTCTRL = ((EBI->TFTCTRL & ~_EBI_TFTCTRL_FBCTRIG_MASK)|sync);
Anna Bridge 142:4eea097334d6 691 }
Anna Bridge 142:4eea097334d6 692
Anna Bridge 142:4eea097334d6 693
Anna Bridge 142:4eea097334d6 694 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 695 * @brief Set horizontal TFT stride value in number of bytes
Anna Bridge 142:4eea097334d6 696 *
Anna Bridge 142:4eea097334d6 697 * @param[in] nbytes
Anna Bridge 142:4eea097334d6 698 * Number of bytes to add to frame buffer pointer after each horizontal line
Anna Bridge 142:4eea097334d6 699 * update
Anna Bridge 142:4eea097334d6 700 ******************************************************************************/
Anna Bridge 142:4eea097334d6 701 __STATIC_INLINE void EBI_TFTHStrideSet(uint32_t nbytes)
Anna Bridge 142:4eea097334d6 702 {
Anna Bridge 142:4eea097334d6 703 EFM_ASSERT(nbytes < 0x1000);
Anna Bridge 142:4eea097334d6 704
Anna Bridge 142:4eea097334d6 705 EBI->TFTSTRIDE = (EBI->TFTSTRIDE & ~(_EBI_TFTSTRIDE_HSTRIDE_MASK))|
Anna Bridge 142:4eea097334d6 706 (nbytes<<_EBI_TFTSTRIDE_HSTRIDE_SHIFT);
Anna Bridge 142:4eea097334d6 707 }
Anna Bridge 142:4eea097334d6 708
Anna Bridge 142:4eea097334d6 709
Anna Bridge 142:4eea097334d6 710 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 711 * @brief
Anna Bridge 142:4eea097334d6 712 * Clear one or more pending EBI interrupts.
Anna Bridge 142:4eea097334d6 713 * @param[in] flags
Anna Bridge 142:4eea097334d6 714 * Pending EBI interrupt source to clear. Use a logical OR combination
Anna Bridge 142:4eea097334d6 715 * of valid interrupt flags for the EBI module (EBI_IF_nnn).
Anna Bridge 142:4eea097334d6 716 ******************************************************************************/
Anna Bridge 142:4eea097334d6 717 __STATIC_INLINE void EBI_IntClear(uint32_t flags)
Anna Bridge 142:4eea097334d6 718 {
Anna Bridge 142:4eea097334d6 719 EBI->IFC = flags;
Anna Bridge 142:4eea097334d6 720 }
Anna Bridge 142:4eea097334d6 721
Anna Bridge 142:4eea097334d6 722
Anna Bridge 142:4eea097334d6 723 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 724 * @brief
Anna Bridge 142:4eea097334d6 725 * Set one or more pending EBI interrupts.
Anna Bridge 142:4eea097334d6 726 *
Anna Bridge 142:4eea097334d6 727 * @param[in] flags
Anna Bridge 142:4eea097334d6 728 * EBI interrupt sources to set to pending. Use a logical OR combination of
Anna Bridge 142:4eea097334d6 729 * valid interrupt flags for the EBI module (EBI_IF_nnn).
Anna Bridge 142:4eea097334d6 730 ******************************************************************************/
Anna Bridge 142:4eea097334d6 731 __STATIC_INLINE void EBI_IntSet(uint32_t flags)
Anna Bridge 142:4eea097334d6 732 {
Anna Bridge 142:4eea097334d6 733 EBI->IFS = flags;
Anna Bridge 142:4eea097334d6 734 }
Anna Bridge 142:4eea097334d6 735
Anna Bridge 142:4eea097334d6 736
Anna Bridge 142:4eea097334d6 737 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 738 * @brief
Anna Bridge 142:4eea097334d6 739 * Disable one or more EBI interrupts.
Anna Bridge 142:4eea097334d6 740 *
Anna Bridge 142:4eea097334d6 741 * @param[in] flags
Anna Bridge 142:4eea097334d6 742 * EBI interrupt sources to disable. Use logical OR combination of valid
Anna Bridge 142:4eea097334d6 743 * interrupt flags for the EBI module (EBI_IF_nnn)
Anna Bridge 142:4eea097334d6 744 ******************************************************************************/
Anna Bridge 142:4eea097334d6 745 __STATIC_INLINE void EBI_IntDisable(uint32_t flags)
Anna Bridge 142:4eea097334d6 746 {
Anna Bridge 142:4eea097334d6 747 EBI->IEN &= ~(flags);
Anna Bridge 142:4eea097334d6 748 }
Anna Bridge 142:4eea097334d6 749
Anna Bridge 142:4eea097334d6 750
Anna Bridge 142:4eea097334d6 751 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 752 * @brief
Anna Bridge 142:4eea097334d6 753 * Enable one or more EBI interrupts.
Anna Bridge 142:4eea097334d6 754 *
Anna Bridge 142:4eea097334d6 755 * @param[in] flags
Anna Bridge 142:4eea097334d6 756 * EBI interrupt sources to enable. Use logical OR combination of valid
Anna Bridge 142:4eea097334d6 757 * interrupt flags for the EBI module (EBI_IF_nnn)
Anna Bridge 142:4eea097334d6 758 ******************************************************************************/
Anna Bridge 142:4eea097334d6 759 __STATIC_INLINE void EBI_IntEnable(uint32_t flags)
Anna Bridge 142:4eea097334d6 760 {
Anna Bridge 142:4eea097334d6 761 EBI->IEN |= flags;
Anna Bridge 142:4eea097334d6 762 }
Anna Bridge 142:4eea097334d6 763
Anna Bridge 142:4eea097334d6 764
Anna Bridge 142:4eea097334d6 765 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 766 * @brief
Anna Bridge 142:4eea097334d6 767 * Get pending EBI interrupt flags.
Anna Bridge 142:4eea097334d6 768 *
Anna Bridge 142:4eea097334d6 769 * @note
Anna Bridge 142:4eea097334d6 770 * The event bits are not cleared by the use of this function
Anna Bridge 142:4eea097334d6 771 *
Anna Bridge 142:4eea097334d6 772 * @return
Anna Bridge 142:4eea097334d6 773 * EBI interrupt sources pending, a logical combination of valid EBI
Anna Bridge 142:4eea097334d6 774 * interrupt flags, EBI_IF_nnn
Anna Bridge 142:4eea097334d6 775 ******************************************************************************/
Anna Bridge 142:4eea097334d6 776 __STATIC_INLINE uint32_t EBI_IntGet(void)
Anna Bridge 142:4eea097334d6 777 {
Anna Bridge 142:4eea097334d6 778 return EBI->IF;
Anna Bridge 142:4eea097334d6 779 }
Anna Bridge 142:4eea097334d6 780
Anna Bridge 142:4eea097334d6 781
Anna Bridge 142:4eea097334d6 782 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 783 * @brief
Anna Bridge 142:4eea097334d6 784 * Get enabled and pending EBI interrupt flags.
Anna Bridge 142:4eea097334d6 785 * Useful for handling more interrupt sources in the same interrupt handler.
Anna Bridge 142:4eea097334d6 786 *
Anna Bridge 142:4eea097334d6 787 * @note
Anna Bridge 142:4eea097334d6 788 * Interrupt flags are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 789 *
Anna Bridge 142:4eea097334d6 790 * @return
Anna Bridge 142:4eea097334d6 791 * Pending and enabled EBI interrupt sources
Anna Bridge 142:4eea097334d6 792 * The return value is the bitwise AND of
Anna Bridge 142:4eea097334d6 793 * - the enabled interrupt sources in EBI_IEN and
Anna Bridge 142:4eea097334d6 794 * - the pending interrupt flags EBI_IF
Anna Bridge 142:4eea097334d6 795 ******************************************************************************/
Anna Bridge 142:4eea097334d6 796 __STATIC_INLINE uint32_t EBI_IntGetEnabled(void)
Anna Bridge 142:4eea097334d6 797 {
Anna Bridge 142:4eea097334d6 798 uint32_t ien;
Anna Bridge 142:4eea097334d6 799
Anna Bridge 142:4eea097334d6 800 ien = EBI->IEN;
Anna Bridge 142:4eea097334d6 801 return EBI->IF & ien;
Anna Bridge 142:4eea097334d6 802 }
Anna Bridge 142:4eea097334d6 803
Anna Bridge 142:4eea097334d6 804
Anna Bridge 142:4eea097334d6 805 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 806 * @brief
Anna Bridge 142:4eea097334d6 807 * Start ECC generator on NAND flash transfers.
Anna Bridge 142:4eea097334d6 808 ******************************************************************************/
Anna Bridge 142:4eea097334d6 809 __STATIC_INLINE void EBI_StartNandEccGen(void)
Anna Bridge 142:4eea097334d6 810 {
Anna Bridge 142:4eea097334d6 811 EBI->CMD = EBI_CMD_ECCSTART | EBI_CMD_ECCCLEAR;
Anna Bridge 142:4eea097334d6 812 }
Anna Bridge 142:4eea097334d6 813
Anna Bridge 142:4eea097334d6 814
Anna Bridge 142:4eea097334d6 815 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 816 * @brief
Anna Bridge 142:4eea097334d6 817 * Stop NAND flash ECC generator and return generated ECC.
Anna Bridge 142:4eea097334d6 818 *
Anna Bridge 142:4eea097334d6 819 * @return
Anna Bridge 142:4eea097334d6 820 * The generated ECC.
Anna Bridge 142:4eea097334d6 821 ******************************************************************************/
Anna Bridge 142:4eea097334d6 822 __STATIC_INLINE uint32_t EBI_StopNandEccGen( void )
Anna Bridge 142:4eea097334d6 823 {
Anna Bridge 142:4eea097334d6 824 EBI->CMD = EBI_CMD_ECCSTOP;
Anna Bridge 142:4eea097334d6 825 return EBI->ECCPARITY;
Anna Bridge 142:4eea097334d6 826 }
Anna Bridge 142:4eea097334d6 827 #endif
Anna Bridge 142:4eea097334d6 828
Anna Bridge 142:4eea097334d6 829 void EBI_ChipSelectEnable(uint32_t banks, bool enable);
Anna Bridge 142:4eea097334d6 830 void EBI_ReadTimingSet(int setupCycles, int strobeCycles, int holdCycles);
Anna Bridge 142:4eea097334d6 831 void EBI_WriteTimingSet(int setupCycles, int strobeCycles, int holdCycles);
Anna Bridge 142:4eea097334d6 832 void EBI_AddressTimingSet(int setupCycles, int holdCycles);
Anna Bridge 142:4eea097334d6 833 void EBI_PolaritySet(EBI_Line_TypeDef line, EBI_Polarity_TypeDef polarity);
Anna Bridge 142:4eea097334d6 834
Anna Bridge 142:4eea097334d6 835 /** @} (end addtogroup EBI) */
Anna Bridge 142:4eea097334d6 836 /** @} (end addtogroup emlib) */
Anna Bridge 142:4eea097334d6 837
Anna Bridge 142:4eea097334d6 838 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 839 }
Anna Bridge 142:4eea097334d6 840 #endif
Anna Bridge 142:4eea097334d6 841
Anna Bridge 142:4eea097334d6 842 #endif /* defined(EBI_COUNT) && (EBI_COUNT > 0) */
Anna Bridge 142:4eea097334d6 843
Anna Bridge 142:4eea097334d6 844 #endif /* EM_EBI_H */