CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Include/ciu32l051_std_lcd.h

735 lines
33 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************************/
/**
* @file ciu32l051_std_lcd.h
* @author MCU Ecosystem Development Team
* @brief LCD STD库驱动头文件。
* 提供LCD 相关的STD库操作函数声明、数据类型以及常量的定义。
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/* 避免头文件重复引用 */
#ifndef CIU32L051_STD_LCD_H
#define CIU32L051_STD_LCD_H
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @defgroup LCD LCD
* @brief 液晶显示控制器的STD库驱动
* @{
*/
/************************************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std_common.h"
/*-----------------------------------------type define------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup LCD_Types LCD Types
* @brief LCD 数据类型定义
* @{
*
*/
/************************************************************************************************/
/**
* @brief LCD 初始化结构体定义
*/
typedef struct
{
uint32_t bias; /**< 偏置电压的设置
@arg LCD_BIAS_1_3... */
uint32_t duty; /**< 占空比的设置
@arg LCD_DUTY_1_4... */
uint32_t prescaler; /**< 时钟源预分频器的设置
@arg LCD_PRESCALER_1... */
uint32_t divider; /**< 时钟源分频器的设置
@arg LCD_DIVIDER_16... */
uint32_t driver_mode; /**< 驱动模式配置
@arg LCD_DRIVER_MODE_CHARGE_PUMP... */
uint32_t vlcd_voltage; /**< VLCD输出电压配置
@arg LCD_INNER_RESISTER_1_000_VDD...
@arg LCD_CHAGE_PUMP_1_3_BIAS_2_55V...
@arg LCD_CHAGE_PUMP_1_4_BIAS_2_60V...*/
uint32_t high_drive; /**< 驱动能力的设置
@arg LCD_HIGH_DRIVE... */
uint32_t pulse_on_duration; /**< 脉冲持续时间
@arg LCD_PULSE_ON_DURATION_0... */
uint32_t mux_segment; /**< 区段多路复用的使能
@arg LCD_MUX_SEGMENT_ENABLE...
@note 1/6 和 1/4duty需使能区段多路复用
1/8duty为无关项 */
}std_lcd_init_t;
/**
* @}
*/
/*--------------------------------------------define--------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup LCD_Constants LCD Constants
* @brief LCD 常量定义及宏定义
* @{
*/
/************************************************************************************************/
/* LCD驱动模式 */
#define LCD_DRIVER_MODE_CHARGE_PUMP LCD_CR_MDSET_CHARGE_PUMP /**< 电荷泵模式 */
#define LCD_DRIVER_MODE_INNER_RESISTER LCD_CR_MDSET_INNER_RES /**< 片内电阻分压模式 */
#define LCD_DRIVER_MODE_OUTER_CAPACITY LCD_CR_MDSET_OUTER_CAP /**< 片外电容分压模式 */
/* LCD电荷泵和片外电容分压模式时钟分频 */
#define LCD_CPCLK_DIV1 LCD_CR_CPDIV_DIV1 /**< 不分频 */
#define LCD_CPCLK_DIV2 LCD_CR_CPDIV_DIV2 /**< 2分频 */
#define LCD_CPCLK_DIV4 LCD_CR_CPDIV_DIV4 /**< 4分频 */
#define LCD_CPCLK_DIV8 LCD_CR_CPDIV_DIV8 /**< 8分频 */
#define LCD_CPCLK_DIV16 LCD_CR_CPDIV_DIV16 /**< 16分频 */
#define LCD_CPCLK_DIV32 LCD_CR_CPDIV_DIV32 /**< 32分频 */
#define LCD_CPCLK_DIV64 LCD_CR_CPDIV_DIV64 /**< 64分频 */
#define LCD_CPCLK_DIV128 LCD_CR_CPDIV_DIV128 /**< 128分频 */
/* LCD外设区段多路复用 */
#define LCD_MUX_SEGMENT_DISABLE (0x00000000U) /**< SEG 区段多路复用禁止 */
#define LCD_MUX_SEGMENT_ENABLE LCD_CR_MUX_SEG /**< SEG 区段多路复用使能 */
/* LCD外设偏置 */
#define LCD_BIAS_1_3 LCD_CR_BIAS_1_3 /**< 1/3 偏置电压 */
#define LCD_BIAS_1_4 LCD_CR_BIAS_1_4 /**< 1/4 偏置电压 */
/* LCD外设占空比 */
#define LCD_DUTY_1_4 LCD_CR_DUTY_1_4 /**< 1/4 占空比 */
#define LCD_DUTY_1_6 LCD_CR_DUTY_1_6 /**< 1/6 占空比 */
#define LCD_DUTY_1_8 LCD_CR_DUTY_1_8 /**< 1/8 占空比 */
/* 外设时钟源预分频器 */
#define LCD_PRESCALER_1 LCD_FCR_PS_1 /**< ck_ps = LCDCLK */
#define LCD_PRESCALER_2 LCD_FCR_PS_2 /**< ck_ps = LCDCLK/2 */
#define LCD_PRESCALER_4 LCD_FCR_PS_4 /**< ck_ps = LCDCLK/4 */
#define LCD_PRESCALER_8 LCD_FCR_PS_8 /**< ck_ps = LCDCLK/8 */
#define LCD_PRESCALER_16 LCD_FCR_PS_16 /**< ck_ps = LCDCLK/16 */
#define LCD_PRESCALER_32 LCD_FCR_PS_32 /**< ck_ps = LCDCLK/32 */
#define LCD_PRESCALER_64 LCD_FCR_PS_64 /**< ck_ps = LCDCLK/64 */
#define LCD_PRESCALER_128 LCD_FCR_PS_128 /**< ck_ps = LCDCLK/128 */
/* LCD外设时钟源分频器 */
#define LCD_DIVIDER_16 LCD_FCR_DIV16 /**< ck_div = CLKPS/16 */
#define LCD_DIVIDER_17 LCD_FCR_DIV17 /**< ck_div = CLKPS/17 */
#define LCD_DIVIDER_18 LCD_FCR_DIV18 /**< ck_div = CLKPS/18 */
#define LCD_DIVIDER_19 LCD_FCR_DIV19 /**< ck_div = CLKPS/19 */
#define LCD_DIVIDER_20 LCD_FCR_DIV20 /**< ck_div = CLKPS/20 */
#define LCD_DIVIDER_21 LCD_FCR_DIV21 /**< ck_div = CLKPS/21 */
#define LCD_DIVIDER_22 LCD_FCR_DIV22 /**< ck_div = CLKPS/22 */
#define LCD_DIVIDER_23 LCD_FCR_DIV23 /**< ck_div = CLKPS/23 */
#define LCD_DIVIDER_24 LCD_FCR_DIV24 /**< ck_div = CLKPS/24 */
#define LCD_DIVIDER_25 LCD_FCR_DIV25 /**< ck_div = CLKPS/25 */
#define LCD_DIVIDER_26 LCD_FCR_DIV26 /**< ck_div = CLKPS/26 */
#define LCD_DIVIDER_27 LCD_FCR_DIV27 /**< ck_div = CLKPS/27 */
#define LCD_DIVIDER_28 LCD_FCR_DIV28 /**< ck_div = CLKPS/28 */
#define LCD_DIVIDER_29 LCD_FCR_DIV29 /**< ck_div = CLKPS/29 */
#define LCD_DIVIDER_30 LCD_FCR_DIV30 /**< ck_div = CLKPS/30 */
#define LCD_DIVIDER_31 LCD_FCR_DIV31 /**< ck_div = CLKPS/31 */
/* LCD外设闪烁模式 */
#define LCD_BLINK_MODE_OFF LCD_FCR_MODE_OFF /**< 禁止闪烁 */
#define LCD_BLINK_MODE_SEG0_COM0 LCD_FCR_MODE_SEG0_COM0 /**< 在SEG[0], COM[0] 使能闪烁(1个像素) */
#define LCD_BLINK_MODE_SEG0_ALLCOM LCD_FCR_MODE_SEG0_ALLCOM /**< 在SEG[0]所有COM 使能闪烁(最多8个像素取决于占空比) */
#define LCD_BLINK_MODE_ALLSEG_ALLCOM LCD_FCR_MODE_ALLSEG_ALLCOM /**< 在所有SEG所有COM 使能闪烁(所有像素) */
/* LCD外设闪烁频率 */
#define LCD_BLINK_FREQUENCY_DIV8 LCD_FCR_BLINKF_DIV8 /**< 闪烁频率 F = ck_div/8 */
#define LCD_BLINK_FREQUENCY_DIV16 LCD_FCR_BLINKF_DIV16 /**< 闪烁频率 F = ck_div/16 */
#define LCD_BLINK_FREQUENCY_DIV32 LCD_FCR_BLINKF_DIV32 /**< 闪烁频率 F = ck_div/32 */
#define LCD_BLINK_FREQUENCY_DIV64 LCD_FCR_BLINKF_DIV64 /**< 闪烁频率 F = ck_div/64 */
#define LCD_BLINK_FREQUENCY_DIV128 LCD_FCR_BLINKF_DIV128 /**< 闪烁频率 F = ck_div/128 */
#define LCD_BLINK_FREQUENCY_DIV256 LCD_FCR_BLINKF_DIV256 /**< 闪烁频率 F = ck_div/256 */
#define LCD_BLINK_FREQUENCY_DIV512 LCD_FCR_BLINKF_DIV512 /**< 闪烁频率 F = ck_div/512 */
#define LCD_BLINK_FREQUENCY_DIV1024 LCD_FCR_BLINKF_DIV1024 /**< 闪烁频率 F = ck_div/1024 */
/* VLCD输出电压档位适用于电荷泵模式1/3 BIAS */
#define LCD_CHAGE_PUMP_1_3_BIAS_2_55V LCD_FCR_CC_LV0 /**< VLCD电压档位0 2.55V */
#define LCD_CHAGE_PUMP_1_3_BIAS_2_70V LCD_FCR_CC_LV1 /**< VLCD电压档位1 2.70V */
#define LCD_CHAGE_PUMP_1_3_BIAS_2_85V LCD_FCR_CC_LV2 /**< VLCD电压档位2 2.85V */
#define LCD_CHAGE_PUMP_1_3_BIAS_3_00V LCD_FCR_CC_LV3 /**< VLCD电压档位3 3.00V */
#define LCD_CHAGE_PUMP_1_3_BIAS_3_15V LCD_FCR_CC_LV4 /**< VLCD电压档位4 3.15V */
#define LCD_CHAGE_PUMP_1_3_BIAS_3_30V LCD_FCR_CC_LV5 /**< VLCD电压档位5 3.30V */
#define LCD_CHAGE_PUMP_1_3_BIAS_3_45V LCD_FCR_CC_LV6 /**< VLCD电压档位6 3.45V */
#define LCD_CHAGE_PUMP_1_3_BIAS_3_60V LCD_FCR_CC_LV7 /**< VLCD电压档位7 3.60V */
#define LCD_CHAGE_PUMP_1_3_BIAS_3_75V LCD_FCR_CC_LV8 /**< VLCD电压档位8 3.75V */
#define LCD_CHAGE_PUMP_1_3_BIAS_3_90V LCD_FCR_CC_LV9 /**< VLCD电压档位9 3.90V */
#define LCD_CHAGE_PUMP_1_3_BIAS_4_05V LCD_FCR_CC_LV10 /**< VLCD电压档位10 4.05V */
#define LCD_CHAGE_PUMP_1_3_BIAS_4_20V LCD_FCR_CC_LV11 /**< VLCD电压档位11 4.20V */
#define LCD_CHAGE_PUMP_1_3_BIAS_4_35V LCD_FCR_CC_LV12 /**< VLCD电压档位12 4.35V */
#define LCD_CHAGE_PUMP_1_3_BIAS_4_50V LCD_FCR_CC_LV13 /**< VLCD电压档位13 4.50V */
#define LCD_CHAGE_PUMP_1_3_BIAS_4_65V LCD_FCR_CC_LV14 /**< VLCD电压档位14 4.65V */
#define LCD_CHAGE_PUMP_1_3_BIAS_4_80V LCD_FCR_CC_LV15 /**< VLCD电压档位15 4.80V */
#define LCD_CHAGE_PUMP_1_3_BIAS_4_95V LCD_FCR_CC_LV16 /**< VLCD电压档位16 4.95V */
#define LCD_CHAGE_PUMP_1_3_BIAS_5_10V LCD_FCR_CC_LV17 /**< VLCD电压档位17 5.10V */
#define LCD_CHAGE_PUMP_1_3_BIAS_5_25V LCD_FCR_CC_LV18 /**< VLCD电压档位18 5.25V */
/* VLCD输出电压档位适用于电荷泵模式1/4 BIAS */
#define LCD_CHAGE_PUMP_1_4_BIAS_2_60V LCD_FCR_CC_LV0 /**< VLCD电压档位0 2.60V */
#define LCD_CHAGE_PUMP_1_4_BIAS_2_80V LCD_FCR_CC_LV1 /**< VLCD电压档位1 2.80V */
#define LCD_CHAGE_PUMP_1_4_BIAS_3_00V LCD_FCR_CC_LV2 /**< VLCD电压档位2 3.00V */
#define LCD_CHAGE_PUMP_1_4_BIAS_3_20V LCD_FCR_CC_LV3 /**< VLCD电压档位3 3.20V */
#define LCD_CHAGE_PUMP_1_4_BIAS_3_40V LCD_FCR_CC_LV4 /**< VLCD电压档位4 3.40V */
#define LCD_CHAGE_PUMP_1_4_BIAS_3_60V LCD_FCR_CC_LV5 /**< VLCD电压档位5 3.60V */
#define LCD_CHAGE_PUMP_1_4_BIAS_3_80V LCD_FCR_CC_LV6 /**< VLCD电压档位6 3.80V */
#define LCD_CHAGE_PUMP_1_4_BIAS_4_00V LCD_FCR_CC_LV7 /**< VLCD电压档位7 4.00V */
#define LCD_CHAGE_PUMP_1_4_BIAS_4_20V LCD_FCR_CC_LV8 /**< VLCD电压档位8 4.20V */
#define LCD_CHAGE_PUMP_1_4_BIAS_4_40V LCD_FCR_CC_LV9 /**< VLCD电压档位9 4.40V */
#define LCD_CHAGE_PUMP_1_4_BIAS_4_60V LCD_FCR_CC_LV10 /**< VLCD电压档位10 4.60V */
#define LCD_CHAGE_PUMP_1_4_BIAS_4_80V LCD_FCR_CC_LV11 /**< VLCD电压档位11 4.80V */
#define LCD_CHAGE_PUMP_1_4_BIAS_5_00V LCD_FCR_CC_LV12 /**< VLCD电压档位12 5.00V */
#define LCD_CHAGE_PUMP_1_4_BIAS_5_20V LCD_FCR_CC_LV13 /**< VLCD电压档位13 5.20V */
/* VLCD输出电压档位用于片内电阻分压模式高驱 */
#define LCD_INNER_RESISTER_0_548_VDD LCD_FCR_CC_LV0 /**< VLCD电压档位0 0.548*VDD */
#define LCD_INNER_RESISTER_0_566_VDD LCD_FCR_CC_LV1 /**< VLCD电压档位1 0.566*VDD */
#define LCD_INNER_RESISTER_0_584_VDD LCD_FCR_CC_LV2 /**< VLCD电压档位2 0.584*VDD */
#define LCD_INNER_RESISTER_0_602_VDD LCD_FCR_CC_LV3 /**< VLCD电压档位3 0.602*VDD */
#define LCD_INNER_RESISTER_0_624_VDD LCD_FCR_CC_LV4 /**< VLCD电压档位4 0.624*VDD */
#define LCD_INNER_RESISTER_0_646_VDD LCD_FCR_CC_LV5 /**< VLCD电压档位5 0.646*VDD */
#define LCD_INNER_RESISTER_0_670_VDD LCD_FCR_CC_LV6 /**< VLCD电压档位6 0.670*VDD */
#define LCD_INNER_RESISTER_0_694_VDD LCD_FCR_CC_LV7 /**< VLCD电压档位7 0.694*VDD */
#define LCD_INNER_RESISTER_0_722_VDD LCD_FCR_CC_LV8 /**< VLCD电压档位8 0.722*VDD */
#define LCD_INNER_RESISTER_0_752_VDD LCD_FCR_CC_LV9 /**< VLCD电压档位9 0.752*VDD */
#define LCD_INNER_RESISTER_0_786_VDD LCD_FCR_CC_LV10 /**< VLCD电压档位10 0.786*VDD */
#define LCD_INNER_RESISTER_0_820_VDD LCD_FCR_CC_LV11 /**< VLCD电压档位11 0.820*VDD */
#define LCD_INNER_RESISTER_0_860_VDD LCD_FCR_CC_LV12 /**< VLCD电压档位12 0.860*VDD */
#define LCD_INNER_RESISTER_0_902_VDD LCD_FCR_CC_LV13 /**< VLCD电压档位13 0.902*VDD */
#define LCD_INNER_RESISTER_0_950_VDD LCD_FCR_CC_LV14 /**< VLCD电压档位14 0.950*VDD */
#define LCD_INNER_RESISTER_1_000_VDD LCD_FCR_CC_LV15 /**< VLCD电压档位15 1.000*VDD */
/* LCD外设死区时间 */
#define LCD_DEAD_TIME_0 LCD_FCR_DEAD_0 /**< 无死区 */
#define LCD_DEAD_TIME_1 LCD_FCR_DEAD_1 /**< 死区时间1个ck_div */
#define LCD_DEAD_TIME_2 LCD_FCR_DEAD_2 /**< 死区时间2个ck_div */
#define LCD_DEAD_TIME_3 LCD_FCR_DEAD_3 /**< 死区时间3个ck_div */
#define LCD_DEAD_TIME_4 LCD_FCR_DEAD_4 /**< 死区时间4个ck_div */
#define LCD_DEAD_TIME_5 LCD_FCR_DEAD_5 /**< 死区时间5个ck_div */
#define LCD_DEAD_TIME_6 LCD_FCR_DEAD_6 /**< 死区时间6个ck_div */
#define LCD_DEAD_TIME_7 LCD_FCR_DEAD_7 /**< 死区时间7个ck_div */
/* LCD外设脉冲持续时间 */
#define LCD_PULSE_ON_DURATION_0 LCD_FCR_PON_0 /**< 脉冲持续时间 T = 0 */
#define LCD_PULSE_ON_DURATION_1 LCD_FCR_PON_1 /**< 脉冲持续时间 T = 1/ck_ps */
#define LCD_PULSE_ON_DURATION_2 LCD_FCR_PON_2 /**< 脉冲持续时间 T = 2/ck_ps */
#define LCD_PULSE_ON_DURATION_3 LCD_FCR_PON_3 /**< 脉冲持续时间 T = 3/ck_ps */
#define LCD_PULSE_ON_DURATION_4 LCD_FCR_PON_4 /**< 脉冲持续时间 T = 4/ck_ps */
#define LCD_PULSE_ON_DURATION_5 LCD_FCR_PON_5 /**< 脉冲持续时间 T = 5/ck_ps */
#define LCD_PULSE_ON_DURATION_6 LCD_FCR_PON_6 /**< 脉冲持续时间 T = 6/ck_ps */
#define LCD_PULSE_ON_DURATION_7 LCD_FCR_PON_7 /**< 脉冲持续时间 T = 7/ck_ps */
#define LCD_PULSE_ON_DURATION_8 LCD_FCR_PON_8 /**< 脉冲持续时间 T = 8/ck_ps */
#define LCD_PULSE_ON_DURATION_9 LCD_FCR_PON_9 /**< 脉冲持续时间 T = 9/ck_ps */
#define LCD_PULSE_ON_DURATION_10 LCD_FCR_PON_10 /**< 脉冲持续时间 T = 10/ck_ps */
#define LCD_PULSE_ON_DURATION_11 LCD_FCR_PON_11 /**< 脉冲持续时间 T = 11/ck_ps */
#define LCD_PULSE_ON_DURATION_12 LCD_FCR_PON_12 /**< 脉冲持续时间 T = 12/ck_ps */
#define LCD_PULSE_ON_DURATION_13 LCD_FCR_PON_13 /**< 脉冲持续时间 T = 13/ck_ps */
#define LCD_PULSE_ON_DURATION_14 LCD_FCR_PON_14 /**< 脉冲持续时间 T = 14/ck_ps */
#define LCD_PULSE_ON_DURATION_15 LCD_FCR_PON_15 /**< 脉冲持续时间 T = 15/ck_ps */
/* LCD外设驱动能力 */
#define LCD_LOW_DRIVE (0x00000000U) /**< 高阻抗弱驱动 */
#define LCD_HIGH_DRIVE LCD_FCR_HD /**< 低阻抗强驱动 */
/* LCD防极化 */
#define LCD_ANTIPOLAR_FLOATING (0x00000000U) /**< COM和SEG引脚输出浮空 */
#define LCD_ANTIPOLAR_GND LCD_FCR_ANTI_POLAR /**< COM和SEG引脚输出连接到GND */
/* LCD COM和SEG输出控制 */
#define LCD_SCOC_GND (0x00000000U) /**< COM和SEG引脚输出连接到GND */
#define LCD_SCOC_OUT (LCD_FCR_SCOC) /**< COM和SEG引脚根据偏置和占空比配置输出 */
#define LCD_DRIVER_VOLTAGE_DELAY (50U) /**< LCD输出驱动电压稳定时间 */
/* LCD外设中断标志 */
#define LCD_INTERRUPT_SOF LCD_FCR_SOFIE /**< 帧起始中断 */
/* LCD状态标志 */
#define LCD_FLAG_ENS LCD_SR_ENS /**< 使能状态标志 */
#define LCD_FLAG_SOF LCD_SR_SOF /**< 帧起始状态标志 */
/* LCD状态标志 */
#define LCD_CLEAR_FLAG_SOF LCD_CLR_SOFC /**< 清零帧起始状态标志 */
/* LCD_RAM显示存储器 */
#define LCD_RAM_REGISTER0 (0x00000000U) /**< LCD RAM 存储器 0 */
#define LCD_RAM_REGISTER1 (0x00000001U) /**< LCD RAM 存储器 1 */
#define LCD_RAM_REGISTER2 (0x00000002U) /**< LCD RAM 存储器 2 */
#define LCD_RAM_REGISTER3 (0x00000003U) /**< LCD RAM 存储器 3 */
#define LCD_RAM_REGISTER4 (0x00000004U) /**< LCD RAM 存储器 4 */
#define LCD_RAM_REGISTER5 (0x00000005U) /**< LCD RAM 存储器 5 */
#define LCD_RAM_REGISTER6 (0x00000006U) /**< LCD RAM 存储器 6 */
#define LCD_RAM_REGISTER7 (0x00000007U) /**< LCD RAM 存储器 7 */
#define LCD_RAM_REGISTER8 (0x00000008U) /**< LCD RAM 存储器 8 */
#define LCD_RAM_REGISTER9 (0x00000009U) /**< LCD RAM 存储器 9 */
/**
* @}
*/
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup LCD_External_Functions LCD External Functions
* @brief LCD对外函数
* @{
*
*/
/************************************************************************************************/
/**
* @brief LCD 外设使能
* @retval 无
*/
__STATIC_INLINE void std_lcd_enable(void)
{
LCD->CR |= (LCD_CR_LCDEN);
}
/**
* @brief LCD 外设禁止
* @note 禁止外设后,输出驱动波形在当前帧结束后停止输出
* @retval 无
*/
__STATIC_INLINE void std_lcd_disable(void)
{
LCD->CR &= (~LCD_CR_LCDEN);
}
/**
* @brief 选择 LCD 占空比
* @param duty LCD占空比选择
* @arg LCD_DUTY_1_4
* @arg LCD_DUTY_1_6
* @arg LCD_DUTY_1_8
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_duty(uint32_t duty)
{
MODIFY_REG(LCD->CR, LCD_CR_DUTY, (duty));
}
/**
* @brief 获取LCD占空比
* @retval uint32_t LCD占空比
* @arg LCD_DUTY_1_4
* @arg LCD_DUTY_1_6
* @arg LCD_DUTY_1_8
*/
__STATIC_INLINE uint32_t std_lcd_get_duty(void)
{
return (LCD->CR & LCD_CR_DUTY);
}
/**
* @brief 选择LCD 偏置
* @param bias LCD偏置
* @arg LCD_BIAS_1_3
* @arg LCD_BIAS_1_4
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_bias(uint32_t bias)
{
MODIFY_REG(LCD->CR, LCD_CR_BIAS, (bias));
}
/**
* @brief 获取LCD偏置
* @retval uint32_t LCD偏置
* @arg LCD_BIAS_1_3
* @arg LCD_BIAS_1_4
*/
__STATIC_INLINE uint32_t std_lcd_get_bias(void)
{
return (LCD->CR & LCD_CR_BIAS);
}
/**
* @brief 选择LCD驱动模式
* @param driver_mode LCD驱动模式
* @arg LCD_DRIVER_MODE_CHARGE_PUMP
* @arg LCD_DRIVER_MODE_INNER_RESISTER
* @arg LCD_DRIVER_MODE_OUTER_CAPACITY
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_driver_mode(uint32_t driver_mode)
{
MODIFY_REG(LCD->CR, LCD_CR_MDSET, (driver_mode));
}
/**
* @brief 获取LCD驱动模式
* @retval uint32_t LCD驱动模式
* @arg LCD_DRIVER_MODE_CHARGE_PUMP
* @arg LCD_DRIVER_MODE_INNER_RESISTER
* @arg LCD_DRIVER_MODE_OUTER_CAPACITY
*/
__STATIC_INLINE uint32_t std_lcd_get_driver_mode(void)
{
return (LCD->CR & LCD_CR_MDSET);
}
/**
* @brief 配置LCD显示帧速率
* @param clock_prescaler LCD时钟预分频
* @arg LCD_PRESCALER_1
* @arg ...
* @arg LCD_PRESCALER_128
*
* @param clock_divider LCD时钟分频
* @arg LCD_DIVIDER_16
* @arg ...
* @arg LCD_DIVIDER_31
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_display_frame_frequency(uint32_t clock_prescaler, uint32_t clock_divider)
{
MODIFY_REG(LCD->FCR, (LCD_FCR_PS | LCD_FCR_DIV), ((clock_prescaler) | (clock_divider)));
}
/**
* @brief 设置LCD电荷泵和片外电容分压模式时钟分频
* @param clock_div 时钟分频系数
* @arg LCD_CPCLK_DIV1
* @arg ...
* @arg LCD_CPCLK_DIV128
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_chargepump_clock(uint32_t clock_div)
{
MODIFY_REG(LCD->CR, LCD_CR_CPDIV, (clock_div));
}
/**
* @brief 获取LCD电荷泵和片外电容分压模式时钟分频
* @retval uint32_t 时钟分频系数
* @arg LCD_CPCLK_DIV1
* @arg ...
* @arg LCD_CPCLK_DIV128
*
*/
__STATIC_INLINE uint32_t std_lcd_get_chargepump_clock(void)
{
return (LCD->CR & LCD_CR_CPDIV);
}
/**
* @brief LCD 区段多路复用配置
* @param mux_seg LCD区段多路复用配置
* @arg LCD_MUX_SEGMENT_ENABLE
* @arg LCD_MUX_SEGMENT_DISABLE
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_mux_seg(uint32_t mux_seg)
{
MODIFY_REG(LCD->CR, LCD_CR_MUX_SEG, (mux_seg));
}
/**
* @brief 使能LCD_V1引脚连接外部电容
* @retval 无
*/
__STATIC_INLINE void std_lcd_v1_cap_enable(void)
{
LCD->CR |= (LCD_CR_LCD_CAP_V1);
}
/**
* @brief 禁止LCD_V1引脚连接外部电容
* @retval 无
*/
__STATIC_INLINE void std_lcd_v1_cap_disable(void)
{
LCD->CR &= (~LCD_CR_LCD_CAP_V1);
}
/**
* @brief 使能LCD_V2引脚连接外部电容
* @retval 无
*/
__STATIC_INLINE void std_lcd_v2_cap_enable(void)
{
LCD->CR |= (LCD_CR_LCD_CAP_V2);
}
/**
* @brief 禁止LCD_V2引脚连接外部电容
* @retval 无
*/
__STATIC_INLINE void std_lcd_v2_cap_disable(void)
{
LCD->CR &= (~LCD_CR_LCD_CAP_V2);
}
/**
* @brief 使能LCD_V3引脚连接外部电容
* @retval 无
*/
__STATIC_INLINE void std_lcd_v3_cap_enable(void)
{
LCD->CR |= (LCD_CR_LCD_CAP_V3);
}
/**
* @brief 禁止LCD_V3引脚连接外部电容
* @retval 无
*/
__STATIC_INLINE void std_lcd_v3_cap_disable(void)
{
LCD->CR &= (~LCD_CR_LCD_CAP_V3);
}
/**
* @brief 使能VLCD引脚连接外部电容
* @retval 无
*/
__STATIC_INLINE void std_lcd_vlcd_cap_enable(void)
{
LCD->CR |= (LCD_CR_LCD_CAP_VLCD);
}
/**
* @brief 禁止VLCD引脚连接外部电容
* @retval 无
*/
__STATIC_INLINE void std_lcd_vlcd_cap_disable(void)
{
LCD->CR &= (~LCD_CR_LCD_CAP_VLCD);
}
/**
* @brief LCD外设强驱动使能
* @retval 无
*/
__STATIC_INLINE void std_lcd_high_drive_enable(void)
{
LCD->FCR |= (LCD_FCR_HD);
}
/**
* @brief LCD外设强驱动禁止
* @retval 无
*/
__STATIC_INLINE void std_lcd_high_drive_disable(void)
{
LCD->FCR &= (~LCD_FCR_HD);
}
/**
* @brief LCD外设脉冲持续时间的配置
* @param duration LCD脉冲持续时间
* @arg LCD_PULSE_ON_DURATION_0
* @arg LCD_PULSE_ON_DURATION_1
* @arg ...
* @arg LCD_PULSE_ON_DURATION_14
* @arg LCD_PULSE_ON_DURATION_15
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_pulse_duration(uint32_t duration)
{
MODIFY_REG(LCD->FCR, LCD_FCR_PON, (duration));
}
/**
* @brief LCD外设输出VLCD电压档位配置
* @param vlcd_voltage VLCD电压档位
* @arg LCD_CHAGE_PUMP_1_3_BIAS_2_55V
* @arg ...
* @arg LCD_CHAGE_PUMP_1_4_BIAS_2_60V
* @arg ...
* @arg LCD_INNER_RESISTER_0_548_VDD
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_vlcd_voltage(uint32_t vlcd_voltage)
{
MODIFY_REG(LCD->FCR, LCD_FCR_CC, (vlcd_voltage));
}
/**
* @brief 设置LCD外设死区时间
* @param deadtime LCD死区时间
* @arg LCD_DEAD_TIME_0
* @arg LCD_DEAD_TIME_1
* @arg LCD_DEAD_TIME_2
* @arg LCD_DEAD_TIME_3
* @arg LCD_DEAD_TIME_4
* @arg LCD_DEAD_TIME_5
* @arg LCD_DEAD_TIME_6
* @arg LCD_DEAD_TIME_7
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_dead_time(uint32_t deadtime)
{
MODIFY_REG(LCD->FCR, LCD_FCR_DEAD, (deadtime));
}
/**
* @brief 配置LCD外设闪烁模式和闪烁频率
* @param mode LCD闪烁模式
* @arg LCD_BLINK_MODE_OFF
* @arg LCD_BLINK_MODE_SEG0_COM0
* @arg LCD_BLINK_MODE_SEG0_ALLCOM
* @arg LCD_BLINK_MODE_ALLSEG_ALLCOM
* @param blink_frequency LCD闪烁频率
* @arg LCD_BLINK_FREQUENCY_DIV8
* @arg LCD_BLINK_FREQUENCY_DIV16
* @arg LCD_BLINK_FREQUENCY_DIV32
* @arg LCD_BLINK_FREQUENCY_DIV64
* @arg LCD_BLINK_FREQUENCY_DIV128
* @arg LCD_BLINK_FREQUENCY_DIV256
* @arg LCD_BLINK_FREQUENCY_DIV512
* @arg LCD_BLINK_FREQUENCY_DIV1024
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_blink_frequency(uint32_t mode, uint32_t blink_frequency)
{
MODIFY_REG(LCD->FCR, (LCD_FCR_BLINK | LCD_FCR_BLINKF), ((mode) | (blink_frequency)));
}
/**
* @brief 配置LCD防极化
* @param state LCD防极化配置
* @arg LCD_ANTIPOLAR_FLOATING
* @arg LCD_ANTIPOLAR_GND
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_anti_polar(uint32_t state)
{
MODIFY_REG(LCD->FCR, LCD_FCR_ANTI_POLAR, state);
}
/**
* @brief 配置LCD COM和SEG输出
* @param state COM和SEG输出配置
* @arg LCD_SCOC_GND
* @arg LCD_SCOC_OUT
* @retval 无
*/
__STATIC_INLINE void std_lcd_set_scoc(uint32_t state)
{
MODIFY_REG(LCD->FCR, LCD_FCR_SCOC, state);
}
/**
* @brief 使能LCD外设中断
* @param interrupt LCD中断源
* @arg LCD_INTERRUPT_SOF
* @retval 无
*/
__STATIC_INLINE void std_lcd_interrupt_enable(uint32_t interrupt)
{
LCD->FCR |= (interrupt);
}
/**
* @brief 禁止LCD外设中断
* @param interrupt LCD中断源
* @arg LCD_INTERRUPT_SOF
* @retval 无
*/
__STATIC_INLINE void std_lcd_interrupt_disable(uint32_t interrupt)
{
LCD->FCR &= (~interrupt);
}
/**
* @brief 获取LCD外设中断使能
* @param interrupt LCD中断源
* @arg LCD_INTERRUPT_SOF
* @retval bool 返回选择的中断源使能状态
* @arg true: 表示选择中断源使能
* @arg false: 表示选择中断源未使能
*/
__STATIC_INLINE bool std_lcd_get_interrupt_enable(uint32_t interrupt)
{
return ((LCD->FCR & interrupt) == (interrupt));
}
/**
* @brief 查询LCD状态标志
* @param flag LCD状态标志
* @arg LCD_FLAG_ENS
* @arg LCD_FLAG_SOF
* @retval bool 返回标志的状态
* @arg true 当前标志为置起状态
* @arg false当前标志为清除状态
*/
__STATIC_INLINE bool std_lcd_get_flag(uint32_t flag)
{
return ((LCD->SR & (flag)) == (flag));
}
/**
* @brief 清除LCD中断标志
* @param clear_flag LCD中断标志
* @arg LCD_CLEAR_FLAG_SOF
* @retval 无
*/
__STATIC_INLINE void std_lcd_clear_flag(uint32_t clear_flag)
{
LCD->CLR |= (clear_flag);
}
/**
* @brief 写入指定LCD RAM数据
* @param lcd_ram_index 指定LCD_RAM 显示存储器
* @arg LCD_RAM_REGISTER0
* @arg LCD_RAM_REGISTER1
* @arg LCD_RAM_REGISTER2
* @arg LCD_RAM_REGISTER3
* @arg LCD_RAM_REGISTER4
* @arg LCD_RAM_REGISTER5
* @arg LCD_RAM_REGISTER6
* @arg LCD_RAM_REGISTER7
* @arg LCD_RAM_REGISTER8
* @arg LCD_RAM_REGISTER9
* @param lcd_ram_mask LCD_RAM 显示存储器数据掩码
* @param pixel 写入LCD_RAM的数值
* @retval 无
*/
__STATIC_INLINE void std_lcd_write(uint32_t lcd_ram_index, uint32_t lcd_ram_mask, uint32_t pixel)
{
MODIFY_REG(LCD->RAM[lcd_ram_index], ~(lcd_ram_mask), pixel);
}
/* LCD初始化相关函数 */
void std_lcd_init(std_lcd_init_t *lcd_init_param);
void std_lcd_deinit(void);
/* LCD结构体初始化相关函数 */
void std_lcd_struct_init(std_lcd_init_t *lcd_init_struct);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
/**
* @}
*/
/**
* @}
*/
#endif /* CIU32L051_STD_LCD_H */