123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810 |
- /**************************************************************************//**
- * @file LCDLIB.c
- * @version V3.00
- * @brief RHE6616TP01(8-COM, 40-SEG, 1/4 Bias) LCD library source file
- *
- * SPDX-License-Identifier: Apache-2.0
- * @copyright (C) 2019-2020 Nuvoton Technology Corp. All rights reserved.
- *****************************************************************************/
- #include <rtthread.h>
- #include <rtdevice.h>
- #include "drv_slcd.h"
- #include "slcd_rhe6616tp01.h"
- #define DBG_SECTION_NAME "slcd_demo"
- #define DBG_LEVEL DBG_LOG
- #include <rtdbg.h>
- static rt_device_t g_psDev = RT_NULL;
- /**************************************************************************//**
- *
- * Defines each text's segment (alphabet+numeric) in terms of COM and SEG numbers,
- * Using this way that text segment can be consisted of each bit in the
- * following bit pattern:
- * @illustration
- * A
- * -----------
- * |\ | /|
- * F G H I B
- * | \ | / |
- * --J-- --K--
- * | /| \ |
- * E L M N C
- * | / | \|
- * -----------
- * D
- *
- * 0
- * -----------
- * |\ | /|
- * 5| 6 7 8 |1
- * | \ | / |
- * --9-- -10--
- * | /| \ |
- * 4| 11 12 13|2
- * | / | \|
- * -----------
- * 3
- *
- *****************************************************************************/
- static const char acMainDigitRawData[ZONE_MAIN_DIG_CNT][ZONE_MAIN_SEG_NUM][2] =
- {
- {
- // digit 1, {com, seg}
- // A // B // C // D
- {0, 1}, {0, 0}, {3, 0}, {3, 1},
- // E // F // G // H
- {2, 3}, {0, 3}, {0, 2}, {1, 1},
- // I // J // K // L
- {1, 0}, {1, 2}, {2, 0}, {3, 2},
- // M // N
- {2, 2}, {2, 1},
- },
- {
- // digit 2, {com, seg}
- // A // B // C // D
- {0, 18}, {0, 19}, {3, 19}, {3, 18},
- // E // F // G // H
- {2, 16}, {0, 16}, {0, 17}, {1, 18},
- // I // J // K // L
- {1, 19}, {1, 17}, {2, 19}, {3, 17},
- // M // N
- {2, 17}, {2, 18},
- },
- {
- // digit 3, {com, seg}
- // A // B // C // D
- {0, 22}, {0, 23}, {3, 23}, {3, 22},
- // E // F // G // H
- {2, 20}, {0, 20}, {0, 21}, {1, 22},
- // I // J // K // L
- {1, 23}, {1, 21}, {2, 23}, {3, 21},
- // M // N
- {2, 21}, {2, 22},
- },
- {
- // digit 4, {com, seg}
- // A // B // C // D
- {0, 26}, {0, 27}, {3, 27}, {3, 26},
- // E // F // G // H
- {2, 24}, {0, 24}, {0, 25}, {1, 26},
- // I // J // K // L
- {1, 27}, {1, 25}, {2, 27}, {3, 25},
- // M // N
- {2, 25}, {2, 26},
- },
- {
- // digit 5, {com, seg}
- // A // B // C // D
- {0, 30}, {0, 31}, {3, 31}, {3, 30},
- // E // F // G // H
- {2, 28}, {0, 28}, {0, 29}, {1, 30},
- // I // J // K // L
- {1, 31}, {1, 29}, {2, 31}, {3, 29},
- // M // N
- {2, 29}, {2, 30},
- },
- {
- // digit 6, {com, seg}
- // A // B // C // D
- {0, 34}, {0, 35}, {3, 35}, {3, 34},
- // E // F // G // H
- {2, 32}, {0, 32}, {0, 33}, {1, 34},
- // I // J // K // L
- {1, 35}, {1, 33}, {2, 35}, {3, 33},
- // M // N
- {2, 33}, {2, 34},
- },
- {
- // digit 7, {com, seg}
- // A // B // C // D
- {0, 38}, {0, 39}, {3, 39}, {3, 38},
- // E // F // G // H
- {2, 36}, {0, 36}, {0, 37}, {1, 38},
- // I // J // K // L
- {1, 39}, {1, 37}, {2, 39}, {3, 37},
- // M // N
- {2, 37}, {2, 38},
- },
- };
- /**************************************************************************//**
- *
- * Defines each text's segment (numeric) in terms of COM and BIT numbers,
- * Using this way that text segment can be consisted of each bit in the
- * following bit pattern:
- * @illustration
- *
- * ---A---
- * | |
- * F B
- * | |
- * ---G---
- * | |
- * E C
- * | |
- * ---D---
- *
- * ---0---
- * | |
- * 5 1
- * | |
- * ---6---
- * | |
- * 4 2
- * | |
- * ---3---
- *
- *****************************************************************************/
- static const char acPPMDigitRawData[ZONE_PPM_DIG_CNT][ZONE_PPM_SEG_NUM][2] =
- {
- {
- // digit 1, {com, seg}
- // A // B // C // D
- {4, 16}, {5, 17}, {7, 17}, {7, 16},
- // E // F // G
- {6, 16}, {5, 16}, {6, 17},
- },
- {
- // digit 2, {com, seg}
- // A // B // C // D
- {4, 18}, {5, 19}, {7, 19}, {7, 18},
- // E // F // G
- {6, 18}, {5, 18}, {6, 19},
- },
- {
- // digit 3, {com, seg}
- // A // B // C // D
- {4, 20}, {5, 21}, {7, 21}, {7, 20},
- // E // F // G
- {6, 20}, {5, 20}, {6, 21},
- },
- };
- static const char acTEMPDigitRawData[ZONE_TEMP_DIG_CNT][ZONE_TEMP_SEG_NUM][2] =
- {
- {
- // digit 1, {com, seg}
- // A // B // C // D
- {4, 22}, {5, 23}, {7, 23}, {7, 22},
- // E // F // G
- {6, 22}, {5, 22}, {6, 23},
- },
- {
- // digit 2, {com, seg}
- // A // B // C // D
- {4, 24}, {5, 25}, {7, 25}, {7, 24},
- // E // F // G
- {6, 24}, {5, 24}, {6, 25},
- },
- {
- // digit 3, {com, seg}
- // A // B // C // D
- {4, 26}, {5, 27}, {7, 27}, {7, 26},
- // E // F // G
- {6, 26}, {5, 26}, {6, 27},
- },
- };
- static const char acVERDigitRawData[ZONE_VER_DIG_CNT][ZONE_VER_SEG_NUM][2] =
- {
- {
- // digit 1, {com, seg}
- // A // B // C // D
- {4, 28}, {5, 29}, {7, 29}, {7, 28},
- // E // F // G
- {6, 28}, {5, 28}, {6, 29},
- },
- {
- // digit 2, {com, seg}
- // A // B // C // D
- {4, 30}, {5, 31}, {7, 31}, {7, 30},
- // E // F // G
- {6, 30}, {5, 30}, {6, 31},
- },
- {
- // digit 3, {com, seg}
- // A // B // C // D
- {4, 32}, {5, 33}, {7, 33}, {7, 32},
- // E // F // G
- {6, 32}, {5, 32}, {6, 33},
- },
- {
- // digit 4, {com, seg}
- // A // B // C // D
- {4, 34}, {5, 35}, {7, 35}, {7, 34},
- // E // F // G
- {6, 34}, {5, 34}, {6, 35},
- },
- {
- // digit 5, {com, seg}
- // A // B // C // D
- {4, 36}, {5, 37}, {7, 37}, {7, 36},
- // E // F // G
- {6, 36}, {5, 36}, {6, 37},
- },
- {
- // digit 6, {com, seg}
- // A // B // C // D
- {4, 38}, {5, 39}, {7, 39}, {7, 38},
- // E // F // G
- {6, 38}, {5, 38}, {6, 39},
- },
- };
- static const char acTimeDigitRawData[ZONE_TIME_DIG_CNT][ZONE_TIME_SEG_NUM][2] =
- {
- {
- // digit 1, {com, seg}
- // A // B // C // D
- {7, 2}, {6, 3}, {4, 3}, {4, 2},
- // E // F // G
- {5, 2}, {6, 2}, {5, 3},
- },
- {
- // digit 2, {com, seg}
- // A // B // C // D
- {7, 4}, {6, 5}, {4, 5}, {4, 4},
- // E // F // G
- {5, 4}, {6, 4}, {5, 5},
- },
- {
- // digit 3, {com, seg}
- // A // B // C // D
- {7, 6}, {6, 7}, {4, 7}, {4, 6},
- // E // F // G
- {5, 6}, {6, 6}, {5, 7},
- },
- {
- // digit 4, {com, seg}
- // A // B // C // D
- {7, 8}, {6, 9}, {4, 9}, {4, 8},
- // E // F // G
- {5, 8}, {6, 8}, {5, 9},
- },
- };
- static const char acNuMicroDigitRawData[ZONE_NUMICRO_DIG_CNT][ZONE_NUMICRO_SEG_NUM][2] =
- {
- {
- // digit 1, {com, seg}
- // A // B // C // D
- {3, 4}, {2, 5}, {0, 5}, {0, 4},
- // E // F // G
- {1, 4}, {2, 4}, {1, 5},
- },
- {
- // digit 2, {com, seg}
- // A // B // C // D
- {3, 6}, {2, 7}, {0, 7}, {0, 6},
- // E // F // G
- {1, 6}, {2, 6}, {1, 7},
- },
- {
- // digit 3, {com, seg}
- // A // B // C // D
- {3, 8}, {2, 9}, {0, 9}, {0, 8},
- // E // F // G
- {1, 8}, {2, 8}, {1, 9},
- },
- };
- /**************************************************************************//**
- *
- * Defines segments for the alphabet - ASCII table 0x20 to 0x7A
- * Bit pattern below defined for alphabet (text segments)
- *
- *****************************************************************************/
- static const uint16_t auMainDigitMap[] =
- {
- 0x0000, /* space */
- 0x1100, /* ! */
- 0x0280, /* " */
- 0x0000, /* # */
- 0x0000, /* $ */
- 0x0000, /* % */
- 0x0000, /* & */
- 0x0000, /* ? */
- 0x0039, /* ( */
- 0x000f, /* ) */
- 0x3fc0, /* * */
- 0x1540, /* + */
- 0x0000, /* , */
- 0x0440, /* - */
- 0x8000, /* . */
- 0x2200, /* / */
- 0x003F, /* 0 */
- 0x0006, /* 1 */
- 0x061B, /* 2 */
- 0x060F, /* 3 */
- 0x0626, /* 4 */
- 0x062D, /* 5 */
- 0x063D, /* 6 */
- 0x0007, /* 7 */
- 0x063F, /* 8 */
- 0x062F, /* 9 */
- 0x0000, /* : */
- 0x0000, /* ; */
- 0x2100, /* < */
- 0x0000, /* = */
- 0x0840, /* > */
- 0x1403, /* ? */
- 0x3FFF, /* @ */
- 0x0637, /* A */
- 0x2339, /* B */
- 0x0039, /* C */
- 0x2139, /* D */
- 0x0639, /* E */
- 0x0631, /* F */
- 0x043D, /* G */
- 0x0636, /* H */
- 0x1080, /* I */
- 0x000E, /* J */
- 0x2330, /* K */
- 0x0038, /* L */
- 0x0176, /* M */
- 0x2076, /* N */
- 0x003F, /* O */
- 0x0633, /* P */
- 0x203F, /* Q */
- 0x2331, /* R */
- 0x062D, /* S */
- 0x1081, /* T */
- 0x003E, /* U */
- 0x0930, /* V */
- 0x2836, /* W */
- 0x2940, /* X */
- 0x1140, /* Y */
- 0x0909, /* Z */
- 0x0039, /* [ */
- 0x0900, /* backslash */
- 0x000F, /* ] */
- 0x2800, /* ^ */
- 0x0008, /* _ */
- 0x0040, /* ` */
- 0x1218, /* a */
- 0x063C, /* b */
- 0x0618, /* c */
- 0x061E, /* d */
- 0x0A18, /* e */
- 0x0231, /* f */
- 0x048F, /* g */
- 0x1230, /* h */
- 0x1000, /* i */
- 0x000E, /* j */
- 0x2330, /* k */
- 0x0038, /* l */
- 0x1614, /* m */
- 0x1404, /* n */
- 0x061C, /* o */
- 0x0331, /* p */
- 0x0447, /* q */
- 0x1400, /* r */
- 0x2408, /* s */
- 0x0238, /* t */
- 0x1018, /* u */
- 0x0810, /* v */
- 0x2814, /* w */
- 0x2940, /* x */
- 0x0446, /* y */
- 0x0A08, /* z */
- 0x0000,
- };
- /**************************************************************************//**
- * Defines segments for the numeric display
- *****************************************************************************/
- static const uint16_t auPPMDigitMap[] =
- {
- 0x3F, /* 0 */
- 0x06, /* 1 */
- 0x5B, /* 2 */
- 0x4F, /* 3 */
- 0x66, /* 4 */
- 0x6D, /* 5 */
- 0x7D, /* 6 */
- 0x07, /* 7 */
- 0x7F, /* 8 */
- 0x6F, /* 9 */
- };
- static const uint16_t auTEMPDigitMap[] =
- {
- 0x3F, /* 0 */
- 0x06, /* 1 */
- 0x5B, /* 2 */
- 0x4F, /* 3 */
- 0x66, /* 4 */
- 0x6D, /* 5 */
- 0x7D, /* 6 */
- 0x07, /* 7 */
- 0x7F, /* 8 */
- 0x6F, /* 9 */
- };
- static const uint16_t auVERDigitMap[] =
- {
- 0x3F, /* 0 */
- 0x06, /* 1 */
- 0x5B, /* 2 */
- 0x4F, /* 3 */
- 0x66, /* 4 */
- 0x6D, /* 5 */
- 0x7D, /* 6 */
- 0x07, /* 7 */
- 0x7F, /* 8 */
- 0x6F, /* 9 */
- };
- static const uint16_t auTimeDigitMap[] =
- {
- 0x3F, /* 0 */
- 0x06, /* 1 */
- 0x5B, /* 2 */
- 0x4F, /* 3 */
- 0x66, /* 4 */
- 0x6D, /* 5 */
- 0x7D, /* 6 */
- 0x07, /* 7 */
- 0x7F, /* 8 */
- 0x6F, /* 9 */
- };
- static const uint16_t auNuMicroDigitMap[] =
- {
- 0x3F, /* 0 */
- 0x06, /* 1 */
- 0x5B, /* 2 */
- 0x4F, /* 3 */
- 0x66, /* 4 */
- 0x6D, /* 5 */
- 0x7D, /* 6 */
- 0x07, /* 7 */
- 0x7F, /* 8 */
- 0x6F, /* 9 */
- };
- /* Zone information */
- static const LCD_ZONE_INFO_T g_LCDZoneInfo[] =
- {
- {ZONE_MAIN_DIG_CNT, ZONE_MAIN_SEG_NUM},
- {ZONE_PPM_DIG_CNT, ZONE_PPM_SEG_NUM},
- {ZONE_TEMP_DIG_CNT, ZONE_TEMP_SEG_NUM},
- {ZONE_VER_DIG_CNT, ZONE_VER_SEG_NUM},
- {ZONE_TIME_DIG_CNT, ZONE_TIME_SEG_NUM},
- {ZONE_NUMICRO_DIG_CNT, ZONE_NUMICRO_SEG_NUM},
- };
- /* Raw data table for each zone */
- static const char *g_GetLCDComSeg[] =
- {
- (const char *)(acMainDigitRawData),
- (const char *)(acPPMDigitRawData),
- (const char *)(acTEMPDigitRawData),
- (const char *)(acVERDigitRawData),
- (const char *)(acTimeDigitRawData),
- (const char *)(acNuMicroDigitRawData),
- };
- /* Display mapping table for each zone */
- static const uint16_t *g_LCDDispTable[] =
- {
- (const uint16_t *)(auMainDigitMap),
- (const uint16_t *)(auPPMDigitMap),
- (const uint16_t *)(auTEMPDigitMap),
- (const uint16_t *)(auVERDigitMap),
- (const uint16_t *)(auTimeDigitMap),
- (const uint16_t *)(auNuMicroDigitMap),
- };
- void SLCD_SetPixel(uint32_t u32Com, uint32_t u32Seg, uint32_t u32OnFlag)
- {
- if (g_psDev)
- {
- struct nu_slcd_pixel sNuSLCDPxl;
- sNuSLCDPxl.m_u32Com = u32Com;
- sNuSLCDPxl.m_u32Seg = u32Seg;
- sNuSLCDPxl.m_u32OnFlag = u32OnFlag;
- rt_device_write(g_psDev, 0, (void *)&sNuSLCDPxl, sizeof(struct nu_slcd_pixel));
- }
- }
- /**
- * @brief Display text on LCD
- *
- * @param[in] u32Zone the assigned number of display area
- * @param[in] InputStr Text string to show on display
- *
- * @return None
- */
- void LCDLIB_Printf(uint32_t u32Zone, char *InputStr)
- {
- uint32_t i, index, ch, len;
- uint16_t DispData;
- uint32_t com, seg;
- len = rt_strlen(InputStr);
- /* Fill out all characters on display */
- for (index = 0; index < g_LCDZoneInfo[u32Zone].u32DigitCnt; index++)
- {
- if (index < len)
- {
- ch = *InputStr;
- }
- else
- {
- /* Padding with SPACE */
- ch = 0x20;
- }
- /* For Main Zone */
- if (u32Zone == ZONE_MAIN_DIGIT)
- {
- /* The Main Digit Table is an ASCII table beginning with "SPACE" (hex is 0x20) */
- ch = ch - 0x20;
- DispData = *(g_LCDDispTable[u32Zone] + ch);
- }
- /* For Other Zones (Support '0' ~ '9' only) */
- else if ((ch >= '0') && (ch <= '9'))
- {
- ch = ch - '0';
- DispData = *(g_LCDDispTable[u32Zone] + ch);
- }
- /* Out of definition. Will show "SPACE" */
- else
- {
- DispData = 0;
- }
- for (i = 0; i < g_LCDZoneInfo[u32Zone].u32MaxSegNum; i++)
- {
- com = *(g_GetLCDComSeg[u32Zone]
- + (index * g_LCDZoneInfo[u32Zone].u32MaxSegNum * 2)
- + (i * 2) + 0);
- seg = *(g_GetLCDComSeg[u32Zone]
- + (index * g_LCDZoneInfo[u32Zone].u32MaxSegNum * 2)
- + (i * 2) + 1);
- /* Turn off display */
- SLCD_SetPixel(com, seg, 0);
- if (DispData & (1 << i))
- {
- /* Turn on display */
- SLCD_SetPixel(com, seg, 1);
- }
- }
- InputStr++;
- }
- }
- /**
- * @brief Display number on LCD
- *
- * @param[in] u32Zone the assigned number of display area
- * @param[in] InputNum number to show on display
- *
- * @return None
- */
- void LCDLIB_PrintNumber(uint32_t u32Zone, uint32_t InputNum)
- {
- uint32_t i, index, val, div;
- uint16_t DispData;
- uint32_t com, seg;
- /* Extract useful digits */
- div = 1;
- /* Fill out all characters on display */
- index = g_LCDZoneInfo[u32Zone].u32DigitCnt;
- while (index != 0)
- {
- index--;
- val = (InputNum / div) % 10;
- if (u32Zone == ZONE_MAIN_DIGIT)
- val += 16; /* The Main Digit Table is an ASCII table beginning with "SPACE" */
- DispData = *(g_LCDDispTable[u32Zone] + val);
- for (i = 0; i < g_LCDZoneInfo[u32Zone].u32MaxSegNum; i++)
- {
- com = *(g_GetLCDComSeg[u32Zone]
- + (index * g_LCDZoneInfo[u32Zone].u32MaxSegNum * 2)
- + (i * 2) + 0);
- seg = *(g_GetLCDComSeg[u32Zone]
- + (index * g_LCDZoneInfo[u32Zone].u32MaxSegNum * 2)
- + (i * 2) + 1);
- /* Turn off display */
- SLCD_SetPixel(com, seg, 0);
- if (DispData & (1 << i))
- {
- /* Turn on display */
- SLCD_SetPixel(com, seg, 1);
- }
- }
- div = div * 10;
- }
- }
- /**
- * @brief Display character on LCD
- *
- * @param[in] u32Zone the assigned number of display area
- * @param[in] u32Index the requested display position in zone
- * @param[in] u8Ch Character to show on display
- *
- * @return None
- */
- void LCDLIB_PutChar(uint32_t u32Zone, uint32_t u32Index, uint8_t u8Ch)
- {
- uint32_t i;
- uint16_t DispData;
- uint32_t com, seg;
- if (u32Index <= g_LCDZoneInfo[u32Zone].u32DigitCnt)
- {
- /* For Main Zone */
- if (u32Zone == ZONE_MAIN_DIGIT)
- {
- /* The Main Digit Table is an ASCII table beginning with "SPACE" (hex is 0x20) */
- u8Ch = u8Ch - 0x20;
- DispData = *(g_LCDDispTable[u32Zone] + u8Ch);
- }
- /* For Other Zones (Support '0' ~ '9' only) */
- else if ((u8Ch >= '0') && (u8Ch <= '9'))
- {
- u8Ch = u8Ch - '0';
- DispData = *(g_LCDDispTable[u32Zone] + u8Ch);
- }
- /* Out of definition. Will show "SPACE" */
- else
- {
- DispData = 0;
- }
- for (i = 0; i < g_LCDZoneInfo[u32Zone].u32MaxSegNum; i++)
- {
- com = *(g_GetLCDComSeg[u32Zone]
- + (u32Index * g_LCDZoneInfo[u32Zone].u32MaxSegNum * 2)
- + (i * 2) + 0);
- seg = *(g_GetLCDComSeg[u32Zone]
- + (u32Index * g_LCDZoneInfo[u32Zone].u32MaxSegNum * 2)
- + (i * 2) + 1);
- /* Turn off display */
- SLCD_SetPixel(com, seg, 0);
- if (DispData & (1 << i))
- {
- /* Turn on display */
- SLCD_SetPixel(com, seg, 1);
- }
- }
- }
- }
- /**
- * @brief Display symbol on LCD
- *
- * @param[in] u32Symbol the combination of com, seg position
- * @param[in] u32OnOff 1: display symbol
- * 0: not display symbol
- *
- * @return None
- */
- void LCDLIB_SetSymbol(uint32_t u32Symbol, uint32_t u32OnOff)
- {
- uint32_t com, seg;
- com = (u32Symbol & 0xF);
- seg = ((u32Symbol & 0xFF0) >> 4);
- if (u32OnOff)
- SLCD_SetPixel(com, seg, 1); /* Turn on display */
- else
- SLCD_SetPixel(com, seg, 0); /* Turn off display */
- }
- static S_LCD_CFG_T g_LCDCfg_RHE6616TP01 =
- {
- __LXT, /*!< LCD clock source frequency */
- LCD_COM_DUTY_1_8, /*!< COM duty */
- LCD_BIAS_LV_1_4, /*!< Bias level */
- 64, /*!< Operation frame rate */
- LCD_WAVEFORM_TYPE_A_NORMAL, /*!< Waveform type */
- LCD_DISABLE_ALL_INT, /*!< Interrupt source */
- LCD_LOW_DRIVING_AND_BUF_ON, /*!< Driving mode */
- LCD_VOLTAGE_SOURCE_CP, /*!< Voltage source */
- };
- static int nu_slcd_panel_init(void)
- {
- uint32_t u32CPVol;
- rt_err_t ret = RT_EOK;
- g_psDev = rt_device_find("slcd");
- if (g_psDev == RT_NULL)
- {
- LOG_E("can't find slcd failed!\n");
- goto fail_nu_slcd_panel_init;
- }
- /* Give owned SLCD configuration before openning. */
- ret = rt_device_control(g_psDev, NU_SLCD_CMD_SET_LCD_CFG, (void *)&g_LCDCfg_RHE6616TP01);
- if (ret != RT_EOK)
- {
- LOG_E("configure SLCD failed!\n");
- goto fail_nu_slcd_panel_init;
- }
- /* Open SLCD. */
- ret = rt_device_open(g_psDev, RT_DEVICE_FLAG_WRONLY);
- if (ret != RT_EOK)
- {
- LOG_E("open dev failed!\n");
- goto fail_nu_slcd_panel_init;
- }
- /* Note: This panel need inject 4.8v, but m2354 charge pump max voltage is 3.6v. */
- u32CPVol = LCD_CP_VOLTAGE_LV_5;
- ret = rt_device_control(g_psDev, NU_SLCD_CMD_SET_CP_VOLTAGE, (void *)&u32CPVol);
- if (ret != RT_EOK)
- {
- LOG_E("faile to control cp voltage!\n");
- goto fail_nu_slcd_panel_init;
- }
- return (int)ret;
- fail_nu_slcd_panel_init:
- if (g_psDev)
- {
- rt_device_close(g_psDev);
- g_psDev = RT_NULL;
- }
- return (int)ret;
- }
- INIT_COMPONENT_EXPORT(nu_slcd_panel_init);
- /*** (C) COPYRIGHT 2019-2020 Nuvoton Technology Corp. ***/
|