打印
[ZLG-ARM]

调试1335是发现得问题~

[复制链接]
2667|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hpqhpq|  楼主 | 2007-4-2 10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
arm000| | 2007-4-2 11:09 | 只看该作者

速度不匹配

程序在ram中运行的速度,与在flash中运行的速度差“很多”,而作为“外设”sed1335对这两种速度的反应是差距很大的,也就是跟不上程序在ram中运行的速度。加一些“延时等待”看看。

使用特权

评论回复
板凳
hpqhpq|  楼主 | 2007-4-2 11:15 | 只看该作者

我上面都加了20的延时了呀

更多的也加过,貌似还是不行
都郁闷了好久了

使用特权

评论回复
地板
arm000| | 2007-4-2 12:33 | 只看该作者

实际上。。。

实际上sed1335的接口时序是比较简单的,从   /* 定义LCM地址 */
#define  TG240128_COM        (*((volatile unsigned short *) 0x83000002))
#define  TG240128_DAT        (*((volatile unsigned short *) 0x83000000))
来看,您是用外部总线的方式对sed1335接口的,我曾经用lpc2136模拟总线的方式控制了1335,显示正常。感觉您的问题好像还是出在arm与1335的接口速度匹配上,不知道您用的外部总线速度是否可以调整不?降低速度再试试看,祝您顺利!

使用特权

评论回复
5
hpqhpq|  楼主 | 2007-4-2 13:20 | 只看该作者

总线速度我换了好多种了

从最快到最慢都用过了,还是解决不了~

使用特权

评论回复
6
arm000| | 2007-4-2 14:56 | 只看该作者

最后办法

由您写的程序看,是非常“标准”的。应该是用其他cpu(单片机)控制1335成功过的,现在是“移植”到“arm”控制器上,对吗?也就是说1335的使用对您来说不是第一次。
这就好办了,采用程序单步跟踪+示波器的办法,看看/wr信号,A0地址/指令区分信号产生了没有,应该是“终极”解决办法了。

使用特权

评论回复
7
skymood| | 2007-4-2 16:26 | 只看该作者

我也学习

 楼主,问题解决了告诉一下小弟, 小弟我是新手, 原来做的是LPC 2292 + T6369C 驱动240*128 的液晶屏, 现在要改成 LPC 2292 + S1D13700 驱动320*240的液晶屏, 在原来T6369C的驱动上 改了点参数 但一直调试不出来,
 今天看到楼主的 程序 对小弟 有很大的借鉴作用. 再者请问 arm000 可以把
您以前的 lpc2136模拟总线的方式控制了1335的 驱动程序 发给小弟学习学习,
 我现在也是驱动做不出来, 十分着急呀 , 谢谢了呀 

使用特权

评论回复
8
arm000| | 2007-4-2 17:13 | 只看该作者

程序

//程序见下面
//参考了某位网友的模拟总线程序,时间好久了想不起来了。
//在此感谢那位网友
//程序要结合1335的硬件才能更明白
//接口用的是0口



#define uchar    unsigned char
#define uint     unsigned int
#define D1      0x0000             /*D1/D2/D3:分别为LCD第一二三区之首地址*/
#define D2      0x2580
#define D3      0x4b00

//lcd interface
#define WR_N       (1<<13)
#define RD_N       (1<<12)
#define CS_N       (1<<16)  
#define A0         (1<<15) 

#define DB0        (1<<4)
#define DB1        (1<<5)
#define DB2        (1<<6)
#define DB3        (1<<7)
#define DB4        (1<<8) 
#define DB5        (1<<9)
#define DB6        (1<<10)
#define DB7        (1<<11)

#define LCD 1    //显示效果不错 ,还需要改进
void OutData(unsigned char Data)
{
    volatile uchar i;
    IO0CLR|=A0;
    IO0CLR|=CS_N;
    for(i=0;i<LCD;i++)
      ;
    IO0SET|=(Data<<4);
    Data=(~Data);
    IO0CLR|=(Data<<4);
    IO0CLR|=WR_N;
    for(i=0;i<LCD;i++)
      ;
    IO0SET|=WR_N;
   for(i=0;i<LCD;i++)
      ;
    IO0SET|=CS_N;
    
}
void OutCommand(unsigned char CMD)
{
     volatile uchar i;
    IO0SET|=A0;
    IO0CLR|=CS_N;
    for(i=0;i<LCD;i++)
      ;
    IO0SET|=(CMD<<4);
    CMD=(~CMD);
    IO0CLR|=(CMD<<4);
    IO0CLR|=WR_N;
    for(i=0;i<LCD;i++)
      ;
    IO0SET|=WR_N;
    for(i=0;i<LCD;i++)
      ;
     IO0SET|=CS_N;
}
void send_I2par(uchar z,uchar x,uchar y)  /*送LCD两参数指令函数,第一形参为指令码*/
{
  OutCommand(z);
  OutData(x);
  OutData(y);
 }
void send_I1par(uchar z,uchar x)        /*送LCD单参数指令子程,第一形参为指令码*/
{
  OutCommand(z);
  OutData(x);
}
void send_I0par(uchar z)        /*送LCD无参数指令子程,形参为指令码*/
{
  OutCommand(z);
}
void wr_one8(uint d,uchar x,uchar y,uint z)      /* 向LCD写一个8x8字符函数,
ch:8x8字符位于字库中的具体区域(CH8,CH16,CH24);d:欲写入LCD之显示区;x:LCD地址水平坐标;y:LCD
地址纵坐标,起点自上而下;z:字库中字符代码值*/
{
  uchar a,b ;
  const uchar * pCharLib;
  uint m,r,i;
  r=(d+x)+y*0x28;   /*根据横纵坐标计算LCD实际地址,并将地址送b,a*/
  a=r;              /*a,LCD低8位地址*/
  r >>= 8;
  b=r;              /*B,LCD高8位地址*/
  m=z*8;
  send_I0par(0x4f);
  send_I2par(0x46,a,b);
  send_I0par(0x42);
  pCharLib=CharLib;
  for(i=m;i<(m+8);i++)
  {
    OutData(*(pCharLib+i));
  } 
}

使用特权

评论回复
9
xwj| | 2007-4-2 19:56 | 只看该作者

不要用总线方式,用IO方式试试

1335这类LCD控制器的时间是uS级的,直接挂总线的话时序太快了!

使用特权

评论回复
10
hpqhpq|  楼主 | 2007-4-2 21:21 | 只看该作者

谢谢楼上的哇,先试试

使用特权

评论回复
11
skymood| | 2007-4-3 09:44 | 只看该作者

哎 把黑白屏变成了蓝屏

 楼主, 我在你的程序上改动了一下 放到我的LPC2292+S1D13700 里去, 结果把我的320*240黑白屏变成了蓝屏,这是怎么回事呀  楼主,是不是在I/O口与S1D13700 之间要加驱动?  望高人指点

使用特权

评论回复
12
hpqhpq|  楼主 | 2007-4-3 13:07 | 只看该作者

请教下,硬件电路该怎么做呢?

1。能不能3.3v和5v混用
2。是不是有的液晶必须都上拉到5v才行

使用特权

评论回复
13
arm000| | 2007-4-3 13:41 | 只看该作者

原则

是:
    从3.3v系统到5v系统的信号,直接连接;反过来,从5v系统到3.3v系统的信号中间加一200欧姆左右的电阻即可。
    比如上面的lpc2136对sed1335的控制,因为不需要回读,直接将sed1335的/wr,A0,D0-D7接到2136的IO脚上就可以啦。

使用特权

评论回复
14
skymood| | 2007-4-3 13:47 | 只看该作者

我是参照EASY2200做的

  液晶驱动一般是5V, 背光有5V 的 也有3.3 的, 我觉得应该可以混用吧
I/O口 输出是 3.3V ,具体要看 LCM的 datasheet. hpqhpq 程序问题解决了没有?  小弟还等着你的 好消息.

   PS; 你的驱动程序 格式是不是参照 周立功的T6963C 驱动写的.

使用特权

评论回复
15
hpqhpq|  楼主 | 2007-4-3 14:17 | 只看该作者

本来是准备移植上去的^_^

但到现在还没成功哇~
下载到flash中能跑,但数据有的时候写要出错
下载到外部ram中不能跑了~

使用特权

评论回复
16
skymood| | 2007-4-3 14:37 | 只看该作者

我现在也很忧闷呀

  我现在用S1D13700 跟你的SED1335 差不多, 周立功提供的是 T6963C 和 
HD66781的驱动 ,自己写的S1D13700 程序根本用不了( 我还是个菜鸟) .
 望周工提供支持呀 !!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

17

帖子

1

粉丝