ARMLCD的驱动与触摸屏的中断

1、LCD显示单位:帧

(1)显示器上一整个画面的内容成为一个帧,整个显示器工作是一帧一帧的在显示。

(2)电源实际就是以每秒种24帧的速度在播放图片。

(3)帧内数据:一帧分为多行,一行分为多像素,因此一帧图像其实就是多个像素组成的矩阵。

(4)帧外数据:整个视频由很多个帧构成,最终播放视频时逐个播放各个图像帧即可。

2、LCD显示一帧图像的过程

(1)首先把帧分为行,然后再把行分为像素,然后逐个像素去显示。(显示像素:其实就是LCD驱动器按照接收到的LCD控制器给的显示数据,驱动一个像素的液晶分子旋转,让这个像素显示出相应的颜色值的过程)

(2)关键点:LCD控制器和驱动器之间一次只能传一个像素点的显示数据。所以一帧图像在屏幕上其实是串行的依次被显示上去的,不是同一时间显示出来的。

3、为了向前兼容出现的六个时序参数

HPSW 水平同步信号脉宽

HBPD 水平同步信号前肩

HFPD 水平同步信号后肩

VSPW 垂直同步信号脉宽

VBPD 垂直同步信号前肩

VFPD 垂直同步信号后肩

(1)一行的通信过程是这样的:LCD控制器先发送一个HSYNC高电平脉冲(脉冲宽度是HSPW),脉冲告诉驱动器下面的信号是一行信息,这一行信息包括3部分:HBPD+有效行信息+HFPD。其中前肩和后肩都属于时序信息(和LCD屏幕具体有关),有效行信息就是横向分辨率。所以你可以认为一行总共包含4部分:HSPW+HBPD+有效行信息+HFPD。

(2)一帧图像其实就是一列,一列图像由多个行组成,每行都是上面讲的这个时序。

(3)一帧图像的通信过程是这个样子的:整个帧图像信号分为4部分:VSPW+VBPD+帧有效信号+VFPD。VSPW是帧同步信号宽度,用来告诉驱动器一帧图像要开始了;VBPD和VFPD分别是垂直同步信号前后肩。

(4)必要说明:这6个参数对于LCD显示器其实本来是没有用的,这些信号其实是老式的CRT显示器才需要的,LCD本身不需要,但是出于历史兼容性要求,LCD选择了兼容CRT显示器的这些时序要求,所以理解LCD显示器时序和编程时,用CRT的方式来理解不会出错。

其时序图如下:

在进行驱动屏幕的时候只要是找到相对应的时序就可以了,主要记住还有显存的地址

 

 

       rGPCUP = 2 ;
       rGPCCON = 0xaaaaaaa9;
       rGPCDAT=1;
       rGPDUP=0; 
       rGPDCON=0xaaaaaaaa;   //引脚的初始化

    VIDCON0 |= (0<<22)|(0<<13)|(13<<6)|(1<<5)|(1<<4)|(0<<2)|(3<<0);
    VIDCON1 |= (1<<6)|(1<<5); //设置一些极性以及分频参数
    
    VIDTCON0 = VBPD<<16 | VFPD<<8 | VSPW<<0;
    VIDTCON1 = HBPD<<16 | HFPD<<8 | HSPW<<0;//设置时序
    VIDTCON2 = (LINEVAL << 11) | (HOZVAL << 0);//告诉其行列

    WINCON0 |= (1<<0);
    WINCON0 &= ~(0xf << 2);
    WINCON0 |= 0xB<<2;  //设置显示的彩色
    
    VIDOSD0A = (LeftTopX<<11) | (LeftTopY << 0);
    VIDOSD0B = (RightBotX<<11) | (RightBotY << 0); //设置屏幕的长宽
    
    VIDW00ADD0B0 = (volatile unsigned)gFB_Addr; //告诉显存首地址
    VIDW00ADD1B0 = (((HOZVAL + 1)*4 + 0) * (LINEVAL + 1)) & (0xffffff); //告诉他的显存的容量大小

 //

对于中断操作的话

中断寄存器介绍

3.内部中断。内部中断有8个寄存器,下面逐一来看。

寄存器:SUBSRCPND:当一个中断发生后,那么相应的位会被置1,表示一个中断发生了。

              INTSUBMSK:与上一个是一伙的,中断屏蔽寄存器,具体屏蔽什么,自己看手册去吧。

              INTMOD:中断的方式。一个中断可以是普通中断,也可以是快中断,在这里设置,但只能有一个快中断。

              PRIORITY :优先级寄存器,不说了。

              SRCPND :当一个中断发生后,那么相应的位会被置1,表示一个或一类中断发生了。

              INTMSK :中断屏蔽寄存器。

              INTPND :中断发生后,SRCPND中会有位置1,可能好几个(因为同时可能发生几个中断),这些中断会由优先级仲裁器选出一个最紧迫的,然后吧把INTPND中相应位置1,所以同一时间只有一位是1。也就是说前面的寄存器置1是表示发生了,只有INTPND置1,CPU才会处理。

              INTOFFSET :用来表示INTPND中哪一位置1了,好让你查询,普通中断跳转时查询用。清除INTPND、SRCPND时自动清除。

1:先开中断,设置中断入口地址,中断的话必须要对PC值进行操作,所以一定要通过汇编进入中断,返回时要对

PC进行相对应的操作,例如:

TouchHandler
    STMDB     sp!,{r0-r12,lr}
    BL Readlcdxy
    LDMIA     sp!,{r0-r12, lr}
    SUBS    pc, lr, #4   --- 因为ARM的指令结构是流线型的

2:进入中断,取消其标志位,清除其标志位不是写入0,而是写入了1才会清除,不然会一直进入中断

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值