4318|9

86

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】ARM控制SED1330LCD320*240出现这种现象是什么原因? [复制链接]

正常现象应该是:■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■填满一行
实际的现象是:  ■  ■■■■■■■■■    ■■■■■■■■■■■■■■  ■■■■随机的消失几个出现到其他地方了
液晶没坏(我特意用while(1)多次扫描发现方块是随机消失的)
单步调试的时候  请大家看dsp1子函数红色部分,光标地址无故成CDCD了(同样也是随机的,郁闷~~)

设置BCFG3寄存器LDR     R1, =0x1000ffef
一些参数的定义.......
#ifndef Graphics_h
#define Graphics_h

#define LCD_WC_PORT    (*(volatile uint16*)(0x83000002))
#define LCD_WD_PORT    (*(volatile uint16*)(0x83000000))
#define SYSTEM_SET     0x40
#define SCROLL         0x44
#define HDOT_SCROLL    0x5a
#define LAYER_SYN      0x5b
#define CURSOR_SET     0x5d
#define CURSOR_RIGHT   0x4c
#define CURSOR_DOWN    0x4f
#define DISPLAY_ON     0x59
#define ALL_LAYER      0x07
#define LAYER1         0x01
#define LAYER2         0x02
#define LAYER3         0x04
#define SET_CURSOR_ADR 0x46
#define DSMEM_WRITE    0x42

#define _lcd_write_command(x)   LCD_WC_PORT=x
#define _lcd_write_data(x)      LCD_WD_PORT=x

extern void GraphicsInit(void);
extern void cleardevice(uint8 layer);
extern void dsp4(uint16 row_num,uint16 col_num);
extern void dsp1(uint16 row_num,uint16 col_num);

#endif

初始化LCD子函数.....
void GraphicsInit(void)
{
  _lcd_write_command(SYSTEM_SET);
  _lcd_write_data(0x30);  /*1 PKT=0: 64 bit packers*/
                              /*IV=1: no offset*/
                              /*W/S=0: 1-screen drive*/
                              /*M2-M0: select CG ram&rom*/
  _lcd_write_data(7);     /*2 FX: character width = 8*/
  _lcd_write_data(7);     /*3 FY: character height = 8*/
  _lcd_write_data(39);    /*4 C/R: max number of mem adr per line = 40*/
  _lcd_write_data(52);    /*5 TC/R: length of 1 line, inc horizontal blank*/
  _lcd_write_data(239);   /*6 L/F: the height in lines of screen = 240*/
  _lcd_write_data(40);    /*7 APL: with in adrress units of virtual screen*/
  _lcd_write_data(0);     /*8 APH: AP=40*/

  _lcd_write_command(SCROLL);
  _lcd_write_data(0x00);  /*1 SAD1L: 1st screen start adr at 0000h*/
  _lcd_write_data(0x00);  /*2 SAD1H*/
  _lcd_write_data(239);   /*3 SL1: 1st screen has 240 lines*/
  _lcd_write_data(0x80);  /*4 SAD2L: 2nd screen start adr at 2580h*/
  _lcd_write_data(0x25);  /*5 SAD2H*/
  _lcd_write_data(239);   /*6 SL2: 2nd screen has 240 lines */
  _lcd_write_data(0x00);  /*7 SAD3L: 3rd screen start adr at 4b00h */
  _lcd_write_data(0x4b);  /*8 SAD3H*/
  _lcd_write_data(0x80);  /*9 SAD4L: 4rd screen start adr at 7080h */
  _lcd_write_data(0x70);  /*10 SAD4H*/

  _lcd_write_command(HDOT_SCROLL);
  _lcd_write_data(0);     /*zero horizontal pixel shift*/

  _lcd_write_command(LAYER_SYN);
  _lcd_write_data(0x1d);  /*1st&2nd&3rd graphics, three layer syn*/

  _lcd_write_command(CURSOR_SET);
  _lcd_write_data(0x04);  /*CRX=4: cursor x is 5*/
  _lcd_write_data(0x86);  /*CM=1: block cursor*/
                          /*CRY=6: cursor y is 7*/

  _lcd_write_command(CURSOR_RIGHT);  /*cursor right shift*/

}
清屏子函数.......
void cleardevice(uint8 layer)
{
  uint16  i;

  _lcd_write_command(CURSOR_RIGHT);
  if(layer&LAYER1) {
    _lcd_write_command(SET_CURSOR_ADR);
    _lcd_write_data(0x00);
    _lcd_write_data(0x00);
    _lcd_write_command(DSMEM_WRITE);
    for(i=0; i<0x2580; i++) {
      _lcd_write_data(0x00);
    }
  }
  if(layer&LAYER2) {
    _lcd_write_command(SET_CURSOR_ADR);
    _lcd_write_data(0x80);
    _lcd_write_data(0x25);
    _lcd_write_command(DSMEM_WRITE);
    for(i=0; i<0x2580; i++) {
      _lcd_write_data(0x00);
    }
  }
  if(layer&LAYER3) {
    _lcd_write_command(SET_CURSOR_ADR);
    _lcd_write_data(0x00);
    _lcd_write_data(0x4b);
    _lcd_write_command(DSMEM_WRITE);
    for(i=0; i<0x2580; i++) {
      _lcd_write_data(0x00);
    }
  }
  _lcd_write_command(DISPLAY_ON);
  _lcd_write_data(0x54);
}

光标像下移动写16字节画一个8*16的小方块.......
void dsp1(uint16 row_num,uint16 col_num)
{
uint8 i,x_site,y_site;                 //光标起始点的地址

x_site = (row_num*640+col_num)%256;
y_site = (row_num*640+col_num)/256;

_lcd_write_command(CURSOR_DOWN);//LCD_COM=0x4f;
_lcd_write_command(SET_CURSOR_ADR);//LCD_COM=0x46;

_lcd_write_data(x_site);
_lcd_write_data(y_site);
_lcd_write_command(0x42);//LCD_COM=0x42;
  for(i=0;i<16;i++)
    {
    _lcd_write_data(0xff);//LCD_DAT=0xff;
    }
}

#include "config.h"
#define LED_Con   1<<22
void DelayNS(uint32 dly)
{
uint32 i;
for(;dly>0;dly--)
    for(i=50000;i>0;i--);
}
主程序.....
int main(void)
{
uint16 i;
PINSEL2=PINSEL2|(~LED_Con);
IO1DIR=IO1DIR|LED_Con;

GraphicsInit();
DelayNS(100);
cleardevice(ALL_LAYER);
DelayNS(2000);
while(1){
IO1SET=LED_Con;

for(i=0;i<40;i++)
{
   
   dsp1(7,i);
DelayNS(10);
}
i=0;
IO1CLR=LED_Con;
DelayNS(100);
}
while(1);
return(0);
}

此帖出自ARM技术论坛

最新回复

会持续到你下次改变IO的电平前,中间有多少个机器周期和多长时间,那么你就要根据指令周期和占用了多少个指令来算了。呵呵  详情 回复 发表于 2010-5-27 11:19
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
处理器/Memory配置有没有问题?
怀疑是Memory访问时序有问题.
此帖出自ARM技术论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用51的时候我没发现过这问题晶振11.0592M,现在ARM还是11.0592M,为什么51可以,ARM不行? 我刚将频率跳到晶振频率的3/4时,就没有这现象了....
此帖出自ARM技术论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 
那应该是时序问题吧,51比较慢,arm比较快,很多的延时时间不足,可能是。
此帖出自ARM技术论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
那我试试能否加延时到LCD显示程序中满足这一要求
此帖出自ARM技术论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
请大家提供建议到哪地方加延时??????
此帖出自ARM技术论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
不知道屏初始化的代码可见不?它里面应该在设置很多寄存器的时候,都有延时的。可以适当延长,根据51和ARM的主频差别来算。

还有很多像cs,we rd之类的 控制线和数据线,你也要看看他的datasheet,要求多长的持续时间,然后看看你的arm的控制IO速度,看看是否是ARM的速度过快,造成时序电平的持续时间不够长。
此帖出自ARM技术论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
Peasant_Lee:
你的话对我有很大的启发,我在连续2次写地址数据的时候加了一个小小的延时,就OK了,请教你一个问题:
当ARM连续写2个数据出来,第一个数据能在总线上持续多长的时间?
譬如,第一次写 0x55   马上第2次写0xAA  是否就是连续的2VPB个时钟周期呢?
此帖出自ARM技术论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
x_site = (row_num*640+col_num)%256;

for(i=1;i>0;i--);

y_site = (row_num*640+col_num)/256;

就加了这个延时....
此帖出自ARM技术论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 hexian288 的回复:
Peasant_Lee:
你的话对我有很大的启发,我在连续2次写地址数据的时候加了一个小小的延时,就OK了,请教你一个问题:
当ARM连续写2个数据出来,第一个数据能在总线上持续多长的时间?
譬如,第一次写 0x55 马上第2次写0xAA 是否就是连续的2VPB个时钟周期呢?


会持续到你下次改变IO的电平前,中间有多少个机器周期和多长时间,那么你就要根据指令周期和占用了多少个指令来算了。呵呵
此帖出自ARM技术论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表