chenming 1e21cdb572 1.优化上下电时序
2.修改开关FCD_EN时的死机问题
3.修改快速开关FCD_EN信号时出现花屏的问题
4.修改cola_set_event事件参数,都是一个32bit的整数,每个事件占用1个bit
5.将B+高低压ADC判断改为电压mv判断
6.修改lvds lock信号消抖时间
7.修改不接lvds线时,快速开关FCD_EN不进入BIST模式的问题
8.添加A样相关资料
2025-05-30 14:10:31 +08:00

146 lines
3.9 KiB
C

/*!
* @文件名 logic_mode_bist.c
*
* @功能描述
* 通过检测948的LVDS Lock信号,控制屏幕是否进入BIST模式
*/
#include "logic_public.h"
#define PERIOD_CHECK_LVDS_LOCK 10 //检测LVDS信号的周期
task_t s_bist_check_task; //BIST模式检测
extern void logic_power_up_step2(void); //跨模块调用,违背了原则^-^
/*FUNCTION**********************************************************************
*
* Function Name : check_lvds_floating
* Description : 通过检测LVDS Lock信号,进入BIST模式
*
*END**************************************************************************/
static void check_lvds_floating(void *arg, uint32_t event)
{
(void)arg;
(void)event;
static bool bVoltageNormal = true;
static uint8_t style = 0;
static bool bBistMode = false;
static bool bFirst = true;
static bool bLockStatusOld = false;
static int iCheckDurCnt = 0, iDlyCnt = 0,iPeriodCnt = 0;
if(event > 0)
{//事件解析
if((event & EN_NOTIFY_SYS_POWER_DOWN) == EN_NOTIFY_SYS_POWER_DOWN)
{
bFirst = true;
logWrite("bist mode rx power down nofity\r\n");
}
if((event & EN_NOTIFY_VOLTAGE_LOW) == EN_NOTIFY_VOLTAGE_LOW)
{
bVoltageNormal = false;
logWrite("bist mode rx EN_NOTIFY_VOLTAGE_LOW\r\n");
}
if((event & EN_NOTIFY_VOLTAGE_HIGH) == EN_NOTIFY_VOLTAGE_HIGH)
{
bVoltageNormal = false;
logWrite("bist mode rx EN_NOTIFY_VOLTAGE_HIGH\r\n");
}
if((event & EN_NOTIFY_VOLTAGE_NORMAL) == EN_NOTIFY_VOLTAGE_NORMAL)
{
bVoltageNormal = true;
logWrite("bist mode rx EN_NOTIFY_VOLTAGE_NORMAL\r\n");
if(bBistMode)
{
logic_power_up_step2();
fml_max25512_set_bklight_on(true);
fml_gpio_write(OUT_TFT_BIST,true);
}
}
}
if(iCheckDurCnt < 6000)
{//前6秒不检测该信号丢失
iCheckDurCnt+=PERIOD_CHECK_LVDS_LOCK;
bLockStatusOld = !fml_gpio_read(IN_LVDS_UNLOCK);
}
else
{//读取LVDS Lock信号
bool bLockStatus = fml_gpio_read(IN_LVDS_UNLOCK);
bool bWakeUpStatus = fml_gpio_read(IN_WAKEUP);
if(bWakeUpStatus == false || bVoltageNormal == false)
return;
if((event & EN_NOTIFY_SYS_POWER_UP) == EN_NOTIFY_SYS_POWER_UP)
{
if(bBistMode)
{
logWrite("bist mode rx power up nofity\r\n");
iPeriodCnt = 0;
logic_power_up_step2();
fml_max25512_set_bklight_on(true); //开背光
fml_gpio_write(OUT_TFT_BIST,true);
}
}
if(bLockStatusOld != bLockStatus)
{//5次消抖
iDlyCnt = 5;
bLockStatusOld = bLockStatus;
}
if(iDlyCnt > 0)
{
iDlyCnt--;
if(0 == iDlyCnt)
{
style = 0;
iPeriodCnt = 0;
if(bLockStatus)
{//检测到LVDS Lock信号生效
bFirst = false;
bBistMode = false;
logWrite("exit bist\r\n");
fml_max25512_set_bklight_on(true); //开背光
}
else
{//检测到LVDS Lock信号丢失
bBistMode = true;
logWrite("enter bist\r\n");
if(bFirst)
{//首次上电时,需要进行如下系列供电
bFirst = false;
iPeriodCnt = 0;
logic_power_up_step2();
}
fml_max25512_set_bklight_on(true); //开背光
fml_tft_BIST_clear();//写寄存器清除BIST模式设置
}
fml_gpio_write(OUT_TFT_BIST,!bLockStatus);//设置Bist模式输出引脚
}
}
if(bLockStatus == false && bBistMode)
{
iPeriodCnt+=PERIOD_CHECK_LVDS_LOCK;
if(iPeriodCnt > 5000)
{//每隔5秒切换一次bist模式
//logWrite("iPeriodCnt=%d\r\n",iPeriodCnt);
iPeriodCnt = 0;
fml_tft_BIST_clear();
fml_tft_write_BIST_mode(style);
style++;
if(style == 24)//切换到第24个模式再从0开始
style=0;
}
}
}
}
/*FUNCTION**********************************************************************
*
* Function Name : logic_bist_init
* Description : 初始化BIST模式检测任务
*
*END**************************************************************************/
void logic_bist_init(void)
{
cola_timer_create(&s_bist_check_task, check_lvds_floating, NULL);
cola_timer_start(&s_bist_check_task, EN_COLA_TIMER_ALWAYS, PERIOD_CHECK_LVDS_LOCK);
}