123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- /**
- ******************************************************************************
- * @file lib_lcd.c
- * @author Application Team
- * @version V1.1.0
- * @date 2019-10-28
- * @brief LCD library.
- ******************************************************************************
- * @attention
- *
- ******************************************************************************
- */
- #include "lib_lcd.h"
- #include "lib_LoadNVR.h"
- //registers default reset values
- #define LCD_CTRL_RSTValue 0
- #define LCD_CTRL2_RSTValue 0
- #define LCD_SEGCTRL0_RSTValue 0
- #define LCD_SEGCTRL1_RSTValue 0
- #define LCD_SEGCTRL2_RSTValue 0
- /* COMx IO */
- const LCD_COMIO lcd_comio[] =
- {
- {&GPIOD->OEN, GPIO_Pin_0},
- {&GPIOD->OEN, GPIO_Pin_1},
- {&GPIOD->OEN, GPIO_Pin_2},
- {&GPIOD->OEN, GPIO_Pin_3},
- {&GPIOD->OEN, GPIO_Pin_4},
- {&GPIOD->OEN, GPIO_Pin_5},
- {&GPIOD->OEN, GPIO_Pin_6},
- {&GPIOD->OEN, GPIO_Pin_7},
- };
- /**
- * @brief Initializes LCD.
- * @param InitStruct: LCD configuration.
- Type:
- LCD_TYPE_4COM
- LCD_TYPE_6COM
- LCD_TYPE_8COM
- Drv:
- LCD_DRV_300
- LCD_DRV_600
- LCD_DRV_150
- LCD_DRV_200
- FRQ:
- LCD_FRQ_64H
- LCD_FRQ_128H
- LCD_FRQ_256H
- LCD_FRQ_512H
- SWPR: Frame buffer switch period(0.5 sec * (SWPR + 1)).
- FBMODE:
- LCD_FBMODE_BUFA
- LCD_FBMODE_BUFAB
- LCD_FBMODE_BUFABLANK
- BKFILL:
- LCD_BKFILL_1
- LCD_BKFILL_0
- * @retval None
- */
- void LCD_Init(LCD_InitType *InitStruct)
- {
- uint32_t tmp_reg1, tmp_reg2;
- /* Check parameters */
- assert_parameters(IS_LCD_TYPE(InitStruct->Type));
- assert_parameters(IS_LCD_DRV(InitStruct->Drv));
- assert_parameters(IS_LCD_FRQ(InitStruct->FRQ));
- assert_parameters(IS_LCD_SWPR(InitStruct->SWPR));
- assert_parameters(IS_LCD_FBMODE(InitStruct->FBMODE));
- assert_parameters(IS_LCD_BKFILL(InitStruct->BKFILL));
-
- tmp_reg1 = LCD->CTRL;
- tmp_reg2 = LCD->CTRL2;
- tmp_reg1 &= ~(LCD_CTRL_TYPE\
- |LCD_CTRL_DRV\
- |LCD_CTRL_FRQ);
- tmp_reg1 |= (InitStruct->Type\
- |InitStruct->Drv\
- |InitStruct->FRQ);
- tmp_reg2 &= ~(LCD_CTRL2_SWPR\
- |LCD_CTRL2_FBMODE\
- |LCD_CTRL2_BKFILL);
- tmp_reg2 |= ((InitStruct->SWPR << 8)\
- |InitStruct->FBMODE\
- |InitStruct->BKFILL);
- LCD->CTRL = tmp_reg1;
- LCD->CTRL2 = tmp_reg2;
- }
- /**
- * @brief Fills each LCD_InitStruct member with its default value.
- * @param LCD_InitStruct: pointer to an LCD_InitType structure which will be initialized.
- * @retval None
- */
- void LCD_StructInit(LCD_InitType *LCD_InitStruct)
- {
- /*--------------- Reset LCD init structure parameters values ---------------*/
- /* Initialize the BKFILL member */
- LCD_InitStruct->BKFILL = LCD_BKFILL_0;
- /* Initialize the Drv member */
- LCD_InitStruct->Drv = LCD_DRV_300;
- /* Initialize the FBMODE member */
- LCD_InitStruct->FBMODE = LCD_FBMODE_BUFA;
- /* Initialize the FRQ member */
- LCD_InitStruct->FRQ = LCD_FRQ_64H;
- /* Initialize the SWPR member */
- LCD_InitStruct->SWPR = 0;
- /* Initialize the Type member */
- LCD_InitStruct->Type = LCD_TYPE_4COM;
- }
- /**
- * @brief Initializes the LCD registers to their default reset values.
- * @param None
- * @retval None
- */
- void LCD_DeInit(void)
- {
- LCD->CTRL &= ~LCD_CTRL_EN;
-
- LCD->CTRL = LCD_CTRL_RSTValue;
- LCD->CTRL2 = LCD_CTRL2_RSTValue;
- LCD->SEGCTRL0 = LCD_SEGCTRL0_RSTValue;
- LCD->SEGCTRL1 = LCD_SEGCTRL1_RSTValue;
- LCD->SEGCTRL2 = LCD_SEGCTRL2_RSTValue;
- }
- /**
- * @brief Enables or disables LCD controller.
- * @param IOInitType: LCD SEG and COM configuration.
- SegCtrl0:
- SegCtrl1:
- 0~0xFFFFFFFF
- SegCtrl2:
- 0~0xFFFF
- COMMode:
- LCD_TYPE_4COM
- LCD_TYPE_6COM
- LCD_TYPE_8COM
- NewState:
- ENABLE
- DISABLE
- * @retval None
- */
- void LCD_Cmd(LCD_IOInitType *IOInitType, uint32_t NewState)
- {
- /* Check parameters */
- assert_parameters(IS_FUNCTIONAL_STATE(NewState));
- assert_parameters(IS_LCD_COMMOD(IOInitType->COMMode));
- if (NewState == ENABLE)
- {
- LCD->SEGCTRL0 = IOInitType->SegCtrl0;
- LCD->SEGCTRL1 = IOInitType->SegCtrl1;
- LCD->SEGCTRL2 = IOInitType->SegCtrl2;
-
- /* COMs' IO configuration : forbidden */
- *lcd_comio[0].GPIO |= lcd_comio[0].Pin;
- *(lcd_comio[0].GPIO+1) &= ~lcd_comio[0].Pin;
- *lcd_comio[1].GPIO |= lcd_comio[1].Pin;
- *(lcd_comio[1].GPIO+1) &= ~lcd_comio[1].Pin;
- *lcd_comio[2].GPIO |= lcd_comio[2].Pin;
- *(lcd_comio[2].GPIO+1) &= ~lcd_comio[2].Pin;
- *lcd_comio[3].GPIO |= lcd_comio[3].Pin;
- *(lcd_comio[3].GPIO+1) &= ~lcd_comio[3].Pin;
- if (IOInitType->COMMode & 2UL)
- {
- *lcd_comio[4].GPIO |= lcd_comio[4].Pin;
- *(lcd_comio[4].GPIO+1) &= ~lcd_comio[4].Pin;
- *lcd_comio[5].GPIO |= lcd_comio[5].Pin;
- *(lcd_comio[5].GPIO+1) &= ~lcd_comio[5].Pin;
- }
- if (IOInitType->COMMode & 4UL)
- {
- *lcd_comio[6].GPIO |= lcd_comio[6].Pin;
- *(lcd_comio[6].GPIO+1) &= ~lcd_comio[6].Pin;
- *lcd_comio[7].GPIO |= lcd_comio[7].Pin;
- *(lcd_comio[7].GPIO+1) &= ~lcd_comio[7].Pin;
- }
- /* Enable LCD */
- LCD->CTRL |= LCD_CTRL_EN;
- }
- else
- {
- /* Disable LCD */
- LCD->CTRL &= ~LCD_CTRL_EN;
- LCD->SEGCTRL0 = IOInitType->SegCtrl0;
- LCD->SEGCTRL1 = IOInitType->SegCtrl1;
- LCD->SEGCTRL2 = IOInitType->SegCtrl2;
- /* COMs' IO configuration : ouput low */
- *(lcd_comio[0].GPIO+2) &= ~lcd_comio[0].Pin;
- *lcd_comio[0].GPIO &= ~lcd_comio[0].Pin;
- *(lcd_comio[1].GPIO+2) &= ~lcd_comio[1].Pin;
- *lcd_comio[1].GPIO &= ~lcd_comio[1].Pin;
- *(lcd_comio[2].GPIO+2) &= ~lcd_comio[2].Pin;
- *lcd_comio[2].GPIO &= ~lcd_comio[2].Pin;
- *(lcd_comio[3].GPIO+2) &= ~lcd_comio[3].Pin;
- *lcd_comio[3].GPIO &= ~lcd_comio[3].Pin;
- if (IOInitType->COMMode & 2UL)
- {
- *(lcd_comio[4].GPIO+2) &= ~lcd_comio[4].Pin;
- *lcd_comio[4].GPIO &= ~lcd_comio[4].Pin;
- *(lcd_comio[5].GPIO+2) &= ~lcd_comio[5].Pin;
- *lcd_comio[5].GPIO &= ~lcd_comio[5].Pin;
- }
- if (IOInitType->COMMode & 4UL)
- {
- *(lcd_comio[6].GPIO+2) &= ~lcd_comio[6].Pin;
- *lcd_comio[6].GPIO &= ~lcd_comio[6].Pin;
- *(lcd_comio[7].GPIO+2) &= ~lcd_comio[7].Pin;
- *lcd_comio[7].GPIO &= ~lcd_comio[7].Pin;
- }
- }
- }
- /**
- * @brief Configures LCD BIAS mode.
- * @param BiasSelection:
- LCD_BMODE_DIV3
- LCD_BMODE_DIV4
- * @retval None
- */
- void LCD_BiasModeConfig(uint32_t BiasSelection)
- {
- uint32_t tmp;
-
- assert_parameters(IS_LCD_BMODE(BiasSelection));
-
- tmp = ANA->REG6;
- tmp &= ~ANA_REG6_LCDBMODE;
- tmp |= BiasSelection;
- ANA->REG6 = tmp;
- }
- /*********************************** END OF FILE ******************************/
|