123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- /*
- ******************************************************************************
- * @file HAL_LCD.c
- * @version V1.0.0
- * @date 2020
- * @brief LCD HAL module driver.
- * This file provides firmware functions to manage the following
- * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (LCD).
- * @ Initialization and de-initialization functions
- * @ IO operation functions
- * @ Peripheral Control functions
- ******************************************************************************
- */
- #include "ACM32Fxx_HAL.h"
- /*********************************************************************************
- * Function : HAL_LCD_MspInit
- * Description : Initialize the LCD MSP.
- * Input : hcan : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- __weak void HAL_LCD_MspInit(LCD_HandleTypeDef *hlcd)
- {
- /* NOTE : This function only enable lcd clk and config NVIC
- Because lcd's SEG and COM is different,so the gpio of lcd need user config self.*/
- /* Enable LCD clock */
- System_Module_Enable(EN_LCD);
- /* Enable the LCD Frame interrupt */
- hlcd->Instance->CR1 |= LCD_CR1_IE;
- NVIC_ClearPendingIRQ(LCD_IRQn);
- NVIC_SetPriority(LCD_IRQn, 5);
- NVIC_EnableIRQ(LCD_IRQn);
- }
- /*********************************************************************************
- * Function : HAL_LCD_MspDeInit
- * Description : DeInitialize the LCD MSP.
- * Input : hcan : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- void HAL_LCD_MspDeInit(LCD_HandleTypeDef *hlcd)
- {
- /* Disable LCD clock */
- System_Module_Disable(EN_LCD);
- }
- /*********************************************************************************
- * Function : HAL_LCD_Init
- * Description : Initialize the LCD.
- * Input : hcan : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- HAL_StatusTypeDef HAL_LCD_Init(LCD_HandleTypeDef *hlcd)
- {
- /* Check the parameters */
- if(!IS_LCD_PERIPH(hlcd->Instance)) return HAL_ERROR;
- if(!IS_LCD_DUTY(hlcd->Init.Duty)) return HAL_ERROR;
- if(!IS_LCD_BIAS(hlcd->Init.Bias)) return HAL_ERROR;
- if(!IS_LCD_Driving_Waveform(hlcd->Init.Driving_Waveform)) return HAL_ERROR;
- if(!IS_LCD_BiasSrc(hlcd->Init.BiasSrc)) return HAL_ERROR;
- if(!IS_LCD_DisplayMode(hlcd->Init.DisplayMode)) return HAL_ERROR;
- if(!IS_LCD_LCDFrequency(hlcd->Init.LCDFrequency)) return HAL_ERROR;
- if(!IS_LCD_BlinkEN(hlcd->Init.BlinkEN)) return HAL_ERROR;
- if(!IS_LCD_BlinkFrequency(hlcd->Init.BlinkFrequency)) return HAL_ERROR;
- /* Reset the RST_LCD */
- System_Module_Reset(RST_LCD);
- HAL_LCD_MspInit(hlcd);
- hlcd->Instance->CR0|=(LCD_CR0_LCDEN|hlcd->Init.LCDFrequency|hlcd->Init.Bias|hlcd->Init.Duty|hlcd->Init.BiasSrc|hlcd->Init.Driving_Waveform);
- hlcd->Instance->CR1|=(hlcd->Init.BlinkEN|hlcd->Init.BlinkFrequency|hlcd->Init.DisplayMode);
- if(hlcd->Init.Driving_Waveform==LCD_Driving_Waveform_A)
- {
- hlcd->Instance->CR0&=~(LCD_CR0_WSEL);
- }
- if(hlcd->Init.Duty==LCD_DUTY_STATIC)
- {
- if(!IS_LCD_StaticPower(hlcd->Init.StaticPower)) return HAL_ERROR;
- hlcd->Instance->CR0|=hlcd->Init.StaticPower;
- }
- else
- {
- hlcd->Instance->CR0&=~(LCD_CR0_STATIC);//当DUTY选择非静态时,该位必须设置为0
- }
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_LCD_DeInit
- * Description : DeInitialize the LCD.
- * Input : hcan : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- HAL_StatusTypeDef HAL_LCD_DeInit(LCD_HandleTypeDef *hlcd)
- {
- /* Check the parameters */
- if(!IS_LCD_PERIPH(hlcd->Instance)) return HAL_ERROR;
- /* Reset the CAN peripheral */
- CLEAR_BIT(hlcd->Instance->CR0, LCD_CR0_LCDEN);
- HAL_LCD_MspDeInit(hlcd);
- /* Return function status */
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_LCD_InResConfig
- * Description : Initialize the LCD When LCD BiasSrc is LCD_BiasSrc_InRes_Seg31_35_Normal or LCD_BiasSrc_InRes_Seg31_35_Cap.
- * Input : hlcd : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * LCD_InResInitStruct:LCD_InResInitTypeDef
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- HAL_StatusTypeDef HAL_LCD_InResConfig(LCD_HandleTypeDef *hlcd,LCD_InResInitTypeDef* LCD_InResInitStruct)
- {
- /* Check the parameters */
- if(!IS_LCD_PERIPH(hlcd->Instance)) return HAL_ERROR;
- /* Config when BiasSrc is Inside Resistance Mod */
- if(hlcd->Init.BiasSrc!=LCD_BiasSrc_ExRes_Seg31_35_Cap)
- {
- /* Check the parameters */
- if(!IS_LCD_BiasRes(LCD_InResInitStruct->BiasRes)) return HAL_ERROR;
- if(!IS_LCD_DriveMod(LCD_InResInitStruct->DriveMod)) return HAL_ERROR;
- if(!IS_LCD_FastCharge(LCD_InResInitStruct->FastCharge)) return HAL_ERROR;
- if(!IS_LCD_Contrast(LCD_InResInitStruct->Contrast)) return HAL_ERROR;
- /* Config LCD Contrast and Bias Resistance and DriveMod */
- hlcd->Instance->CR0|=(LCD_InResInitStruct->Contrast);
- hlcd->Instance->CR1|=(LCD_InResInitStruct->BiasRes|LCD_InResInitStruct->DriveMod);
- /* Config LCD PONTime when DriveMod is Fast Charge and Fast Charge(FCC) is Enable. */
- if(LCD_InResInitStruct->FastCharge==LCD_FastCharge_Enable && LCD_InResInitStruct->DriveMod==LCD_DriveMod_FC)
- {
- if(!IS_LCD_PONTime(LCD_InResInitStruct->PONTime)) return HAL_ERROR;
- hlcd->Instance->CR1|=(LCD_InResInitStruct->PONTime<<18);
- }
- }
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_LCD_SegComConfig
- * Description : Config the LCD SEG and COM enable/disable.
- * Input : hlcd : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * SegCom:LCD_SegComInitTypeDef
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- HAL_StatusTypeDef HAL_LCD_SegComConfig(LCD_HandleTypeDef *hlcd,LCD_SegComInitTypeDef *SegCom)
- {
- /* Check the parameters */
- if(!IS_LCD_PERIPH(hlcd->Instance)) return HAL_ERROR;
- hlcd->Instance->LCD_POEN0=SegCom->SEG0_31;
- hlcd->Instance->LCD_POEN1=SegCom->Stc_SEG32_39_COM0_8.SEG32_39_COM0_8;
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_LCD_Write
- * Description : Write LCD RAMx.
- * Input : hlcd : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * LCDRAMIndex:LCD RAM index
- * Data:The data you want to write
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- HAL_StatusTypeDef HAL_LCD_Write(LCD_HandleTypeDef *hlcd, uint32_t LCDRAMIndex, uint32_t Data)
- {
- /* Check the parameters */
- if(!IS_LCD_PERIPH(hlcd->Instance)) return HAL_ERROR;
- if(LCDRAMIndex>15) return HAL_ERROR;
- /* Wrete Data bytes to LCD RAM register */
- hlcd->Instance->LCD_RAM[LCDRAMIndex]=Data;
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_LCD_Clear
- * Description : Clear LCD RAMx.
- * Input : hlcd : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- HAL_StatusTypeDef HAL_LCD_Clear(LCD_HandleTypeDef *hlcd)
- {
- uint8_t LCDRAMIndex=0;
- /* Check the parameters */
- if(!IS_LCD_PERIPH(hlcd->Instance)) return HAL_ERROR;
- /* Clear the LCD_RAM registers */
- for(LCDRAMIndex = 0; LCDRAMIndex <= 15; LCDRAMIndex++)
- {
- hlcd->Instance->LCD_RAM[LCDRAMIndex] = 0U;
- }
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_LCD_Start_DMA
- * Description : Start lcd dma transfer
- * Input : hlcd : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * pData:The data want to transfer
- * Length:transfer Size
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- HAL_StatusTypeDef HAL_LCD_Start_DMA(LCD_HandleTypeDef *hlcd, uint32_t *pData, uint32_t Length)
- {
- /* Check the parameters */
- if(!IS_LCD_PERIPH(hlcd->Instance)) return HAL_ERROR;
- hlcd->Instance->CR1 |= LCD_CR1_DMAEN;
- if (HAL_DMA_Start_IT(hlcd->DMA_Handle,(uint32_t)pData,(uint32_t)(&hlcd->Instance->LCD_RAM[0]), Length))
- {
- return HAL_ERROR;
- }
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_LCD_Stop_DMA
- * Description : Stop lcd dma transfer
- * Input : hlcd : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * pData:The data want to transfer
- * Length:transfer Size
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- HAL_StatusTypeDef HAL_LCD_Stop_DMA(LCD_HandleTypeDef *hlcd)
- {
- HAL_StatusTypeDef status = HAL_OK;
- /* Check the parameters */
- if(!IS_LCD_PERIPH(hlcd->Instance)) return HAL_ERROR;
- hlcd->Instance->CR1 &=~ LCD_CR1_DMAEN;
- status = HAL_DMA_Abort(hlcd->DMA_Handle);
- return status;
- }
- /*********************************************************************************
- * Function : HAL_LCD_IRQHandler
- * Description : HAL_LCD_IRQHandler
- * Input : hlcd : pointer to a LCD structure that contains
- * the configuration information for LCD module
- * Output :
- * Author : CWT Data : 2020年
- **********************************************************************************/
- void HAL_LCD_IRQHandler(LCD_HandleTypeDef *hlcd)
- {
- hlcd->Instance->INTCLR &=~ (LCD_INTCLR_INTFT);
- }
|