39static uint32_t g_LCDFrameRate;
62void LCD_SetPixel(uint32_t u32Com, uint32_t u32Seg, uint32_t u32OnFlag)
64 int32_t memnum = u32Seg / 4;
65 int32_t seg_shift = 8*(u32Seg-(4*memnum));
71 LCD->MEM_0 |= (1<<u32Com)<<seg_shift;
75 LCD->MEM_1 |= (1<<u32Com)<<seg_shift;
79 LCD->MEM_2 |= (1<<u32Com)<<seg_shift;
83 LCD->MEM_3 |= (1<<u32Com)<<seg_shift;
87 LCD->MEM_4 |= (1<<u32Com)<<seg_shift;
91 LCD->MEM_5 |= (1<<u32Com)<<seg_shift;
95 LCD->MEM_6 |= (1<<u32Com)<<seg_shift;
99 LCD->MEM_7 |= (1<<u32Com)<<seg_shift;
103 LCD->MEM_8 |= (1<<u32Com)<<seg_shift;
110 LCD->MEM_0 &= ~((1<<u32Com)<<seg_shift);
114 LCD->MEM_1 &= ~((1<<u32Com)<<seg_shift);
118 LCD->MEM_2 &= ~((1<<u32Com)<<seg_shift);
122 LCD->MEM_3 &= ~((1<<u32Com)<<seg_shift);
126 LCD->MEM_4 &= ~((1<<u32Com)<<seg_shift);
130 LCD->MEM_5 &= ~((1<<u32Com)<<seg_shift);
134 LCD->MEM_6 &= ~((1<<u32Com)<<seg_shift);
138 LCD->MEM_7 &= ~((1<<u32Com)<<seg_shift);
142 LCD->MEM_8 &= ~((1<<u32Com)<<seg_shift);
150 SysTick->VAL = (0x00);
151 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
154 while((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0);
168 uint32_t u32SetValue;
172 u32SetValue = 0xFFFFFFFF;
176 u32SetValue = 0x00000000;
179 LCD->MEM_0 = u32SetValue;
180 LCD->MEM_1 = u32SetValue;
181 LCD->MEM_2 = u32SetValue;
182 LCD->MEM_3 = u32SetValue;
183 LCD->MEM_4 = u32SetValue;
184 LCD->MEM_5 = u32SetValue;
185 LCD->MEM_6 = u32SetValue;
186 LCD->MEM_7 = u32SetValue;
187 LCD->MEM_8 = u32SetValue;
193 SysTick->VAL = (0x00);
194 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
197 while((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0);
217 if(u32Count == 0)
return 0;
239 u32Count = (u32Count+(div/2))/div;
249 u32Count = u32Count*div;
287uint32_t
LCD_Open(uint32_t u32DrivingType, uint32_t u32ComNum, uint32_t u32BiasLevel, uint32_t u32FramerateDiv, uint32_t u32DrivingVol)
289 uint32_t clkdiv, muldiv;
290 uint32_t lcd_freq_div[] = {32, 64, 96, 128, 192, 256, 384, 512};
291 uint32_t multiplex_freq_div[] = {2, 4, 6, 8, 10, 12};
296 SYS->IPRST_CTL2 &= ~SYS_IPRST_CTL2_LCD_RST_Msk;
303 LCD->DISPCTL &= ~LCD_DISPCTL_Ext_C_Msk;
305 switch(u32DrivingType)
310 LCD->DISPCTL &= ~LCD_DISPCTL_BV_SEL_Msk;
312 LCD->DISPCTL =
LCD->DISPCTL & ~LCD_DISPCTL_CPUMP_VOL_SET_Msk | (u32DrivingVol);
313 LCD->DISPCTL &= ~LCD_DISPCTL_IBRL_EN_Msk;
321 LCD->DISPCTL &= ~LCD_DISPCTL_CPUMP_EN_Msk;
323 LCD->DISPCTL &= ~LCD_DISPCTL_IBRL_EN_Msk;
332 LCD->CTL &= ~LCD_CTL_FREQ_Msk;
333 LCD->CTL |= u32FramerateDiv;
336 LCD->DISPCTL =
LCD->DISPCTL & ~LCD_DISPCTL_BIAS_SEL_Msk | u32BiasLevel;
339 u32clk_src = 32 * 1024;
341 u32clk_src = 10 * 1024;
346 g_LCDFreq = (double)u32clk_src / lcd_freq_div[clkdiv];
347 g_LCDFrameRate = (uint32_t)g_LCDFreq / multiplex_freq_div[muldiv];
349 return g_LCDFrameRate;
381 if((1000/u32ms) > g_LCDFrameRate) u32ms = (1000/g_LCDFrameRate);
383 framecount = (uint32_t) (u32ms / (1000/g_LCDFrameRate)) ;
385 if(framecount > 0x3F)
387 for(div=2; div<=8; div*=2)
389 framecount = (uint32_t) (u32ms / (1000/(g_LCDFrameRate/div)) );
391 if( framecount <= 0x40 )
399 else if(framecount == 0)
404 LCD->FCR =
LCD->FCR & ~LCD_FCR_PRESCL_Msk | prescale;
411 return ( (framecount*1000)/(g_LCDFrameRate/div) );
426 LCD->CTL &= ~LCD_CTL_BLINK_Msk;
470 LCD->FCR &= ~LCD_FCR_FCEN_Msk;
476 LCD->CTL &= ~LCD_CTL_PDINT_EN_Msk;
Nano102/112 peripheral access layer header file. This file contains all the peripheral register's def...
#define LCD_DISPCTL_IBRL_EN_Msk
#define LCD_DISPCTL_CPUMP_EN_Msk
#define LCD_FCSTS_FCSTS_Msk
#define LCD_DISPCTL_Ext_C_Msk
#define LCD_CTL_PDINT_EN_Msk
#define LCD_CTL_BLINK_Msk
#define LCD_FCSTS_PDSTS_Msk
#define SYS_IPRST_CTL2_LCD_RST_Msk
#define LCD_DISPCTL_BV_SEL_Msk
#define CLK_CLKSEL1_LCD_S_Msk
#define LCD_POWERDOWN_INT
#define LCD_FRAMECOUNT_INT
void LCD_SetPixel(uint32_t u32Com, uint32_t u32Seg, uint32_t u32OnFlag)
Enables a segment on the LCD display.
void LCD_SetAllPixels(uint32_t u32OnOff)
LCD Enable/Disable all segments.
uint32_t LCD_Open(uint32_t u32DrivingType, uint32_t u32ComNum, uint32_t u32BiasLevel, uint32_t u32FramerateDiv, uint32_t u32DrivingVol)
LCD Initialization routine.
void LCD_EnableInt(uint32_t IntSrc)
This function is used to enable LCD interrupt.
uint32_t LCD_EnableBlink(uint32_t u32ms)
Enable Blink function in LCD controller.
void LCD_Close(void)
The function is used to disable LCD controller.
void LCD_DisableInt(uint32_t IntSrc)
This function is used to disable LCD specified interrupt.
void LCD_DisableFrameCounter(void)
Disable frame count function.
void LCD_DisableBlink(void)
Disable Blink function in LCD controller.
uint32_t LCD_EnableFrameCounter(uint32_t u32Count)
Set Frame Count and Enable frame count.
static __INLINE void LCD_DisableDisplay(void)
Disable LCD controller.
#define CLK
Pointer to CLK register structure.
#define LCD
Pointer to LCD register structure.
#define SYS
Pointer to SYS register structure.
Nano102/112 series LCD driver header file.