34 #if defined(LCD_COUNT) && (LCD_COUNT > 0)
62 void LCD_Init(
const LCD_Init_TypeDef *lcdInit)
64 uint32_t dispCtrl = LCD->DISPCTRL;
66 EFM_ASSERT(lcdInit != (
void *) 0);
73 #if defined(LCD_DISPCTRL_MUXE)
74 | _LCD_DISPCTRL_MUXE_MASK
76 | _LCD_DISPCTRL_MUX_MASK
77 | _LCD_DISPCTRL_BIAS_MASK
78 | _LCD_DISPCTRL_WAVE_MASK
79 | _LCD_DISPCTRL_VLCDSEL_MASK
80 | _LCD_DISPCTRL_CONCONF_MASK);
83 dispCtrl |= lcdInit->mux;
84 dispCtrl |= lcdInit->bias;
85 dispCtrl |= lcdInit->wave;
86 dispCtrl |= lcdInit->vlcd;
87 dispCtrl |= lcdInit->contrast;
90 LCD->DISPCTRL = dispCtrl;
107 void LCD_VLCDSelect(LCD_VLCDSel_TypeDef vlcd)
109 uint32_t dispctrl = LCD->DISPCTRL;
112 dispctrl &= ~_LCD_DISPCTRL_VLCDSEL_MASK;
115 case lcdVLCDSelVExtBoost:
116 dispctrl |= LCD_DISPCTRL_VLCDSEL_VEXTBOOST;
119 dispctrl |= LCD_DISPCTRL_VLCDSEL_VDD;
125 LCD->DISPCTRL = dispctrl;
136 void LCD_UpdateCtrl(LCD_UpdateCtrl_TypeDef ud)
138 LCD->CTRL = (LCD->CTRL & ~_LCD_CTRL_UDCTRL_MASK) | ud;
149 void LCD_FrameCountInit(
const LCD_FrameCountInit_TypeDef *fcInit)
151 uint32_t bactrl = LCD->BACTRL;
153 EFM_ASSERT(fcInit != (
void *) 0);
156 EFM_ASSERT(fcInit->top < 64);
159 bactrl &= ~(_LCD_BACTRL_FCTOP_MASK
160 | _LCD_BACTRL_FCPRESC_MASK);
161 bactrl |= (fcInit->top << _LCD_BACTRL_FCTOP_SHIFT);
162 bactrl |= fcInit->prescale;
165 LCD->BACTRL = bactrl;
167 LCD_FrameCountEnable(fcInit->enable);
178 void LCD_AnimInit(
const LCD_AnimInit_TypeDef *animInit)
180 uint32_t bactrl = LCD->BACTRL;
182 EFM_ASSERT(animInit != (
void *) 0);
185 LCD->AREGA = animInit->AReg;
186 LCD->AREGB = animInit->BReg;
189 bactrl &= ~(_LCD_BACTRL_AREGASC_MASK
190 | _LCD_BACTRL_AREGBSC_MASK
191 | _LCD_BACTRL_ALOGSEL_MASK);
193 bactrl |= (animInit->AShift << _LCD_BACTRL_AREGASC_SHIFT);
194 bactrl |= (animInit->BShift << _LCD_BACTRL_AREGBSC_SHIFT);
195 bactrl |= animInit->animLogic;
197 #if defined(LCD_BACTRL_ALOC)
198 bactrl &= ~(_LCD_BACTRL_ALOC_MASK);
200 if(animInit->startSeg == 0)
202 bactrl |= LCD_BACTRL_ALOC_SEG0TO7;
204 else if(animInit->startSeg == 8)
206 bactrl |= LCD_BACTRL_ALOC_SEG8TO15;
211 LCD->BACTRL = bactrl;
214 LCD_AnimEnable(animInit->enable);
229 void LCD_SegmentRangeEnable(LCD_SegmentRange_TypeDef segmentRange,
bool enable)
233 LCD->SEGEN |= segmentRange;
237 LCD->SEGEN &= ~((uint32_t)segmentRange);
260 void LCD_SegmentSet(
int com,
int bit,
bool enable)
262 #if defined(_LCD_SEGD7L_MASK)
270 #if defined(_LCD_SEGD0H_MASK)
271 EFM_ASSERT(bit < 40);
274 EFM_ASSERT(bit < 32);
285 #if defined(_LCD_SEGD0H_MASK)
298 #if defined(_LCD_SEGD1H_MASK)
311 #if defined(_LCD_SEGD2H_MASK)
324 #if defined(_LCD_SEGD3H_MASK)
332 #if defined(_LCD_SEGD4L_MASK)
338 #if defined(_LCD_SEGD4H_MASK)
347 #if defined(_LCD_SEGD5L_MASK)
353 #if defined(_LCD_SEGD5H_MASK)
363 #if defined(_LCD_SEGD6L_MASK)
368 #if defined(_LCD_SEGD6H_MASK)
377 #if defined(_LCD_SEGD7L_MASK)
383 #if defined(_LCD_SEGD7H_MASK)
414 void LCD_SegmentSetLow(
int com, uint32_t mask, uint32_t bits)
419 #if defined(_LCD_SEGD7L_MASK)
429 segData = LCD->SEGD0L;
431 segData |= (mask & bits);
432 LCD->SEGD0L = segData;
435 segData = LCD->SEGD1L;
437 segData |= (mask & bits);
438 LCD->SEGD1L = segData;
441 segData = LCD->SEGD2L;
443 segData |= (mask & bits);
444 LCD->SEGD2L = segData;
447 segData = LCD->SEGD3L;
449 segData |= (mask & bits);
450 LCD->SEGD3L = segData;
452 #if defined(_LCD_SEGD4L_MASK)
454 segData = LCD->SEGD4L;
456 segData |= (mask & bits);
457 LCD->SEGD4L = segData;
460 #if defined(_LCD_SEGD5L_MASK)
462 segData = LCD->SEGD5L;
464 segData |= (mask & bits);
465 LCD->SEGD5L = segData;
468 #if defined(_LCD_SEGD6L_MASK)
470 segData = LCD->SEGD6L;
472 segData |= (mask & bits);
473 LCD->SEGD6L = segData;
476 #if defined(_LCD_SEGD7L_MASK)
478 segData = LCD->SEGD7L;
480 segData |= (mask & bits);
481 LCD->SEGD7L = segData;
491 #if defined(_LCD_SEGD0H_MASK)
505 void LCD_SegmentSetHigh(
int com, uint32_t mask, uint32_t bits)
509 #if defined(_LCD_SEGD7H_MASK)
519 segData = LCD->SEGD0H;
521 segData |= (mask & bits);
522 LCD->SEGD0H = segData;
525 segData = LCD->SEGD1H;
527 segData |= (mask & bits);
528 LCD->SEGD1H = segData;
531 segData = LCD->SEGD2H;
533 segData |= (mask & bits);
534 LCD->SEGD2H = segData;
537 segData = LCD->SEGD3H;
539 segData |= (mask & bits);
540 LCD->SEGD3H = segData;
542 #if defined(_LCD_SEGD4H_MASK)
544 segData = LCD->SEGD4H;
546 segData |= (mask & bits);
547 LCD->SEGD4H = segData;
550 #if defined(_LCD_SEGD5H_MASK)
552 segData = LCD->SEGD5H;
554 segData |= (mask & bits);
555 LCD->SEGD5H = segData;
558 #if defined(_LCD_SEGD6H_MASK)
560 segData = LCD->SEGD6H;
562 segData |= (mask & bits);
563 LCD->SEGD6H = segData;
566 #if defined(_LCD_SEGD7H_MASK)
568 segData = LCD->SEGD7H;
570 segData |= (mask & bits);
571 LCD->SEGD7H = segData;
587 void LCD_ContrastSet(
int level)
589 EFM_ASSERT(level < 32);
591 LCD->DISPCTRL = (LCD->DISPCTRL & ~_LCD_DISPCTRL_CONLEV_MASK)
592 | (level << _LCD_DISPCTRL_CONLEV_SHIFT);
605 void LCD_VBoostSet(LCD_VBoostLevel_TypeDef vboost)
608 LCD->DISPCTRL = (LCD->DISPCTRL & ~_LCD_DISPCTRL_VBLEV_MASK) | vboost;
612 #if defined(LCD_CTRL_DSC)
632 void LCD_BiasSegmentSet(
int segmentLine,
int biasLevel)
636 volatile uint32_t *segmentRegister;
638 #if !defined(_LCD_SEGD0H_MASK)
639 EFM_ASSERT(segmentLine < 20);
642 biasRegister = segmentLine / 8;
643 bitShift = (segmentLine % 8) * 4;
645 switch (biasRegister)
648 segmentRegister = &LCD->SEGD0L;
651 segmentRegister = &LCD->SEGD1L;
654 segmentRegister = &LCD->SEGD2L;
657 segmentRegister = &LCD->SEGD3L;
660 segmentRegister = (uint32_t *)0x00000000;
665 EFM_ASSERT(segmentLine < 40);
668 biasRegister = segmentLine / 10;
669 bitShift = (segmentLine % 10) * 4;
671 switch (biasRegister)
676 segmentRegister = &LCD->SEGD0L;
680 segmentRegister = &LCD->SEGD0H;
687 segmentRegister = &LCD->SEGD1L;
691 segmentRegister = &LCD->SEGD1H;
698 segmentRegister = &LCD->SEGD2L;
702 segmentRegister = &LCD->SEGD1H;
709 segmentRegister = &LCD->SEGD3L;
713 segmentRegister = &LCD->SEGD3H;
718 segmentRegister = (uint32_t *)0x00000000;
725 *segmentRegister = (*segmentRegister & ~(0xF << bitShift)) | (biasLevel << bitShift);
730 #if defined(LCD_CTRL_DSC)
750 void LCD_BiasComSet(
int comLine,
int biasLevel)
753 EFM_ASSERT(comLine < 8);
755 bitShift = comLine * 4;
756 LCD->SEGD4L = (LCD->SEGD4L & ~(0xF << bitShift)) | (biasLevel << bitShift);
Emlib peripheral API "assert" implementation.
RAM and peripheral bit-field set and clear API.
Liquid Crystal Display (LCD) peripheral API.
__STATIC_INLINE void BUS_RegBitWrite(volatile uint32_t *addr, unsigned int bit, unsigned int val)
Perform a single-bit write operation on a peripheral register.