rik te winkel / mbed-dev

Dependents:   Numitron_clock

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
Parent:
50:a417edff4437
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 2 * @file em_lcd.h
<> 144:ef7eb2e8f9f7 3 * @brief Liquid Crystal Display (LCD) peripheral API
<> 144:ef7eb2e8f9f7 4 * @version 4.2.1
<> 144:ef7eb2e8f9f7 5 *******************************************************************************
<> 144:ef7eb2e8f9f7 6 * @section License
<> 144:ef7eb2e8f9f7 7 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
<> 144:ef7eb2e8f9f7 8 *******************************************************************************
<> 144:ef7eb2e8f9f7 9 *
<> 144:ef7eb2e8f9f7 10 * Permission is granted to anyone to use this software for any purpose,
<> 144:ef7eb2e8f9f7 11 * including commercial applications, and to alter it and redistribute it
<> 144:ef7eb2e8f9f7 12 * freely, subject to the following restrictions:
<> 144:ef7eb2e8f9f7 13 *
<> 144:ef7eb2e8f9f7 14 * 1. The origin of this software must not be misrepresented; you must not
<> 144:ef7eb2e8f9f7 15 * claim that you wrote the original software.
<> 144:ef7eb2e8f9f7 16 * 2. Altered source versions must be plainly marked as such, and must not be
<> 144:ef7eb2e8f9f7 17 * misrepresented as being the original software.
<> 144:ef7eb2e8f9f7 18 * 3. This notice may not be removed or altered from any source distribution.
<> 144:ef7eb2e8f9f7 19 *
<> 144:ef7eb2e8f9f7 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
<> 144:ef7eb2e8f9f7 21 * obligation to support this Software. Silicon Labs is providing the
<> 144:ef7eb2e8f9f7 22 * Software "AS IS", with no express or implied warranties of any kind,
<> 144:ef7eb2e8f9f7 23 * including, but not limited to, any implied warranties of merchantability
<> 144:ef7eb2e8f9f7 24 * or fitness for any particular purpose or warranties against infringement
<> 144:ef7eb2e8f9f7 25 * of any proprietary rights of a third party.
<> 144:ef7eb2e8f9f7 26 *
<> 144:ef7eb2e8f9f7 27 * Silicon Labs will not be liable for any consequential, incidental, or
<> 144:ef7eb2e8f9f7 28 * special damages, or any other relief, or for any claim by any third party,
<> 144:ef7eb2e8f9f7 29 * arising from your use of this Software.
<> 144:ef7eb2e8f9f7 30 *
<> 144:ef7eb2e8f9f7 31 ******************************************************************************/
<> 144:ef7eb2e8f9f7 32
<> 144:ef7eb2e8f9f7 33 #ifndef __SILICON_LABS_EM_LCD_H__
<> 144:ef7eb2e8f9f7 34 #define __SILICON_LABS_EM_LCD_H__
<> 144:ef7eb2e8f9f7 35
<> 144:ef7eb2e8f9f7 36 #include "em_device.h"
<> 144:ef7eb2e8f9f7 37
<> 144:ef7eb2e8f9f7 38 #if defined(LCD_COUNT) && (LCD_COUNT > 0)
<> 144:ef7eb2e8f9f7 39 #include <stdint.h>
<> 144:ef7eb2e8f9f7 40 #include <stdbool.h>
<> 144:ef7eb2e8f9f7 41
<> 144:ef7eb2e8f9f7 42 #ifdef __cplusplus
<> 144:ef7eb2e8f9f7 43 extern "C" {
<> 144:ef7eb2e8f9f7 44 #endif
<> 144:ef7eb2e8f9f7 45
<> 144:ef7eb2e8f9f7 46 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 47 * @addtogroup EM_Library
<> 144:ef7eb2e8f9f7 48 * @{
<> 144:ef7eb2e8f9f7 49 ******************************************************************************/
<> 144:ef7eb2e8f9f7 50
<> 144:ef7eb2e8f9f7 51 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 52 * @addtogroup LCD
<> 144:ef7eb2e8f9f7 53 * @{
<> 144:ef7eb2e8f9f7 54 ******************************************************************************/
<> 144:ef7eb2e8f9f7 55
<> 144:ef7eb2e8f9f7 56 /*******************************************************************************
<> 144:ef7eb2e8f9f7 57 ******************************** ENUMS ************************************
<> 144:ef7eb2e8f9f7 58 ******************************************************************************/
<> 144:ef7eb2e8f9f7 59
<> 144:ef7eb2e8f9f7 60 /** MUX setting */
<> 144:ef7eb2e8f9f7 61 typedef enum
<> 144:ef7eb2e8f9f7 62 {
<> 144:ef7eb2e8f9f7 63 /** Static (segments can be multiplexed with LCD_COM[0]) */
<> 144:ef7eb2e8f9f7 64 lcdMuxStatic = LCD_DISPCTRL_MUX_STATIC,
<> 144:ef7eb2e8f9f7 65 /** Duplex / 1/2 Duty cycle (segments can be multiplexed with LCD_COM[0:1]) */
<> 144:ef7eb2e8f9f7 66 lcdMuxDuplex = LCD_DISPCTRL_MUX_DUPLEX,
<> 144:ef7eb2e8f9f7 67 /** Triplex / 1/3 Duty cycle (segments can be multiplexed with LCD_COM[0:2]) */
<> 144:ef7eb2e8f9f7 68 lcdMuxTriplex = LCD_DISPCTRL_MUX_TRIPLEX,
<> 144:ef7eb2e8f9f7 69 /** Quadruplex / 1/4 Duty cycle (segments can be multiplexed with LCD_COM[0:3]) */
<> 144:ef7eb2e8f9f7 70 lcdMuxQuadruplex = LCD_DISPCTRL_MUX_QUADRUPLEX,
<> 144:ef7eb2e8f9f7 71 #if defined(LCD_DISPCTRL_MUXE_MUXE)
<> 144:ef7eb2e8f9f7 72 /** Sextaplex / 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5]) */
<> 144:ef7eb2e8f9f7 73 lcdMuxSextaplex = LCD_DISPCTRL_MUXE_MUXE | LCD_DISPCTRL_MUX_DUPLEX,
<> 144:ef7eb2e8f9f7 74 /** Octaplex / 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5]) */
<> 144:ef7eb2e8f9f7 75 lcdMuxOctaplex = LCD_DISPCTRL_MUXE_MUXE | LCD_DISPCTRL_MUX_QUADRUPLEX
<> 144:ef7eb2e8f9f7 76 #endif
<> 144:ef7eb2e8f9f7 77 } LCD_Mux_TypeDef;
<> 144:ef7eb2e8f9f7 78
<> 144:ef7eb2e8f9f7 79 /** Bias setting */
<> 144:ef7eb2e8f9f7 80 typedef enum
<> 144:ef7eb2e8f9f7 81 {
<> 144:ef7eb2e8f9f7 82 /** Static (2 levels) */
<> 144:ef7eb2e8f9f7 83 lcdBiasStatic = LCD_DISPCTRL_BIAS_STATIC,
<> 144:ef7eb2e8f9f7 84 /** 1/2 Bias (3 levels) */
<> 144:ef7eb2e8f9f7 85 lcdBiasOneHalf = LCD_DISPCTRL_BIAS_ONEHALF,
<> 144:ef7eb2e8f9f7 86 /** 1/3 Bias (4 levels) */
<> 144:ef7eb2e8f9f7 87 lcdBiasOneThird = LCD_DISPCTRL_BIAS_ONETHIRD,
<> 144:ef7eb2e8f9f7 88 #if defined(LCD_DISPCTRL_BIAS_ONEFOURTH)
<> 144:ef7eb2e8f9f7 89 /** 1/4 Bias (5 levels) */
<> 144:ef7eb2e8f9f7 90 lcdBiasOneFourth = LCD_DISPCTRL_BIAS_ONEFOURTH,
<> 144:ef7eb2e8f9f7 91 #endif
<> 144:ef7eb2e8f9f7 92 } LCD_Bias_TypeDef;
<> 144:ef7eb2e8f9f7 93
<> 144:ef7eb2e8f9f7 94 /** Wave type */
<> 144:ef7eb2e8f9f7 95 typedef enum
<> 144:ef7eb2e8f9f7 96 {
<> 144:ef7eb2e8f9f7 97 /** Low power optimized waveform output */
<> 144:ef7eb2e8f9f7 98 lcdWaveLowPower = LCD_DISPCTRL_WAVE_LOWPOWER,
<> 144:ef7eb2e8f9f7 99 /** Regular waveform output */
<> 144:ef7eb2e8f9f7 100 lcdWaveNormal = LCD_DISPCTRL_WAVE_NORMAL
<> 144:ef7eb2e8f9f7 101 } LCD_Wave_TypeDef;
<> 144:ef7eb2e8f9f7 102
<> 144:ef7eb2e8f9f7 103 /** VLCD Voltage Source */
<> 144:ef7eb2e8f9f7 104 typedef enum
<> 144:ef7eb2e8f9f7 105 {
<> 144:ef7eb2e8f9f7 106 /** VLCD Powered by VDD */
<> 144:ef7eb2e8f9f7 107 lcdVLCDSelVDD = LCD_DISPCTRL_VLCDSEL_VDD,
<> 144:ef7eb2e8f9f7 108 /** VLCD Powered by external VDD / Voltage Boost */
<> 144:ef7eb2e8f9f7 109 lcdVLCDSelVExtBoost = LCD_DISPCTRL_VLCDSEL_VEXTBOOST
<> 144:ef7eb2e8f9f7 110 } LCD_VLCDSel_TypeDef;
<> 144:ef7eb2e8f9f7 111
<> 144:ef7eb2e8f9f7 112 /** Contrast Configuration */
<> 144:ef7eb2e8f9f7 113 typedef enum
<> 144:ef7eb2e8f9f7 114 {
<> 144:ef7eb2e8f9f7 115 /** Contrast is adjusted relative to VDD (VLCD) */
<> 144:ef7eb2e8f9f7 116 lcdConConfVLCD = LCD_DISPCTRL_CONCONF_VLCD,
<> 144:ef7eb2e8f9f7 117 /** Contrast is adjusted relative to Ground */
<> 144:ef7eb2e8f9f7 118 lcdConConfGND = LCD_DISPCTRL_CONCONF_GND
<> 144:ef7eb2e8f9f7 119 } LCD_ConConf_TypeDef;
<> 144:ef7eb2e8f9f7 120
<> 144:ef7eb2e8f9f7 121 /** Voltage Boost Level - Datasheets document setting for each part number */
<> 144:ef7eb2e8f9f7 122 typedef enum
<> 144:ef7eb2e8f9f7 123 {
<> 144:ef7eb2e8f9f7 124 lcdVBoostLevel0 = LCD_DISPCTRL_VBLEV_LEVEL0, /**< Voltage boost LEVEL0 */
<> 144:ef7eb2e8f9f7 125 lcdVBoostLevel1 = LCD_DISPCTRL_VBLEV_LEVEL1, /**< Voltage boost LEVEL1 */
<> 144:ef7eb2e8f9f7 126 lcdVBoostLevel2 = LCD_DISPCTRL_VBLEV_LEVEL2, /**< Voltage boost LEVEL2 */
<> 144:ef7eb2e8f9f7 127 lcdVBoostLevel3 = LCD_DISPCTRL_VBLEV_LEVEL3, /**< Voltage boost LEVEL3 */
<> 144:ef7eb2e8f9f7 128 lcdVBoostLevel4 = LCD_DISPCTRL_VBLEV_LEVEL4, /**< Voltage boost LEVEL4 */
<> 144:ef7eb2e8f9f7 129 lcdVBoostLevel5 = LCD_DISPCTRL_VBLEV_LEVEL5, /**< Voltage boost LEVEL5 */
<> 144:ef7eb2e8f9f7 130 lcdVBoostLevel6 = LCD_DISPCTRL_VBLEV_LEVEL6, /**< Voltage boost LEVEL6 */
<> 144:ef7eb2e8f9f7 131 lcdVBoostLevel7 = LCD_DISPCTRL_VBLEV_LEVEL7 /**< Voltage boost LEVEL7 */
<> 144:ef7eb2e8f9f7 132 } LCD_VBoostLevel_TypeDef;
<> 144:ef7eb2e8f9f7 133
<> 144:ef7eb2e8f9f7 134 /** Frame Counter Clock Prescaler, FC-CLK = FrameRate (Hz) / this factor */
<> 144:ef7eb2e8f9f7 135 typedef enum
<> 144:ef7eb2e8f9f7 136 {
<> 144:ef7eb2e8f9f7 137 /** Prescale Div 1 */
<> 144:ef7eb2e8f9f7 138 lcdFCPrescDiv1 = LCD_BACTRL_FCPRESC_DIV1,
<> 144:ef7eb2e8f9f7 139 /** Prescale Div 2 */
<> 144:ef7eb2e8f9f7 140 lcdFCPrescDiv2 = LCD_BACTRL_FCPRESC_DIV2,
<> 144:ef7eb2e8f9f7 141 /** Prescale Div 4 */
<> 144:ef7eb2e8f9f7 142 lcdFCPrescDiv4 = LCD_BACTRL_FCPRESC_DIV4,
<> 144:ef7eb2e8f9f7 143 /** Prescale Div 8 */
<> 144:ef7eb2e8f9f7 144 lcdFCPrescDiv8 = LCD_BACTRL_FCPRESC_DIV8
<> 144:ef7eb2e8f9f7 145 } LCD_FCPreScale_TypeDef;
<> 144:ef7eb2e8f9f7 146
<> 144:ef7eb2e8f9f7 147 /** Segment selection */
<> 144:ef7eb2e8f9f7 148 typedef enum
<> 144:ef7eb2e8f9f7 149 {
<> 144:ef7eb2e8f9f7 150 /** Select segment lines 0 to 3 */
<> 144:ef7eb2e8f9f7 151 lcdSegment0_3 = (1 << 0),
<> 144:ef7eb2e8f9f7 152 /** Select segment lines 4 to 7 */
<> 144:ef7eb2e8f9f7 153 lcdSegment4_7 = (1 << 1),
<> 144:ef7eb2e8f9f7 154 /** Select segment lines 8 to 11 */
<> 144:ef7eb2e8f9f7 155 lcdSegment8_11 = (1 << 2),
<> 144:ef7eb2e8f9f7 156 /** Select segment lines 12 to 15 */
<> 144:ef7eb2e8f9f7 157 lcdSegment12_15 = (1 << 3),
<> 144:ef7eb2e8f9f7 158 /** Select segment lines 16 to 19 */
<> 144:ef7eb2e8f9f7 159 lcdSegment16_19 = (1 << 4),
<> 144:ef7eb2e8f9f7 160 /** Select segment lines 20 to 23 */
<> 144:ef7eb2e8f9f7 161 lcdSegment20_23 = (1 << 5),
<> 144:ef7eb2e8f9f7 162 #if defined(_LCD_SEGD0L_MASK) && (_LCD_SEGD0L_MASK == 0x00FFFFFFUL)
<> 144:ef7eb2e8f9f7 163 /** Select all segment lines */
<> 144:ef7eb2e8f9f7 164 lcdSegmentAll = (0x003f)
<> 144:ef7eb2e8f9f7 165 #elif defined(_LCD_SEGD0H_MASK) && (_LCD_SEGD0H_MASK == 0x000000FFUL)
<> 144:ef7eb2e8f9f7 166 /** Select segment lines 24 to 27 */
<> 144:ef7eb2e8f9f7 167 lcdSegment24_27 = (1 << 6),
<> 144:ef7eb2e8f9f7 168 /** Select segment lines 28 to 31 */
<> 144:ef7eb2e8f9f7 169 lcdSegment28_31 = (1 << 7),
<> 144:ef7eb2e8f9f7 170 /** Select segment lines 32 to 35 */
<> 144:ef7eb2e8f9f7 171 lcdSegment32_35 = (1 << 8),
<> 144:ef7eb2e8f9f7 172 /** Select segment lines 36 to 39 */
<> 144:ef7eb2e8f9f7 173 lcdSegment36_39 = (1 << 9),
<> 144:ef7eb2e8f9f7 174 /** Select all segment lines */
<> 144:ef7eb2e8f9f7 175 lcdSegmentAll = (0x03ff)
<> 144:ef7eb2e8f9f7 176 #endif
<> 144:ef7eb2e8f9f7 177 } LCD_SegmentRange_TypeDef;
<> 144:ef7eb2e8f9f7 178
<> 144:ef7eb2e8f9f7 179 /** Update Data Control */
<> 144:ef7eb2e8f9f7 180 typedef enum
<> 144:ef7eb2e8f9f7 181 {
<> 144:ef7eb2e8f9f7 182 /** Regular update, data transfer done immediately */
<> 144:ef7eb2e8f9f7 183 lcdUpdateCtrlRegular = LCD_CTRL_UDCTRL_REGULAR,
<> 144:ef7eb2e8f9f7 184 /** Data transfer done at Frame Counter event */
<> 144:ef7eb2e8f9f7 185 lcdUpdateCtrlFCEvent = LCD_CTRL_UDCTRL_FCEVENT,
<> 144:ef7eb2e8f9f7 186 /** Data transfer done at Frame Start */
<> 144:ef7eb2e8f9f7 187 lcdUpdateCtrlFrameStart = LCD_CTRL_UDCTRL_FRAMESTART
<> 144:ef7eb2e8f9f7 188 } LCD_UpdateCtrl_TypeDef;
<> 144:ef7eb2e8f9f7 189
<> 144:ef7eb2e8f9f7 190 /** Animation Shift operation; none, left or right */
<> 144:ef7eb2e8f9f7 191 typedef enum
<> 144:ef7eb2e8f9f7 192 {
<> 144:ef7eb2e8f9f7 193 /** No shift */
<> 144:ef7eb2e8f9f7 194 lcdAnimShiftNone = _LCD_BACTRL_AREGASC_NOSHIFT,
<> 144:ef7eb2e8f9f7 195 /** Shift segment bits left */
<> 144:ef7eb2e8f9f7 196 lcdAnimShiftLeft = _LCD_BACTRL_AREGASC_SHIFTLEFT,
<> 144:ef7eb2e8f9f7 197 /** Shift segment bits right */
<> 144:ef7eb2e8f9f7 198 lcdAnimShiftRight = _LCD_BACTRL_AREGASC_SHIFTRIGHT
<> 144:ef7eb2e8f9f7 199 } LCD_AnimShift_TypeDef;
<> 144:ef7eb2e8f9f7 200
<> 144:ef7eb2e8f9f7 201 /** Animation Logic Control, how AReg and BReg should be combined */
<> 144:ef7eb2e8f9f7 202 typedef enum
<> 144:ef7eb2e8f9f7 203 {
<> 144:ef7eb2e8f9f7 204 /** Use bitwise logic AND to mix animation register A (AREGA) and B (AREGB) */
<> 144:ef7eb2e8f9f7 205 lcdAnimLogicAnd = LCD_BACTRL_ALOGSEL_AND,
<> 144:ef7eb2e8f9f7 206 /** Use bitwise logic OR to mix animation register A (AREGA) and B (AREGB) */
<> 144:ef7eb2e8f9f7 207 lcdAnimLogicOr = LCD_BACTRL_ALOGSEL_OR
<> 144:ef7eb2e8f9f7 208 } LCD_AnimLogic_TypeDef;
<> 144:ef7eb2e8f9f7 209
<> 144:ef7eb2e8f9f7 210
<> 144:ef7eb2e8f9f7 211 /*******************************************************************************
<> 144:ef7eb2e8f9f7 212 ******************************* STRUCTS ***********************************
<> 144:ef7eb2e8f9f7 213 ******************************************************************************/
<> 144:ef7eb2e8f9f7 214
<> 144:ef7eb2e8f9f7 215 /** LCD Animation Configuration */
<> 144:ef7eb2e8f9f7 216 typedef struct
<> 144:ef7eb2e8f9f7 217 {
<> 144:ef7eb2e8f9f7 218 /** Enable Animation at end of initialization */
<> 144:ef7eb2e8f9f7 219 bool enable;
<> 144:ef7eb2e8f9f7 220 /** Initial Animation Register A Value */
<> 144:ef7eb2e8f9f7 221 uint32_t AReg;
<> 144:ef7eb2e8f9f7 222 /** Shift operation of Animation Register A */
<> 144:ef7eb2e8f9f7 223 LCD_AnimShift_TypeDef AShift;
<> 144:ef7eb2e8f9f7 224 /** Initial Animation Register B Value */
<> 144:ef7eb2e8f9f7 225 uint32_t BReg;
<> 144:ef7eb2e8f9f7 226 /** Shift operation of Animation Register B */
<> 144:ef7eb2e8f9f7 227 LCD_AnimShift_TypeDef BShift;
<> 144:ef7eb2e8f9f7 228 /** A and B Logical Operation to use for mixing and outputting resulting segments */
<> 144:ef7eb2e8f9f7 229 LCD_AnimLogic_TypeDef animLogic;
<> 144:ef7eb2e8f9f7 230 #if defined(LCD_BACTRL_ALOC)
<> 144:ef7eb2e8f9f7 231 /** Number of first segment to animate. Options are 0 or 8 for Giant/Leopard. End is startSeg+7 */
<> 144:ef7eb2e8f9f7 232 int startSeg;
<> 144:ef7eb2e8f9f7 233 #endif
<> 144:ef7eb2e8f9f7 234 } LCD_AnimInit_TypeDef;
<> 144:ef7eb2e8f9f7 235
<> 144:ef7eb2e8f9f7 236 /** LCD Frame Control Initialization */
<> 144:ef7eb2e8f9f7 237 typedef struct
<> 144:ef7eb2e8f9f7 238 {
<> 144:ef7eb2e8f9f7 239 /** Enable at end */
<> 144:ef7eb2e8f9f7 240 bool enable;
<> 144:ef7eb2e8f9f7 241 /** Frame Counter top value */
<> 144:ef7eb2e8f9f7 242 uint32_t top;
<> 144:ef7eb2e8f9f7 243 /** Frame Counter clock prescaler */
<> 144:ef7eb2e8f9f7 244 LCD_FCPreScale_TypeDef prescale;
<> 144:ef7eb2e8f9f7 245 } LCD_FrameCountInit_TypeDef;
<> 144:ef7eb2e8f9f7 246
<> 144:ef7eb2e8f9f7 247 /** LCD Controller Initialization structure */
<> 144:ef7eb2e8f9f7 248 typedef struct
<> 144:ef7eb2e8f9f7 249 {
<> 144:ef7eb2e8f9f7 250 /** Enable controller at end of initialization */
<> 144:ef7eb2e8f9f7 251 bool enable;
<> 144:ef7eb2e8f9f7 252 /** Mux configuration */
<> 144:ef7eb2e8f9f7 253 LCD_Mux_TypeDef mux;
<> 144:ef7eb2e8f9f7 254 /** Bias configuration */
<> 144:ef7eb2e8f9f7 255 LCD_Bias_TypeDef bias;
<> 144:ef7eb2e8f9f7 256 /** Wave configuration */
<> 144:ef7eb2e8f9f7 257 LCD_Wave_TypeDef wave;
<> 144:ef7eb2e8f9f7 258 /** VLCD Select */
<> 144:ef7eb2e8f9f7 259 LCD_VLCDSel_TypeDef vlcd;
<> 144:ef7eb2e8f9f7 260 /** Contrast Configuration */
<> 144:ef7eb2e8f9f7 261 LCD_ConConf_TypeDef contrast;
<> 144:ef7eb2e8f9f7 262 } LCD_Init_TypeDef;
<> 144:ef7eb2e8f9f7 263
<> 144:ef7eb2e8f9f7 264 /** Default config for LCD init structure, enables 160 segments */
<> 144:ef7eb2e8f9f7 265 #define LCD_INIT_DEFAULT \
<> 144:ef7eb2e8f9f7 266 { \
<> 144:ef7eb2e8f9f7 267 true, \
<> 144:ef7eb2e8f9f7 268 lcdMuxQuadruplex, \
<> 144:ef7eb2e8f9f7 269 lcdBiasOneThird, \
<> 144:ef7eb2e8f9f7 270 lcdWaveLowPower, \
<> 144:ef7eb2e8f9f7 271 lcdVLCDSelVDD, \
<> 144:ef7eb2e8f9f7 272 lcdConConfVLCD \
<> 144:ef7eb2e8f9f7 273 }
<> 144:ef7eb2e8f9f7 274
<> 144:ef7eb2e8f9f7 275 /*******************************************************************************
<> 144:ef7eb2e8f9f7 276 ***************************** PROTOTYPES **********************************
<> 144:ef7eb2e8f9f7 277 ******************************************************************************/
<> 144:ef7eb2e8f9f7 278
<> 144:ef7eb2e8f9f7 279 void LCD_Init(const LCD_Init_TypeDef *lcdInit);
<> 144:ef7eb2e8f9f7 280 void LCD_VLCDSelect(LCD_VLCDSel_TypeDef vlcd);
<> 144:ef7eb2e8f9f7 281 void LCD_UpdateCtrl(LCD_UpdateCtrl_TypeDef ud);
<> 144:ef7eb2e8f9f7 282 void LCD_FrameCountInit(const LCD_FrameCountInit_TypeDef *fcInit);
<> 144:ef7eb2e8f9f7 283 void LCD_AnimInit(const LCD_AnimInit_TypeDef *animInit);
<> 144:ef7eb2e8f9f7 284
<> 144:ef7eb2e8f9f7 285 void LCD_SegmentRangeEnable(LCD_SegmentRange_TypeDef segment, bool enable);
<> 144:ef7eb2e8f9f7 286 void LCD_SegmentSet(int com, int bit, bool enable);
<> 144:ef7eb2e8f9f7 287 void LCD_SegmentSetLow(int com, uint32_t mask, uint32_t bits);
<> 144:ef7eb2e8f9f7 288 #if defined(_LCD_SEGD0H_MASK)
<> 144:ef7eb2e8f9f7 289 void LCD_SegmentSetHigh(int com, uint32_t mask, uint32_t bits);
<> 144:ef7eb2e8f9f7 290 #endif
<> 144:ef7eb2e8f9f7 291 void LCD_ContrastSet(int level);
<> 144:ef7eb2e8f9f7 292 void LCD_VBoostSet(LCD_VBoostLevel_TypeDef vboost);
<> 144:ef7eb2e8f9f7 293
<> 144:ef7eb2e8f9f7 294 #if defined(LCD_CTRL_DSC)
<> 144:ef7eb2e8f9f7 295 void LCD_BiasSegmentSet(int segment, int biasLevel);
<> 144:ef7eb2e8f9f7 296 void LCD_BiasComSet(int com, int biasLevel);
<> 144:ef7eb2e8f9f7 297 #endif
<> 144:ef7eb2e8f9f7 298
<> 144:ef7eb2e8f9f7 299 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 300 * @brief
<> 144:ef7eb2e8f9f7 301 * Enable or disable LCD controller
<> 144:ef7eb2e8f9f7 302 *
<> 144:ef7eb2e8f9f7 303 * @param[in] enable
<> 144:ef7eb2e8f9f7 304 * If true, enables LCD controller with current configuration, if false
<> 144:ef7eb2e8f9f7 305 * disables LCD controller. CMU clock for LCD must be enabled for correct
<> 144:ef7eb2e8f9f7 306 * operation.
<> 144:ef7eb2e8f9f7 307 ******************************************************************************/
<> 144:ef7eb2e8f9f7 308 __STATIC_INLINE void LCD_Enable(bool enable)
<> 144:ef7eb2e8f9f7 309 {
<> 144:ef7eb2e8f9f7 310 if (enable)
<> 144:ef7eb2e8f9f7 311 {
<> 144:ef7eb2e8f9f7 312 LCD->CTRL |= LCD_CTRL_EN;
<> 144:ef7eb2e8f9f7 313 }
<> 144:ef7eb2e8f9f7 314 else
<> 144:ef7eb2e8f9f7 315 {
<> 144:ef7eb2e8f9f7 316 LCD->CTRL &= ~LCD_CTRL_EN;
<> 144:ef7eb2e8f9f7 317 }
<> 144:ef7eb2e8f9f7 318 }
<> 144:ef7eb2e8f9f7 319
<> 144:ef7eb2e8f9f7 320
<> 144:ef7eb2e8f9f7 321 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 322 * @brief
<> 144:ef7eb2e8f9f7 323 * Enables or disables LCD Animation feature
<> 144:ef7eb2e8f9f7 324 *
<> 144:ef7eb2e8f9f7 325 * @param[in] enable
<> 144:ef7eb2e8f9f7 326 * Boolean true enables animation, false disables animation
<> 144:ef7eb2e8f9f7 327 ******************************************************************************/
<> 144:ef7eb2e8f9f7 328 __STATIC_INLINE void LCD_AnimEnable(bool enable)
<> 144:ef7eb2e8f9f7 329 {
<> 144:ef7eb2e8f9f7 330 if (enable)
<> 144:ef7eb2e8f9f7 331 {
<> 144:ef7eb2e8f9f7 332 LCD->BACTRL |= LCD_BACTRL_AEN;
<> 144:ef7eb2e8f9f7 333 }
<> 144:ef7eb2e8f9f7 334 else
<> 144:ef7eb2e8f9f7 335 {
<> 144:ef7eb2e8f9f7 336 LCD->BACTRL &= ~LCD_BACTRL_AEN;
<> 144:ef7eb2e8f9f7 337 }
<> 144:ef7eb2e8f9f7 338 }
<> 144:ef7eb2e8f9f7 339
<> 144:ef7eb2e8f9f7 340
<> 144:ef7eb2e8f9f7 341 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 342 * @brief
<> 144:ef7eb2e8f9f7 343 * Enables or disables LCD blink
<> 144:ef7eb2e8f9f7 344 *
<> 144:ef7eb2e8f9f7 345 * @param[in] enable
<> 144:ef7eb2e8f9f7 346 * Boolean true enables blink, false disables blink
<> 144:ef7eb2e8f9f7 347 ******************************************************************************/
<> 144:ef7eb2e8f9f7 348 __STATIC_INLINE void LCD_BlinkEnable(bool enable)
<> 144:ef7eb2e8f9f7 349 {
<> 144:ef7eb2e8f9f7 350 if (enable)
<> 144:ef7eb2e8f9f7 351 {
<> 144:ef7eb2e8f9f7 352 LCD->BACTRL |= LCD_BACTRL_BLINKEN;
<> 144:ef7eb2e8f9f7 353 }
<> 144:ef7eb2e8f9f7 354 else
<> 144:ef7eb2e8f9f7 355 {
<> 144:ef7eb2e8f9f7 356 LCD->BACTRL &= ~LCD_BACTRL_BLINKEN;
<> 144:ef7eb2e8f9f7 357 }
<> 144:ef7eb2e8f9f7 358 }
<> 144:ef7eb2e8f9f7 359
<> 144:ef7eb2e8f9f7 360
<> 144:ef7eb2e8f9f7 361 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 362 * @brief
<> 144:ef7eb2e8f9f7 363 * Disables all segments, while keeping segment state
<> 144:ef7eb2e8f9f7 364 *
<> 144:ef7eb2e8f9f7 365 * @param[in] enable
<> 144:ef7eb2e8f9f7 366 * Boolean true clears all segments, boolean false restores all segment lines
<> 144:ef7eb2e8f9f7 367 ******************************************************************************/
<> 144:ef7eb2e8f9f7 368 __STATIC_INLINE void LCD_BlankEnable(bool enable)
<> 144:ef7eb2e8f9f7 369 {
<> 144:ef7eb2e8f9f7 370 if (enable)
<> 144:ef7eb2e8f9f7 371 {
<> 144:ef7eb2e8f9f7 372 LCD->BACTRL |= LCD_BACTRL_BLANK;
<> 144:ef7eb2e8f9f7 373 }
<> 144:ef7eb2e8f9f7 374 else
<> 144:ef7eb2e8f9f7 375 {
<> 144:ef7eb2e8f9f7 376 LCD->BACTRL &= ~LCD_BACTRL_BLANK;
<> 144:ef7eb2e8f9f7 377 }
<> 144:ef7eb2e8f9f7 378 }
<> 144:ef7eb2e8f9f7 379
<> 144:ef7eb2e8f9f7 380
<> 144:ef7eb2e8f9f7 381 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 382 * @brief
<> 144:ef7eb2e8f9f7 383 * Enables or disables LCD Frame Control
<> 144:ef7eb2e8f9f7 384 *
<> 144:ef7eb2e8f9f7 385 * @param[in] enable
<> 144:ef7eb2e8f9f7 386 * Boolean true enables frame counter, false disables frame counter
<> 144:ef7eb2e8f9f7 387 ******************************************************************************/
<> 144:ef7eb2e8f9f7 388 __STATIC_INLINE void LCD_FrameCountEnable(bool enable)
<> 144:ef7eb2e8f9f7 389 {
<> 144:ef7eb2e8f9f7 390 if (enable)
<> 144:ef7eb2e8f9f7 391 {
<> 144:ef7eb2e8f9f7 392 LCD->BACTRL |= LCD_BACTRL_FCEN;
<> 144:ef7eb2e8f9f7 393 }
<> 144:ef7eb2e8f9f7 394 else
<> 144:ef7eb2e8f9f7 395 {
<> 144:ef7eb2e8f9f7 396 LCD->BACTRL &= ~LCD_BACTRL_FCEN;
<> 144:ef7eb2e8f9f7 397 }
<> 144:ef7eb2e8f9f7 398 }
<> 144:ef7eb2e8f9f7 399
<> 144:ef7eb2e8f9f7 400
<> 144:ef7eb2e8f9f7 401 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 402 * @brief
<> 144:ef7eb2e8f9f7 403 * Returns current animation state
<> 144:ef7eb2e8f9f7 404 *
<> 144:ef7eb2e8f9f7 405 * @return
<> 144:ef7eb2e8f9f7 406 * Animation state, in range 0-15
<> 144:ef7eb2e8f9f7 407 ******************************************************************************/
<> 144:ef7eb2e8f9f7 408 __STATIC_INLINE int LCD_AnimState(void)
<> 144:ef7eb2e8f9f7 409 {
<> 144:ef7eb2e8f9f7 410 return (int)(LCD->STATUS & _LCD_STATUS_ASTATE_MASK) >> _LCD_STATUS_ASTATE_SHIFT;
<> 144:ef7eb2e8f9f7 411 }
<> 144:ef7eb2e8f9f7 412
<> 144:ef7eb2e8f9f7 413
<> 144:ef7eb2e8f9f7 414 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 415 * @brief
<> 144:ef7eb2e8f9f7 416 * Returns current blink state
<> 144:ef7eb2e8f9f7 417 *
<> 144:ef7eb2e8f9f7 418 * @return
<> 144:ef7eb2e8f9f7 419 * Return value is 1 if segments are enabled, 0 if disabled
<> 144:ef7eb2e8f9f7 420 ******************************************************************************/
<> 144:ef7eb2e8f9f7 421 __STATIC_INLINE int LCD_BlinkState(void)
<> 144:ef7eb2e8f9f7 422 {
<> 144:ef7eb2e8f9f7 423 return (int)(LCD->STATUS & _LCD_STATUS_BLINK_MASK) >> _LCD_STATUS_BLINK_SHIFT;
<> 144:ef7eb2e8f9f7 424 }
<> 144:ef7eb2e8f9f7 425
<> 144:ef7eb2e8f9f7 426
<> 144:ef7eb2e8f9f7 427 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 428 * @brief
<> 144:ef7eb2e8f9f7 429 * When set, LCD registers will not be updated until cleared,
<> 144:ef7eb2e8f9f7 430 *
<> 144:ef7eb2e8f9f7 431 * @param[in] enable
<> 144:ef7eb2e8f9f7 432 * When enable is true, update is stopped, when false all registers are
<> 144:ef7eb2e8f9f7 433 * updated
<> 144:ef7eb2e8f9f7 434 ******************************************************************************/
<> 144:ef7eb2e8f9f7 435 __STATIC_INLINE void LCD_FreezeEnable(bool enable)
<> 144:ef7eb2e8f9f7 436 {
<> 144:ef7eb2e8f9f7 437 if (enable)
<> 144:ef7eb2e8f9f7 438 {
<> 144:ef7eb2e8f9f7 439 LCD->FREEZE = LCD_FREEZE_REGFREEZE_FREEZE;
<> 144:ef7eb2e8f9f7 440 }
<> 144:ef7eb2e8f9f7 441 else
<> 144:ef7eb2e8f9f7 442 {
<> 144:ef7eb2e8f9f7 443 LCD->FREEZE = LCD_FREEZE_REGFREEZE_UPDATE;
<> 144:ef7eb2e8f9f7 444 }
<> 144:ef7eb2e8f9f7 445 }
<> 144:ef7eb2e8f9f7 446
<> 144:ef7eb2e8f9f7 447
<> 144:ef7eb2e8f9f7 448 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 449 * @brief
<> 144:ef7eb2e8f9f7 450 * Returns SYNCBUSY bits, indicating which registers have pending updates
<> 144:ef7eb2e8f9f7 451 *
<> 144:ef7eb2e8f9f7 452 * @return
<> 144:ef7eb2e8f9f7 453 * Bit fields for LCD registers which have pending updates
<> 144:ef7eb2e8f9f7 454 ******************************************************************************/
<> 144:ef7eb2e8f9f7 455 __STATIC_INLINE uint32_t LCD_SyncBusyGet(void)
<> 144:ef7eb2e8f9f7 456 {
<> 144:ef7eb2e8f9f7 457 return LCD->SYNCBUSY;
<> 144:ef7eb2e8f9f7 458 }
<> 144:ef7eb2e8f9f7 459
<> 144:ef7eb2e8f9f7 460
<> 144:ef7eb2e8f9f7 461 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 462 * @brief
<> 144:ef7eb2e8f9f7 463 * Polls LCD SYNCBUSY flags, until flag has been cleared
<> 144:ef7eb2e8f9f7 464 *
<> 144:ef7eb2e8f9f7 465 * @param[in] flags
<> 144:ef7eb2e8f9f7 466 * Bit fields for LCD registers that shall be updated before we continue
<> 144:ef7eb2e8f9f7 467 ******************************************************************************/
<> 144:ef7eb2e8f9f7 468 __STATIC_INLINE void LCD_SyncBusyDelay(uint32_t flags)
<> 144:ef7eb2e8f9f7 469 {
<> 144:ef7eb2e8f9f7 470 while (LCD->SYNCBUSY & flags)
<> 144:ef7eb2e8f9f7 471 ;
<> 144:ef7eb2e8f9f7 472 }
<> 144:ef7eb2e8f9f7 473
<> 144:ef7eb2e8f9f7 474
<> 144:ef7eb2e8f9f7 475 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 476 * @brief
<> 144:ef7eb2e8f9f7 477 * Get pending LCD interrupt flags
<> 144:ef7eb2e8f9f7 478 *
<> 144:ef7eb2e8f9f7 479 * @return
<> 144:ef7eb2e8f9f7 480 * Pending LCD interrupt sources. Returns a set of interrupt flags OR-ed
<> 144:ef7eb2e8f9f7 481 * together for multiple interrupt sources in the LCD module (LCD_IFS_nnn).
<> 144:ef7eb2e8f9f7 482 ******************************************************************************/
<> 144:ef7eb2e8f9f7 483 __STATIC_INLINE uint32_t LCD_IntGet(void)
<> 144:ef7eb2e8f9f7 484 {
<> 144:ef7eb2e8f9f7 485 return LCD->IF;
<> 144:ef7eb2e8f9f7 486 }
<> 144:ef7eb2e8f9f7 487
<> 144:ef7eb2e8f9f7 488
<> 144:ef7eb2e8f9f7 489 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 490 * @brief
<> 144:ef7eb2e8f9f7 491 * Get enabled and pending LCD interrupt flags.
<> 144:ef7eb2e8f9f7 492 *
<> 144:ef7eb2e8f9f7 493 * @details
<> 144:ef7eb2e8f9f7 494 * Useful for handling more interrupt sources in the same interrupt handler.
<> 144:ef7eb2e8f9f7 495 *
<> 144:ef7eb2e8f9f7 496 * @note
<> 144:ef7eb2e8f9f7 497 * The event bits are not cleared by the use of this function.
<> 144:ef7eb2e8f9f7 498 *
<> 144:ef7eb2e8f9f7 499 * @return
<> 144:ef7eb2e8f9f7 500 * Pending and enabled LCD interrupt sources.
<> 144:ef7eb2e8f9f7 501 * The return value is the bitwise AND combination of
<> 144:ef7eb2e8f9f7 502 * - the OR combination of enabled interrupt sources in LCD_IEN_nnn
<> 144:ef7eb2e8f9f7 503 * register (LCD_IEN_nnn) and
<> 144:ef7eb2e8f9f7 504 * - the bitwise OR combination of valid interrupt flags of the LCD module
<> 144:ef7eb2e8f9f7 505 * (LCD_IF_nnn).
<> 144:ef7eb2e8f9f7 506 ******************************************************************************/
<> 144:ef7eb2e8f9f7 507 __STATIC_INLINE uint32_t LCD_IntGetEnabled(void)
<> 144:ef7eb2e8f9f7 508 {
<> 144:ef7eb2e8f9f7 509 uint32_t ien;
<> 144:ef7eb2e8f9f7 510
<> 144:ef7eb2e8f9f7 511 /* Store LCD->IEN in temporary variable in order to define explicit order
<> 144:ef7eb2e8f9f7 512 * of volatile accesses. */
<> 144:ef7eb2e8f9f7 513 ien = LCD->IEN;
<> 144:ef7eb2e8f9f7 514
<> 144:ef7eb2e8f9f7 515 /* Bitwise AND of pending and enabled interrupts */
<> 144:ef7eb2e8f9f7 516 return LCD->IF & ien;
<> 144:ef7eb2e8f9f7 517 }
<> 144:ef7eb2e8f9f7 518
<> 144:ef7eb2e8f9f7 519
<> 144:ef7eb2e8f9f7 520 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 521 * @brief
<> 144:ef7eb2e8f9f7 522 * Set one or more pending LCD interrupts from SW.
<> 144:ef7eb2e8f9f7 523 *
<> 144:ef7eb2e8f9f7 524 * @param[in] flags
<> 144:ef7eb2e8f9f7 525 * LCD interrupt sources to set to pending. Use a set of interrupt flags
<> 144:ef7eb2e8f9f7 526 * OR-ed together to set multiple interrupt sources for the LCD module
<> 144:ef7eb2e8f9f7 527 * (LCD_IFS_nnn).
<> 144:ef7eb2e8f9f7 528 ******************************************************************************/
<> 144:ef7eb2e8f9f7 529 __STATIC_INLINE void LCD_IntSet(uint32_t flags)
<> 144:ef7eb2e8f9f7 530 {
<> 144:ef7eb2e8f9f7 531 LCD->IFS = flags;
<> 144:ef7eb2e8f9f7 532 }
<> 144:ef7eb2e8f9f7 533
<> 144:ef7eb2e8f9f7 534
<> 144:ef7eb2e8f9f7 535 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 536 * @brief
<> 144:ef7eb2e8f9f7 537 * Enable LCD interrupts
<> 144:ef7eb2e8f9f7 538 *
<> 144:ef7eb2e8f9f7 539 * @param[in] flags
<> 144:ef7eb2e8f9f7 540 * LCD interrupt sources to enable. Use a set of interrupt flags OR-ed
<> 144:ef7eb2e8f9f7 541 * together to set multiple interrupt sources for the LCD module
<> 144:ef7eb2e8f9f7 542 * (LCD_IFS_nnn).
<> 144:ef7eb2e8f9f7 543 ******************************************************************************/
<> 144:ef7eb2e8f9f7 544 __STATIC_INLINE void LCD_IntEnable(uint32_t flags)
<> 144:ef7eb2e8f9f7 545 {
<> 144:ef7eb2e8f9f7 546 LCD->IEN |= flags;
<> 144:ef7eb2e8f9f7 547 }
<> 144:ef7eb2e8f9f7 548
<> 144:ef7eb2e8f9f7 549
<> 144:ef7eb2e8f9f7 550 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 551 * @brief
<> 144:ef7eb2e8f9f7 552 * Disable LCD interrupts
<> 144:ef7eb2e8f9f7 553 *
<> 144:ef7eb2e8f9f7 554 * @param[in] flags
<> 144:ef7eb2e8f9f7 555 * LCD interrupt sources to disable. Use a set of interrupt flags OR-ed
<> 144:ef7eb2e8f9f7 556 * together to disable multiple interrupt sources for the LCD module
<> 144:ef7eb2e8f9f7 557 * (LCD_IFS_nnn).
<> 144:ef7eb2e8f9f7 558 ******************************************************************************/
<> 144:ef7eb2e8f9f7 559 __STATIC_INLINE void LCD_IntDisable(uint32_t flags)
<> 144:ef7eb2e8f9f7 560 {
<> 144:ef7eb2e8f9f7 561 LCD->IEN &= ~flags;
<> 144:ef7eb2e8f9f7 562 }
<> 144:ef7eb2e8f9f7 563
<> 144:ef7eb2e8f9f7 564
<> 144:ef7eb2e8f9f7 565 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 566 * @brief
<> 144:ef7eb2e8f9f7 567 * Clear one or more interrupt flags
<> 144:ef7eb2e8f9f7 568 *
<> 144:ef7eb2e8f9f7 569 * @param[in] flags
<> 144:ef7eb2e8f9f7 570 * LCD interrupt sources to clear. Use a set of interrupt flags OR-ed
<> 144:ef7eb2e8f9f7 571 * together to clear multiple interrupt sources for the LCD module
<> 144:ef7eb2e8f9f7 572 * (LCD_IFS_nnn).
<> 144:ef7eb2e8f9f7 573 ******************************************************************************/
<> 144:ef7eb2e8f9f7 574 __STATIC_INLINE void LCD_IntClear(uint32_t flags)
<> 144:ef7eb2e8f9f7 575 {
<> 144:ef7eb2e8f9f7 576 LCD->IFC = flags;
<> 144:ef7eb2e8f9f7 577 }
<> 144:ef7eb2e8f9f7 578
<> 144:ef7eb2e8f9f7 579
<> 144:ef7eb2e8f9f7 580 #if defined(LCD_CTRL_DSC)
<> 144:ef7eb2e8f9f7 581 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 582 * @brief
<> 144:ef7eb2e8f9f7 583 * Enable or disable LCD Direct Segment Control
<> 144:ef7eb2e8f9f7 584 *
<> 144:ef7eb2e8f9f7 585 * @param[in] enable
<> 144:ef7eb2e8f9f7 586 * If true, enables LCD controller Direct Segment Control
<> 144:ef7eb2e8f9f7 587 * Segment and COM line bias levels needs to be set explicitly with the
<> 144:ef7eb2e8f9f7 588 * LCD_BiasSegmentSet() and LCD_BiasComSet() function calls.
<> 144:ef7eb2e8f9f7 589 ******************************************************************************/
<> 144:ef7eb2e8f9f7 590 __STATIC_INLINE void LCD_DSCEnable(bool enable)
<> 144:ef7eb2e8f9f7 591 {
<> 144:ef7eb2e8f9f7 592 if (enable)
<> 144:ef7eb2e8f9f7 593 {
<> 144:ef7eb2e8f9f7 594 LCD->CTRL |= LCD_CTRL_DSC;
<> 144:ef7eb2e8f9f7 595 }
<> 144:ef7eb2e8f9f7 596 else
<> 144:ef7eb2e8f9f7 597 {
<> 144:ef7eb2e8f9f7 598 LCD->CTRL &= ~LCD_CTRL_DSC;
<> 144:ef7eb2e8f9f7 599 }
<> 144:ef7eb2e8f9f7 600 }
<> 144:ef7eb2e8f9f7 601 #endif
<> 144:ef7eb2e8f9f7 602
<> 144:ef7eb2e8f9f7 603 /** @} (end addtogroup LCD) */
<> 144:ef7eb2e8f9f7 604 /** @} (end addtogroup EM_Library) */
<> 144:ef7eb2e8f9f7 605
<> 144:ef7eb2e8f9f7 606 #ifdef __cplusplus
<> 144:ef7eb2e8f9f7 607 }
<> 144:ef7eb2e8f9f7 608 #endif
<> 144:ef7eb2e8f9f7 609
<> 144:ef7eb2e8f9f7 610 #endif /* defined(LCD_COUNT) && (LCD_COUNT > 0) */
<> 144:ef7eb2e8f9f7 611
<> 144:ef7eb2e8f9f7 612 #endif /* __SILICON_LABS_EM_LCD_H__ */