LCDEMLIB

Detailed Description

Liquid Crystal Display (LCD) Peripheral API.

This module contains functions to control the LDC peripheral of Silicon Labs 32-bit MCUs and SoCs. The LCD driver can drive up to 8x36 segmented LCD directly. The animation feature makes it possible to have active animations without CPU intervention.

Data Structures

struct LCD_AnimInit_TypeDef
struct LCD_FrameCountInit_TypeDef
struct LCD_Init_TypeDef

Macros

#define LCD_DEFAULT_CONTRAST 15
#define LCD_DEFAULT_FRAME_RATE_DIV 4
#define LCD_INIT_DEFAULT

Enumerations

enum LCD_AnimLogic_TypeDef {
lcdAnimLogicAnd = LCD_BACTRL_ALOGSEL_AND,
lcdAnimLogicOr = LCD_BACTRL_ALOGSEL_OR
}
enum LCD_AnimShift_TypeDef {
lcdAnimShiftNone = _LCD_BACTRL_AREGASC_NOSHIFT,
lcdAnimShiftLeft = _LCD_BACTRL_AREGASC_SHIFTLEFT,
lcdAnimShiftRight = _LCD_BACTRL_AREGASC_SHIFTRIGHT
}
enum LCD_Bias_TypeDef {
lcdBiasStatic = LCD_DISPCTRL_BIAS_STATIC,
lcdBiasOneHalf = LCD_DISPCTRL_BIAS_ONEHALF,
lcdBiasOneThird = LCD_DISPCTRL_BIAS_ONETHIRD,
lcdBiasOneFourth = LCD_DISPCTRL_BIAS_ONEFOURTH
}
enum LCD_ChargeRedistribution_TypeDef {
lcdChargeRedistributionDisable = LCD_DISPCTRL_CHGRDST_DISABLE,
lcdChargeRedistributionEnable = LCD_DISPCTRL_CHGRDST_ONE
}
enum LCD_FCPreScale_TypeDef {
lcdFCPrescDiv1 = LCD_BACTRL_FCPRESC_DIV1,
lcdFCPrescDiv2 = LCD_BACTRL_FCPRESC_DIV2,
lcdFCPrescDiv4 = LCD_BACTRL_FCPRESC_DIV4,
lcdFCPrescDiv8 = LCD_BACTRL_FCPRESC_DIV8
}
enum LCD_Mode_Typedef {
lcdModeNoExtCap = LCD_DISPCTRL_MODE_NOEXTCAP,
lcdModeStepDown = LCD_DISPCTRL_MODE_STEPDOWN,
lcdModeCpIntOsc = LCD_DISPCTRL_MODE_CPINTOSC
}
enum LCD_Mux_TypeDef {
lcdMuxStatic = LCD_DISPCTRL_MUX_STATIC,
lcdMuxDuplex = LCD_DISPCTRL_MUX_DUPLEX,
lcdMuxTriplex = LCD_DISPCTRL_MUX_TRIPLEX,
lcdMuxQuadruplex = LCD_DISPCTRL_MUX_QUADRUPLEX,
lcdMuxSextaplex = LCD_DISPCTRL_MUX_SEXTAPLEX,
lcdMuxOctaplex = LCD_DISPCTRL_MUX_OCTAPLEX
}
enum LCD_UpdateCtrl_TypeDef {
lcdUpdateCtrlRegular = LCD_CTRL_UDCTRL_REGULAR,
lcdUpdateCtrlFCEvent = LCD_CTRL_UDCTRL_FCEVENT,
lcdUpdateCtrlFrameStart = LCD_CTRL_UDCTRL_FRAMESTART
}
enum LCD_Wave_TypeDef {
lcdWaveLowPower = LCD_DISPCTRL_WAVE_LOWPOWER,
lcdWaveNormal = LCD_DISPCTRL_WAVE_NORMAL
}

Functions

__STATIC_INLINE void LCD_AnimEnable (bool enable)
Enables or disables LCD Animation feature.
void LCD_AnimInit (const LCD_AnimInit_TypeDef *animInit)
Configures LCD controller Animation feature.
__STATIC_INLINE int LCD_AnimState (void)
Returns current animation state.
void LCD_BiasComSet (int comLine, int biasLevel)
Configure bias level for a specific segment line.
void LCD_BiasSegmentSet (int segmentLine, int biasLevel)
Configure bias level for a specific segment line for Direct Segment Control.
void LCD_BiasSet ( LCD_Bias_TypeDef bias)
Configure bias level on LCD panel.
__STATIC_INLINE void LCD_BlankEnable (bool enable)
Disables all segments, while keeping segment state.
__STATIC_INLINE void LCD_BlinkEnable (bool enable)
Enables or disables LCD blink.
__STATIC_INLINE int LCD_BlinkState (void)
Returns current blink state.
void LCD_ChargeRedistributionCyclesSet (uint8_t cycles)
Configure the charge redistribution cycles for the LCD panel.
void LCD_ContrastSet (int level)
Configure contrast level on LCD panel.
__STATIC_INLINE void LCD_DSCEnable (bool enable)
Enable or disable LCD Direct Segment Control.
__STATIC_INLINE void LCD_Enable (bool enable)
Enable or disable LCD controller.
__STATIC_INLINE void LCD_FrameCountEnable (bool enable)
Enables or disables LCD Frame Control.
void LCD_FrameCountInit (const LCD_FrameCountInit_TypeDef *fcInit)
Initialize LCD Frame Counter.
__STATIC_INLINE void LCD_FreezeEnable (bool enable)
When set, LCD registers will not be updated until cleared,.
void LCD_Init (const LCD_Init_TypeDef *lcdInit)
Initalize Liquid Crystal Display (LCD) controller.
__STATIC_INLINE void LCD_IntClear (uint32_t flags)
Clear one or more interrupt flags.
__STATIC_INLINE void LCD_IntDisable (uint32_t flags)
Disable LCD interrupts.
__STATIC_INLINE void LCD_IntEnable (uint32_t flags)
Enable LCD interrupts.
__STATIC_INLINE uint32_t LCD_IntGet (void)
Get pending LCD interrupt flags.
__STATIC_INLINE uint32_t LCD_IntGetEnabled (void)
Get enabled and pending LCD interrupt flags.
__STATIC_INLINE void LCD_IntSet (uint32_t flags)
Set one or more pending LCD interrupts from SW.
void LCD_ModeSet ( LCD_Mode_Typedef mode)
Configure the mode for the LCD panel.
void LCD_SegmentSet (int com, int bit, bool enable)
Enables update of this range of LCD segment lines.
void LCD_SegmentSetHigh (int com, uint32_t mask, uint32_t bits)
Updated the high (32-39) segments on a given COM-line in one operation.
void LCD_SegmentSetLow (int com, uint32_t mask, uint32_t bits)
Updates the 0-31 lowest segments on a given COM-line in one operation, according to bit mask.
__STATIC_INLINE void LCD_SyncBusyDelay (uint32_t flags)
Polls LCD SYNCBUSY flags, until flag has been cleared.
__STATIC_INLINE uint32_t LCD_SyncBusyGet (void)
Returns SYNCBUSY bits, indicating which registers have pending updates.
void LCD_UpdateCtrl ( LCD_UpdateCtrl_TypeDef ud)
Configure Update Control.

Macro Definition Documentation

#define LCD_INIT_DEFAULT
Value:
{ \
true, \
lcdMuxOctaplex, \
lcdBiasOneFourth, \
lcdWaveLowPower, \
lcdModeNoExtCap, \
lcdChargeRedistributionEnable, \
LCD_DEFAULT_FRAME_RATE_DIV, \
LCD_DEFAULT_CONTRAST \
}

Default config for LCD init structure, enables 160 segments

Definition at line 311 of file em_lcd.h .

Enumeration Type Documentation

Animation Logic Control, how AReg and BReg should be combined

Enumerator
lcdAnimLogicAnd

Use bitwise logic AND to mix animation register A (AREGA) and B (AREGB)

lcdAnimLogicOr

Use bitwise logic OR to mix animation register A (AREGA) and B (AREGB)

Definition at line 221 of file em_lcd.h .

Animation Shift operation; none, left or right

Enumerator
lcdAnimShiftNone

No shift

lcdAnimShiftLeft

Shift segment bits left

lcdAnimShiftRight

Shift segment bits right

Definition at line 211 of file em_lcd.h .

Bias setting

Enumerator
lcdBiasStatic

Static (2 levels)

lcdBiasOneHalf

1/2 Bias (3 levels)

lcdBiasOneThird

1/3 Bias (4 levels)

lcdBiasOneFourth

1/4 Bias (5 levels)

Definition at line 99 of file em_lcd.h .

Charge redistribution control

Enumerator
lcdChargeRedistributionDisable

Disable charge redistribution

lcdChargeRedistributionEnable

Enable charge redistribution

Definition at line 230 of file em_lcd.h .

Frame Counter Clock Prescaler, FC-CLK = FrameRate (Hz) / this factor

Enumerator
lcdFCPrescDiv1

Prescale Div 1

lcdFCPrescDiv2

Prescale Div 2

lcdFCPrescDiv4

Prescale Div 4

lcdFCPrescDiv8

Prescale Div 8

Definition at line 156 of file em_lcd.h .

Contrast Configuration Mode

Enumerator
lcdModeNoExtCap

No external capacitor

lcdModeStepDown

External cap with resistor string

lcdModeCpIntOsc

External cap and internal oscillator

Definition at line 148 of file em_lcd.h .

MUX setting

Enumerator
lcdMuxStatic

Static (segments can be multiplexed with LCD_COM[0])

lcdMuxDuplex

Duplex / 1/2 Duty cycle (segments can be multiplexed with LCD_COM[0:1])

lcdMuxTriplex

Triplex / 1/3 Duty cycle (segments can be multiplexed with LCD_COM[0:2])

lcdMuxQuadruplex

Quadruplex / 1/4 Duty cycle (segments can be multiplexed with LCD_COM[0:3])

lcdMuxSextaplex

Sextaplex / 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5])

lcdMuxOctaplex

Octaplex / 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5])

Definition at line 68 of file em_lcd.h .

Update Data Control

Enumerator
lcdUpdateCtrlRegular

Regular update, data transfer done immediately

lcdUpdateCtrlFCEvent

Data transfer done at Frame Counter event

lcdUpdateCtrlFrameStart

Data transfer done at Frame Start

Definition at line 201 of file em_lcd.h .

Wave type

Enumerator
lcdWaveLowPower

Low power optimized waveform output

lcdWaveNormal

Regular waveform output

Definition at line 91 of file em_lcd.h .

Function Documentation

__STATIC_INLINE void LCD_AnimEnable ( bool enable )

Enables or disables LCD Animation feature.

Parameters
[in] enable Boolean true enables animation, false disables animation

Definition at line 383 of file em_lcd.h .

References LCD , and LCD_BACTRL_AEN .

Referenced by LCD_AnimInit() .

__STATIC_INLINE int LCD_AnimState ( void )

Returns current animation state.

Returns
Animation state, in range 0-15

Definition at line 447 of file em_lcd.h .

References _LCD_STATUS_ASTATE_MASK , _LCD_STATUS_ASTATE_SHIFT , and LCD .

void LCD_BiasComSet ( int comLine,
int biasLevel
)

Configure bias level for a specific segment line.

Note
When DSC is active, each configuration takes up 4 bits in the Segment Registers (SEGD4L/SEGD4H) which defines bias level. For optimal use of this feature, the entire SEGD-registers should be set at once in a optimized routine, so this function is mainly here to demonstrate how to correctly configure the bias levels, and should be used with care.
Parameters
[in] comLine COM line number, 0-7
[in] biasLevel Bias configuration level, 0-4. This value must be within the constraint defined by the LCD_DISPCTRL bias setting, see Reference Manual/Datasheet

Definition at line 762 of file em_lcd.c .

References LCD .

void LCD_BiasSegmentSet ( int segmentLine,
int biasLevel
)

Configure bias level for a specific segment line for Direct Segment Control.

Note
When DSC is active, each configuration takes up 4 bits in the Segment Registers (SEGD0L/SEGD1H) which defines bias level. For optimal use of this feature, the entire SEGD-registers should be set at once in a optimized routine, so this function is mainly here to demonstrate how to correctly configure the bias levels, and should be used with care.
Parameters
[in] segmentLine Segment line number
[in] biasLevel Bias configuration level, 0-4. This value must be within the constraint defined by the LCD_DISPCTRL bias setting, see Reference Manual/Datasheet

Definition at line 659 of file em_lcd.c .

References LCD .

void LCD_BiasSet ( LCD_Bias_TypeDef bias )

Configure bias level on LCD panel.

Parameters
[in] bias Bias level

Definition at line 617 of file em_lcd.c .

References _LCD_DISPCTRL_BIAS_MASK , and LCD .

__STATIC_INLINE void LCD_BlankEnable ( bool enable )

Disables all segments, while keeping segment state.

Parameters
[in] enable Boolean true clears all segments, boolean false restores all segment lines

Definition at line 415 of file em_lcd.h .

References LCD , and LCD_BACTRL_BLANK .

__STATIC_INLINE void LCD_BlinkEnable ( bool enable )

Enables or disables LCD blink.

Parameters
[in] enable Boolean true enables blink, false disables blink

Definition at line 399 of file em_lcd.h .

References LCD , and LCD_BACTRL_BLINKEN .

__STATIC_INLINE int LCD_BlinkState ( void )

Returns current blink state.

Returns
Return value is 1 if segments are enabled, 0 if disabled

Definition at line 459 of file em_lcd.h .

References _LCD_STATUS_BLINK_MASK , _LCD_STATUS_BLINK_SHIFT , and LCD .

void LCD_ChargeRedistributionCyclesSet ( uint8_t cycles )

Configure the charge redistribution cycles for the LCD panel.

Parameters
[in] chgrDst Charge redistribution cycles, range 0-4

Definition at line 792 of file em_lcd.c .

References _LCD_DISPCTRL_CHGRDST_MASK , _LCD_DISPCTRL_CHGRDST_SHIFT , and LCD .

void LCD_ContrastSet ( int level )

Configure contrast level on LCD panel.

Parameters
[in] level Contrast level in the range 0-63

Definition at line 601 of file em_lcd.c .

References _LCD_DISPCTRL_CONTRAST_MASK , _LCD_DISPCTRL_CONTRAST_SHIFT , and LCD .

Referenced by LCD_Init() .

__STATIC_INLINE void LCD_DSCEnable ( bool enable )

Enable or disable LCD Direct Segment Control.

Parameters
[in] enable If true, enables LCD controller Direct Segment Control Segment and COM line bias levels needs to be set explicitly with the LCD_BiasSegmentSet() and LCD_BiasComSet() function calls.

Definition at line 615 of file em_lcd.h .

References LCD , and LCD_CTRL_DSC .

__STATIC_INLINE void LCD_Enable ( bool enable )

Enable or disable LCD controller.

Parameters
[in] enable If true, enables LCD controller with current configuration, if false disables LCD controller. CMU clock for LCD must be enabled for correct operation.

Definition at line 367 of file em_lcd.h .

References LCD , and LCD_CTRL_EN .

Referenced by LCD_Init() , and SegmentLCD_Disable() .

__STATIC_INLINE void LCD_FrameCountEnable ( bool enable )

Enables or disables LCD Frame Control.

Parameters
[in] enable Boolean true enables frame counter, false disables frame counter

Definition at line 431 of file em_lcd.h .

References LCD , and LCD_BACTRL_FCEN .

Referenced by LCD_FrameCountInit() .

void LCD_FrameCountInit ( const LCD_FrameCountInit_TypeDef * fcInit )

Initialize LCD Frame Counter.

Parameters
[in] fcInit Pointer to Frame Counter initialization structure

Definition at line 173 of file em_lcd.c .

References _LCD_BACTRL_FCPRESC_MASK , _LCD_BACTRL_FCTOP_MASK , _LCD_BACTRL_FCTOP_SHIFT , LCD_FrameCountInit_TypeDef::enable , LCD , LCD_FrameCountEnable() , LCD_FrameCountInit_TypeDef::prescale , and LCD_FrameCountInit_TypeDef::top .

__STATIC_INLINE void LCD_FreezeEnable ( bool enable )

When set, LCD registers will not be updated until cleared,.

Parameters
[in] enable When enable is true, update is stopped, when false all registers are updated

Definition at line 472 of file em_lcd.h .

References LCD , LCD_FREEZE_REGFREEZE_FREEZE , and LCD_FREEZE_REGFREEZE_UPDATE .

Referenced by SegmentLCD_Number() , SegmentLCD_UnsignedHex() , and SegmentLCD_Write() .

void LCD_Init ( const LCD_Init_TypeDef * lcdInit )

Initalize Liquid Crystal Display (LCD) controller.

This function call will only configure the LCD controller. You must enable it afterwards, potentially configuring Frame Control and interrupts first according to requirements.

Parameters
[in] lcdInit Pointer to initialization structure which configures LCD controller.

Definition at line 67 of file em_lcd.c .

References _LCD_DISPCTRL_BIAS_MASK , _LCD_DISPCTRL_CHGRDST_MASK , _LCD_DISPCTRL_MODE_MASK , _LCD_DISPCTRL_MUX_MASK , _LCD_DISPCTRL_WAVE_MASK , LCD_Init_TypeDef::bias , LCD_Init_TypeDef::enable , LCD , LCD_ContrastSet() , LCD_Enable() , LCD_Init_TypeDef::mode , LCD_Init_TypeDef::mux , and LCD_Init_TypeDef::wave .

Referenced by SegmentLCD_Init() .

__STATIC_INLINE void LCD_IntClear ( uint32_t flags )

Clear one or more interrupt flags.

Parameters
[in] flags LCD interrupt sources to clear. Use a set of interrupt flags OR-ed together to clear multiple interrupt sources for the LCD module (LCD_IFS_nnn).

Definition at line 600 of file em_lcd.h .

References LCD .

__STATIC_INLINE void LCD_IntDisable ( uint32_t flags )

Disable LCD interrupts.

Parameters
[in] flags LCD interrupt sources to disable. Use a set of interrupt flags OR-ed together to disable multiple interrupt sources for the LCD module (LCD_IFS_nnn).

Definition at line 586 of file em_lcd.h .

References LCD .

Referenced by SegmentLCD_Init() .

__STATIC_INLINE void LCD_IntEnable ( uint32_t flags )

Enable LCD interrupts.

Parameters
[in] flags LCD interrupt sources to enable. Use a set of interrupt flags OR-ed together to set multiple interrupt sources for the LCD module (LCD_IFS_nnn).

Definition at line 572 of file em_lcd.h .

References LCD .

__STATIC_INLINE uint32_t LCD_IntGet ( void )

Get pending LCD interrupt flags.

Returns
Pending LCD interrupt sources. Returns a set of interrupt flags OR-ed together for multiple interrupt sources in the LCD module (LCD_IFS_nnn).

Definition at line 514 of file em_lcd.h .

References LCD .

__STATIC_INLINE uint32_t LCD_IntGetEnabled ( void )

Get enabled and pending LCD interrupt flags.

Useful for handling more interrupt sources in the same interrupt handler.

Note
The event bits are not cleared by the use of this function.
Returns
Pending and enabled LCD interrupt sources. The return value is the bitwise AND combination of
  • the OR combination of enabled interrupt sources in LCD_IEN_nnn register (LCD_IEN_nnn) and
  • the bitwise OR combination of valid interrupt flags of the LCD module (LCD_IF_nnn).

Definition at line 537 of file em_lcd.h .

References LCD .

__STATIC_INLINE void LCD_IntSet ( uint32_t flags )

Set one or more pending LCD interrupts from SW.

Parameters
[in] flags LCD interrupt sources to set to pending. Use a set of interrupt flags OR-ed together to set multiple interrupt sources for the LCD module (LCD_IFS_nnn).

Definition at line 558 of file em_lcd.h .

References LCD .

void LCD_ModeSet ( LCD_Mode_Typedef mode )

Configure the mode for the LCD panel.

Parameters
[in] mode Mode

Definition at line 780 of file em_lcd.c .

References _LCD_DISPCTRL_MODE_MASK , and LCD .

void LCD_SegmentSet ( int com,
int bit,
bool enable
)

Enables update of this range of LCD segment lines.

Parameters
[in] segmentRange Range of 4 LCD segments lines to enable or disable, for all enabled COM lines
[in] enable Bool true to enable segment updates, false to disable updates

Turn on or clear a segment

Note
On Gecko Family, max configuration is (COM-lines x Segment-Lines) 4x40 On Tiny Family, max configuration is 8x20 or 4x24 On Giant Family, max configuration is 8x36 or 4x40
Parameters
[in] com COM line to change
[in] bit Bit index of which field to change
[in] enable When true will set segment, when false will clear segment

Definition at line 277 of file em_lcd.c .

References BUS_RegBitWrite() , and LCD .

Referenced by displayBlock() , SegmentLCD_ARing() , SegmentLCD_Battery() , SegmentLCD_EnergyMode() , SegmentLCD_Number() , SegmentLCD_Symbol() , SegmentLCD_UnsignedHex() , and SegmentLCD_Write() .

void LCD_SegmentSetHigh ( int com,
uint32_t mask,
uint32_t bits
)

Updated the high (32-39) segments on a given COM-line in one operation.

Parameters
[in] com Which COM line to update
[in] mask Bit mask for segments 32-39
[in] bits Bit pattern for segments 32-39

Definition at line 502 of file em_lcd.c .

References LCD .

void LCD_SegmentSetLow ( int com,
uint32_t mask,
uint32_t bits
)

Updates the 0-31 lowest segments on a given COM-line in one operation, according to bit mask.

Parameters
[in] com Which COM line to update
[in] mask Bit mask for segments 0-31
[in] bits Bit pattern for segments 0-31

Definition at line 413 of file em_lcd.c .

References LCD .

__STATIC_INLINE void LCD_SyncBusyDelay ( uint32_t flags )

Polls LCD SYNCBUSY flags, until flag has been cleared.

Parameters
[in] flags Bit fields for LCD registers that shall be updated before we continue

Definition at line 500 of file em_lcd.h .

References LCD .

Referenced by SegmentLCD_Disable() , SegmentLCD_Init() , SegmentLCD_Number() , SegmentLCD_UnsignedHex() , and SegmentLCD_Write() .

__STATIC_INLINE uint32_t LCD_SyncBusyGet ( void )

Returns SYNCBUSY bits, indicating which registers have pending updates.

Returns
Bit fields for LCD registers which have pending updates

Definition at line 488 of file em_lcd.h .

References LCD .

void LCD_UpdateCtrl ( LCD_UpdateCtrl_TypeDef ud )

Configure Update Control.

Parameters
[in] ud Configures LCD update method

Definition at line 161 of file em_lcd.c .

References _LCD_CTRL_UDCTRL_MASK , and LCD .