OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4103|回复: 2

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

[复制链接]

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2017-1-9 16:34:50 | 显示全部楼层 |阅读模式
50金钱
  使用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();        //返回读到的值
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2016-1-10
在线时间
17 小时
发表于 2017-9-15 21:45:06 | 显示全部楼层
本帖最后由 xiezhoujian 于 2023-3-31 10:13 编辑

void WriteComm(unsigned int i)//MCU16位,写操作,先写要读的寄存器,常见IC的ID寄存器都是04H,你也可以读DAH,DBH,DCH
{
         CS0=0;
         RD0=1;
         RS=0;         
          DBH=i>>8;
         DBL=i;
         WR0=0;
         WR0=1;
         CS0=1;
}

unsigned int ReadData(void)//MCU16位,读操作
{
        unsigned int temp;
        DBL = 0xff; //GPIO先拉高
        DBH = 0xff;//GPIO先拉高
        CS0 = 0;
        RS  = 1;        
        WR0 = 1;
        RD0 = 0;
        P4MDOUT = 0x00;         //Set Input Mode Before Read
        P2MDOUT = 0x00; //Set Input Mode Before Read
        _nop_();  _nop_();_nop_();  _nop_();
        RD0 = 1;  //rad enable
        _nop_();  _nop_();_nop_();  _nop_();
        temp=DBH;//ID的低8位
        temp<<=8;
        temp|=DBL;//ID的高
        P4MDOUT = 0xFF; //Set output Mode Before Read
        P2MDOUT = 0xFF; //Set output Mode Before Read
        RD0 = 1;  
        _nop_(); _nop_();_nop_();  _nop_();      
        CS0 = 1;
        return temp;  //返回ID值
}


回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-2-20
在线时间
33 小时
发表于 2018-3-25 23:14:11 | 显示全部楼层
楼主解决了吗,可能是时序的原因
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 18:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表