4383|13

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问关于S3C2410的GPIO的问题 [复制链接]

    我的问题是:我用2410点亮LCD屏的时候出现了图形倒置和错位(就是正常的WINCE界面照镜子,从镜子里看到的那样;还有一点错位,下面的工具条跑到上面了,图像向右偏,偏的那部分跑到左边来。)
    我用的LCD屏型号是PT035TN01(INNOLUX的),这个屏要求初始化的时候配置LCD屏中的寄存器,配置时序类似SPI总线。
    我用GPE8,9,10来模拟配置时序,把配置函数作为S3C2410DISP中的成员函数,在HardWareInitial里调用。代码如下:
void S3C2410DISP::PT035_Write(unsigned char RegAddr, unsigned char RegData)
{
        unsigned char no;
        unsigned short value;
        v_pIOPRegs->rGPECON &= ~( 0x3<<16 | 0x3<<18 | 0x3<<20 ); //Clear GPE8,GPE9,GPE10
        v_pIOPRegs->rGPECON |= ( 0x1<<16 | 0x1<<18 | 0x1<<20 ); //SET GPE8,GPE9,GPE10 as OUTPUT
        v_pIOPRegs->rGPEUP |= (0x1<<10 | 0x1<<9 | 0x1<<8); //Disable GPE8,GPE9,GPE10 PULL_UP
        v_pIOPRegs->rGPEDAT |= ( 0x1<<8 | 0x1<<9 ); //SET GPE8(SPENA),GPE9(SPCK)=1
        v_pIOPRegs->rGPEDAT &= ~( 0x1<<10 ); //SET GPE10(SPDA)=0

        v_pIOPRegs->rGPEDAT &= ~( 0x1<<8 ); //SET GPE8(SPENA)=0 START
        PT035_Delay();
        value = (RegAddr<<8) | (RegData & 0xFF);
        for (no=0; no<16; no++)
        {
                v_pIOPRegs->rGPEDAT &= ~( 0x1<<9 ); //SET GPE9(SPCK)=0
                if ((value & 0x8000) == 0x8000)
                {
                        v_pIOPRegs->rGPEDAT |= ( 0x1<<10 ); //SET GPE10(SPDA)=1;
                }
                else
                {
                        v_pIOPRegs->rGPEDAT &= ~( 0x1<<10 ); //SET GPE10(SPDA)=0;
                }
                PT035_Delay();
                v_pIOPRegs->rGPEDAT |= ( 0x1<<9 ); //SET GPE9(SPCK)=1
                value = ( value<<1 );
                PT035_Delay();
        }

void S3C2410DISP::PT035_Delay()
{
        int i;
        for(i=0;i<5000;i++);
        RETAILMSG(0,(TEXT("PT035_Delay is called.\r\n")));
}

void S3C2410DISP::PT035_INIT()
{
        PT035_Write(0x02,0x07); //R00 SPI_write(Address+"write"+0,Data)
                                                        //可以通过该寄存器设置测试模式

        PT035_Write(0x06,0x40); //R01
        PT035_Write(0x0a,0x13); //R02
        PT035_Write(0x0e,0xCC); //R03 控制输入数据的格式初始话阶段设置为24bit RGB HV模式
        PT035_Write(0x12,0x45); //R04
        PT035_Write(0x16,0x0C); //R05
        PT035_Write(0x1e,0x02); //R07
        PT035_Write(0x22,0x08); //R08
        PT035_Write(0x26,0x40); //R09 控制显示的亮度
        PT035_Write(0x2a,0x88); //R0A
        PT035_Write(0x2e,0x88); //R0B
        PT035_Write(0x32,0x20); //R0C
        PT035_Write(0x36,0x20); //R0D
        RETAILMSG(1,(TEXT("PT035_INIT is excuted.\r\n")));
}

    当内核启动以后,所有的打印信息都可以在串口上读到,但是当我变化寄存器配置内容的时候(上面红色的),发现LCD显示没有任何变化,而后我就将这部分配置代码全部注释,发现LCD显示依然没有任何变化,我想这一定是GPIO没有成功把配置数据写到LCD屏的相应的寄存器中。
    请问为什么会写不进去呢?以上这些地址(0x02,0x06,0x0a,0x0e...)是LCD的Datasheet中给出的,是不是系统不承认,需要在.bib或者什么文件里添加LCD地址信息?还是硬件电路有问题?还是GPIO配置的不对?
    由于我用GPIO模拟的类似SPI总线只在初始化的时候使用,用示波器很难捕获,请问怎样才能检测呢?
    谢谢能读完贴的,如果能帮我解决,就烦请举手之劳。
    还有一个问题是,GPIO的PULLUP什么时候该ENable和Disable?

最新回复

感谢shuiyan的帮助,现在已经解决了偏移和镜像的问题,但是图像色彩还是不对,先结贴了。  详情 回复 发表于 2008-7-18 14:39
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
要测试SPI时序是否正确,就在每条语句外加个while循环,或者加个for(i=0;i<10000;i++)的1W次循环,然后抓波形。

怎么改动都没有效果?有寄存器是可读的吗?如果有,就读一下,试试SPI的配置。

还有,2410是有标准SPI的硬件接口的,为什么要用GPIO模拟呢?
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用楼上的方法,我能看到波形,好像基本正确的。为什么还是显示不正常呢?
因为其他外设占用了标准的SPI,所以我自己模拟了一个。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
SPI是可以复用的,只要外设的#CS分开就行。

波形正确,那发出的指令正确吗?抓住波形后,判断一下抓到的是不是你发出的指令。

还有,读LCD的某个寄存器试试,看能不能读出来。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
已经确定了没有写进去,指令是对的,波形有所不稳定。
是不是Delay()函数由软件实现,不能够精准地控制CLK信号?
void S3C2410DISP::PT035_Delay()
{
int i;
for(i=0;i <5000;i++);
RETAILMSG(0,(TEXT("PT035_Delay is called.\r\n")));
}
CLK其实是由GPE8产生的:
while(1)
{
GPE8=0;
Delay();
GPE=1;
Delay();
}
在2410的BSP里面有没有精准的时钟函数?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
GPE8=0;
Delay();
GPE=1;
Delay();

这段怎么看不懂什么意思?CLK产生怎么能用while(1)呢?Delay哪里定义的?是上面的PT035_Delay() 吗?这个循环,还有个串口输出占用多长时间测过吗?

波形不稳定是指产生的clk周期不稳定?还是波形的边沿有畸变?还是电压高不上去或者低不下来?

我们用的是PT035TN01,Spec是 V.6 ,06年5月份的。后面应该有新版本,估计变化不大。

CLK频率和周期倒不是很严格。通讯中,DEN使能了吗?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
你应该注意以下你的Vsync,Hsync之类的信号。
注意s3c2410 LCD controller里的配置是否正确
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
你说的DEN使能是怎么回事?我使用的是HV mode也需要使能DEN吗?你说的DEN是2410的还是LCD的?
我的VSPW=0,VBPD=11,VFPD=9,
   HSPW=0,HBPD=68,HFPD=17,CLKVAL=7,地址寄存器的设置没有变化。
我用的也是PT035TN01,Spec是 V.6 ,06年5月份的,LCD的寄存器设置是参照Spec的。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

9
 
LCD的SPI通讯时,需要DEN信号为高,就是DataEnable,你的电路上这个脚怎么配置的?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
手册上说这个引脚只用在DEN Mode,我用的是HV模式的,所以电路上这个引脚什么也没接,NC
我刚才用示波器测了一下行场信号,竟然不同步,这该怎么办?
不是只要配置2410的寄存器就可以了吗?怎么会不同步呢?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 
sorry,是我看错了,应该是SPENA,3-wire的ENABLE脚,有没有配置上?需要时序匹配的。

Line/Frame不同步?需要同步吗?已经能显示了。先不担心这个。先解决寄存器写不进去的问题。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
    终于解决了寄存器写不进去的问题,手册上说,在SPENA为低电平期间,SPDA大于或小于16个数据都被忽略,貌似是因为SPENA低电平的宽度大于16个SPCK(程序显示为16.5个SPCK),而每个SPCK都有SPDA,所以造成了SPDA大于16个,被视为无效数据了。看来用GPIO来模拟SPI有很大的缺陷,应该选择2410自带的SPI接口,吸取教训了。
    但是图像显示不镜像后,还存在偏移和颜色不对的问题,屏的偏左侧有一道1.5cm宽的黑色条块,然后才是WinCE的桌面,然后屏的最左侧是原本应该在最右侧的图像。大概和下面的标注一样:

123456789           9***12345
123456789           9***12345
123456789           9***12345
123456789           9***12345
正常时                 现在的情况
   
    就是正常的时候,桌面上有WindowsCE的图标,现在这个图标变成:E**Windows,相应的快捷键也有偏移。
    这个问题该怎么办呢?是不是行场不同步造成的?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

13
 
请问你在WinCE下,LCD驱动文件是怎么配置的?那些配置的值分别是多少?
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

14
 
感谢shuiyan的帮助,现在已经解决了偏移和镜像的问题,但是图像色彩还是不对,先结贴了。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表