The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_TB_SENSE_1/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_ebi.h@142:4eea097334d6, 2017-05-10 (annotated)
- 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?
User | Revision | Line number | New contents of line |
---|---|---|---|
Anna Bridge |
142:4eea097334d6 | 1 | /***************************************************************************//** |
Anna Bridge |
142:4eea097334d6 | 2 | * @file em_ebi.h |
Anna Bridge |
142:4eea097334d6 | 3 | * @brief External Bus Iterface (EBI) peripheral API |
Anna Bridge |
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 */ |