| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- /**
- * @file wm_lcd.h
- *
- * @brief LCD Driver Module
- *
- * @author dave
- *
- * @copyright (c) 2014 Winner Microelectronics Co., Ltd.
- */
- #ifndef __WM_LCD_H
- #define __WM_LCD_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "wm_regs.h"
- #include <stdbool.h>
- /**
- * @brief LCD Register Declaration
- *
- */
- typedef struct
- {
- /** Control Register */
- __IO uint32_t CTRL;
- /** Refresh Rate Prescaler Register */
- __IO uint32_t FRAMECNT;
- __IO uint32_t COM0;
- __IO uint32_t COM1;
- __IO uint32_t COM2;
- __IO uint32_t COM3;
- __IO uint32_t COM4;
- __IO uint32_t COM5;
- __IO uint32_t COM6;
- __IO uint32_t COM7;
- /** LCD COM Control Register */
- __IO uint32_t COM_EN;
- /** LCD SEG Control Register */
- __IO uint32_t SEG_EN;
- } LCD_T;
- /** LCD base pointer */
- #define LCD ((LCD_T *)HR_LCD_REG_BASE)
- typedef enum
- {
- /** Static (2 levels) */
- BIAS_STATIC = LCD_BIAS_STATIC,
- /** 1/2 Bias (3 levels) */
- BIAS_ONEHALF = LCD_BIAS_ONEHALF,
- /** 1/3 Bias (4 levels) */
- BIAS_ONETHIRD = LCD_BIAS_ONETHIRD,
- /** 1/4 Bias (4 levels) */
- BIAS_ONEFOURTH = LCD_BIAS_ONEFOURTH,
- } LCD_BiasDef;
- typedef enum
- {
- /** VLCD 2.7v */
- VLCD27 = LCD_VLCD_27,
- /** VLCD 2.9v */
- VLCD29 = LCD_VLCD_29,
- /** VLCD 3.1v */
- VLCD31 = LCD_VLCD_31,
- /** VLCD 3.3v */
- VLCD33 = LCD_VLCD_33,
- } LCD_VlcdDef;
- typedef enum
- {
- /** Static (segments can be multiplexed with LCD_COM[0]) */
- DUTY_STATIC = LCD_DUTY_STATIC,
- /** 1/2 Duty cycle (segments can be multiplexed with LCD_COM[0:1]) */
- DUTY_ONEHALF = LCD_DUTY_ONEHALF,
- /** 1/3 Duty cycle (segments can be multiplexed with LCD_COM[0:2]) */
- DUTY_ONETHIRD = LCD_DUTY_ONETHIRD,
- /** 1/4 Duty cycle (segments can be multiplexed with LCD_COM[0:3]) */
- DUTY_ONEFOURTH = LCD_DUTY_ONEFOURTH,
- /** 1/5 Duty cycle (segments can be multiplexed with LCD_COM[0:4]) */
- DUTY_ONEFIFTH = LCD_DUTY_ONEFIFTH,
- /** 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5]) */
- DUTY_ONESIXTH = LCD_DUTY_ONESIXTH,
- /** 1/7 Duty cycle (segments can be multiplexed with LCD_COM[0:6]) */
- DUTY_ONESEVENTH = LCD_DUTY_ONESEVENTH,
- /** 1/8 Duty cycle (segments can be multiplexed with LCD_COM[0:7]) */
- DUTY_ONEEIGHTH = LCD_DUTY_ONEEIGHTH,
- } LCD_DutyDef;
- typedef struct tls_lcd_options
- {
- /** */
- bool enable;
- /** Bias configuration */
- LCD_BiasDef bias;
- /** Duty configuration */
- LCD_DutyDef duty;
- /** Vlcd configuration */
- LCD_VlcdDef vlcd;
- /** com number */
- uint8_t com_number;
- /** Fresh rate configuration */
- uint16_t fresh_rate;
- } tls_lcd_options_t;
- /**
- * @defgroup Driver_APIs Driver APIs
- * @brief Driver APIs
- */
- /**
- * @addtogroup Driver_APIs
- * @{
- */
- /**
- * @defgroup LCD_Driver_APIs LCD Driver APIs
- * @brief LCD driver APIs
- */
- /**
- * @addtogroup LCD_Driver_APIs
- * @{
- */
- /**
- * @brief Initialize LCD Frame Counter
- * @param[in] com_num Number of the com
- * @param[in] freq LCD reference refresh frequency in Hz that will be used
- */
- void tls_lcd_fresh_ratio(uint8_t com_num, uint16_t freq);
- /**
- * @brief initialize the LCD module
- *
- */
- void tls_lcd_init(tls_lcd_options_t *opts);
- /**
- * @brief Initialize LCD Frame Counter
- * @param[in] freq LCD reference refresh frequency in Hz that will be used
- *
- */
- void tls_lcd_fresh_rate(uint16_t freq);
- /**
- * @brief Turn on or clear a segment
- * @param[in] com Which COM line to update
- * @param[in] bit Bit index of which field to change
- * @param[in] enable When one will set segment, when zero will clear segment
- * @note Before this function be called, the module must have been intialized
- */
- void tls_lcd_seg_set(int com, int bit, int on_off);
- /**
- * @brief Select the voltage of LCD module
- * @param[in] vlcd This parameter can be one of the following values:
- * - \ref VLCD27
- * - \ref VLCD29
- * - \ref VLCD31
- * - \ref VLCD33
- */
- void tls_lcd_vlcd_sel(LCD_VlcdDef vlcd);
- /**
- * @brief Set the duty of LCD module
- * @param[in] duty This parameter can be one of the following values:
- * - \ref DUTY_STATIC
- * - \ref DUTY_ONEHALF
- * - \ref DUTY_ONETHIRD
- * - \ref DUTY_ONEFOURTH
- * - \ref DUTY_ONEFIFTH
- * - \ref DUTY_ONESIXTH
- * - \ref DUTY_ONESEVENTH
- * - \ref DUTY_ONEEIGHTH
- *
- */
- void tls_lcd_duty_set(LCD_DutyDef duty);
- /**
- * @brief Set the bias of LCD module
- * @param[in] duty This parameter can be one of the following values:
- * - \ref BIAS_STATIC
- * - \ref BIAS_ONEHALF
- * - \ref BIAS_ONETHIRD
- * - \ref BIAS_ONEFOURTH
- *
- */
- void tls_lcd_bias_set(LCD_BiasDef bias);
- /**
- * @brief Enable or disable clock of LCD module
- * @param[in] enable When one enable the clock of LCD module, when zero disable
- */
- #define TLS_LCD_CLK_ENABLE(enable) \
- do { \
- tls_bitband_write(HR_CLK_BASE_ADDR, HR_CLK_LCD_GATE_Pos, enable); \
- } while(0)
- /**
- * @brief Enable or disable the LCD module
- * @param[in] enable When one enable the LCD module, when zero disable
- *
- */
- #define TLS_LCD_ENABLE(enable) \
- do { \
- tls_bitband_write(HR_LCD_CR, LCD_CR_EN_Pos, enable); \
- } while(0)
- /**
- * @brief Enable or disable the LCD module
- * @param[in] enable When one close LCD module, when zero open the LCD module
- *
- */
- #define TLS_LCD_POWERDOWM(enable) \
- do { \
- tls_bitband_write(HR_LCD_CR, LCD_CR_PD_Pos, enable); \
- } while(0)
- /**
- * @}
- */
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- #endif
- /*** (C) COPYRIGHT 2014 Winner Microelectronics Co., Ltd. ***/
|