OTM8009A读ID,读寄存器,读像素点颜 {MOD}值全为0。但是写寄存器,写GRAM等操作和显示都是正确的。求做过此控制器的大神帮帮忙啊。

2019-07-20 09:01发布

  使用16位并口进行读写,使用示波器测量读信号都是正确的。就是输出线上全为0,一点信号都没有。
  
//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(UINT16 regval)
{
    LCD_DC_CLR;
    LCD_CS_CLR;
    CLI();
    DATAOUT(regval);
    LCD_WRR_CLR;
    LCD_WRR_SET;
    SEI();
    LCD_CS_SET;
}
//写LCD数据
//data:要写入的值
void LCD_WR_DATA(UINT16 data)
{                                                   
    LCD_DC_SET;
    LCD_CS_CLR;
    CLI();
    DATAOUT(data);
    LCD_WRR_CLR;
    LCD_WRR_SET;
    SEI();   
    LCD_CS_SET;     
}

//读LCD数据
//返回值:读到的值
UINT16 LCD_RD_DATA(void)
{                                                   
    UINT16 data = 0;
    UINT16 dummy = 0;

    MX_LCDGPIO_Config_IN();  //配置为输入   
    LCD_DC_SET;
    LCD_CS_CLR;

    LCD_RDW_CLR;
    //HAL_Delay(1);
    //dummy = DATAIN();        //Dummy Data
    LCD_RDW_SET;
    dummy = DATAIN();        //Dummy Data

    LCD_RDW_CLR;
    //HAL_Delay(1);
   
    LCD_RDW_SET;
    data = DATAIN();        //有效值

    LCD_CS_SET;
    MX_LCDGPIO_Config_OT(); //配置为输出
    return data;         
}                       
  
//读寄存器
//LCD_Reg:寄存器地址
//返回值:读到的数据,第二次读为真实值
UINT16 LCD_ReadReg(UINT8 LCD_Reg)
{  
    //LCD_WR_REG(LCD_Reg);        //写入要读的寄存器序号
    LCD_DC_CLR;
    LCD_CS_CLR;
    CLI();
    DATAOUT(LCD_Reg);
    LCD_WRR_CLR;
    LCD_WRR_SET;
    SEI();
    //LCD_CS_SET;
    return LCD_RD_DATA();        //返回读到的值
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。