CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 19714|回复: 13

CT U-boot驱动16位并口LCD(320*480)

[复制链接]
发表于 2014-2-14 09:50:20 | 显示全部楼层 |阅读模式
本帖最后由 liu11yang11 于 2014-2-14 09:57 编辑

CT的LCD显示没有引出,为了学习linux如何驱动LCD只能用GPIO驱动了
u-boot比较简单,先修改它,kernel的修改在别的板块
修改流程如下:

u-boot中最终实现刷屏的函数是
  1. common/lcd.c
  2. void lcd_sync(void)
复制代码
原来实现的是写显存,硬件控制器自动把显存数据显示到LCD,我用分配的显存当BUF改成直驱
  1. void lcd_sync(void)
  2. {
  3.         LCD_Draw_All(lcd_base);
  4. }
  5. void LCD_Draw_All(unsigned short * lcdbase)
  6. {
  7.     LCD_GPIO_CS_LOW;
  8.     LCD_Set_Disp_Area(0,0,480,320);
  9.     LCD_Write_Disp_Data(lcdbase,320*480);
  10.     LCD_GPIO_CS_HIGH;
  11. }
复制代码
主要实现这个函数就可以,效率不是很高,每次都全屏刷,以后有时间再详细研究效率。
初始化也是很重要的,这个要修改makefile,把原来的屏文件换成自己的,初始化函数入口在
  1. common/lcd.c
  2. static int lcd_init(void *lcdbase)

  3. ....
  4. lcd_ctrl_init(lcdbase);
  5. ....

复制代码
屏的初始化函数写过驱动的人就都会了,具体初始化参数就不写了,每个屏都不一样
下面说一下硬件接口
  1. /************片选************/
  2. #define LCD_GPIO_CS         "PG0"

  3. /************写***********/
  4. #define LCD_GPIO_WR         "PG2"

  5. /************读***********/
  6. //#define LCD_GPIO_RD         "PG1"
  7. #define LCD_GPIO_RESET         "PG1"

  8. /************命令数据选择***********/
  9. #define LCD_GPIO_RS         "PG3"

  10. /************数据总线***********/
  11. #define LCD_GPIO_D0         "PG4"
  12. #define LCD_GPIO_D1         "PG5"
  13. #define LCD_GPIO_D2         "PG6"
  14. #define LCD_GPIO_D3         "PG7"
  15. #define LCD_GPIO_D4         "PG8"
  16. #define LCD_GPIO_D5         "PG9"
  17. #define LCD_GPIO_D6         "PG10"
  18. #define LCD_GPIO_D7         "PG11"
  19. #define LCD_GPIO_D8         "PB5"
  20. #define LCD_GPIO_D9         "PB6"
  21. #define LCD_GPIO_D10         "PB7"
  22. #define LCD_GPIO_D11         "PB8"
  23. #define LCD_GPIO_D12         "PB9"
  24. #define LCD_GPIO_D13         "PB10"
  25. #define LCD_GPIO_D14         "PB11"
  26. #define LCD_GPIO_D15         "PB12"
复制代码
在CT的开发板上要把几个电阻的位置换一下,要不gpio都没接到针脚上,具体的后面补充

最低层的屏驱动接口
  1. #define dat_low_sel        0x00000ff0
  2. #define dat_low_usel        0xfffff00f
  3. #define dat_high_sel        0x00001fe0
  4. #define dat_high_usel    0xffffe01f

  5. #define dat_low_addr     0x1c208e8
  6. #define dat_high_addr     0x1c20834

  7. void LCD_ILI9486_CMD(u32 cmd)
  8. {
  9.         u32 dat_low_reg=readl(dat_low_addr);
  10.         u32 dat_high_reg=readl(dat_high_addr);

  11.         dat_low_reg &= ~ (dat_rs|dat_wr);
  12.         
  13.         dat_low_reg &= dat_low_usel;
  14.         dat_low_reg |= ((cmd & 0x000000ff)<<4);
  15.         writel(dat_low_reg,dat_low_addr);
  16.         
  17.         dat_low_reg |= (dat_rs|dat_wr);
  18.         writel(dat_low_reg,dat_low_addr);
  19. }
  20. void LCD_ILI9486_DATA(u32 data)
  21. {
  22.     u32 dat_low_reg=readl(dat_low_addr);
  23.     u32 dat_high_reg=readl(dat_high_addr);

  24.     dat_low_reg &= ~ dat_wr;
  25.    
  26.     dat_low_reg &= dat_low_usel;
  27.     dat_low_reg |= ((data & 0x000000ff)<<4);
  28.     writel(dat_low_reg,dat_low_addr);

  29.     dat_high_reg &= dat_high_usel;
  30.     dat_high_reg |= ((data & 0x0000ff00)>>3);;
  31.     writel(dat_high_reg,dat_high_addr);
  32.    
  33.     dat_low_reg |= dat_wr;
  34.     writel(dat_low_reg,dat_low_addr);
  35. }
复制代码
这实际上已经是优化过的接口,直接操作输出数据寄存器(地址是dat_low_addr和dat_high_addr),比官方带的gpio速度至少快10倍!!

最后实现的效果已经在之前的帖子里贴过图片了
再引用一下吧



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

 楼主| 发表于 2014-2-14 09:54:19 | 显示全部楼层
本帖最后由 liu11yang11 于 2014-2-14 09:56 编辑

硬件要修改的内容如下图
把这个几个选通电阻都切换过去,要不不是gpio功能
实际制作的也在下面,背光没管理,也没限流,实在没gpio了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2014-5-27 22:34:18 | 显示全部楼层
liu11yang11 发表于 2014-2-14 09:54
硬件要修改的内容如下图
把这个几个选通电阻都切换过去,要不不是gpio功能
实际制作的也在下面,背光没管理 ...

楼主,这个选通要怎么搞?是要重新拆下来焊吗?
回复 支持 反对

使用道具 举报

发表于 2014-5-30 19:10:03 | 显示全部楼层
内核驱动学学学 发表于 2014-5-27 22:34
楼主,这个选通要怎么搞?是要重新拆下来焊吗?

楼主调的哪一种型号的屏啊

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-7 08:35:02 | 显示全部楼层
内核驱动学学学 发表于 2014-5-27 22:34
楼主,这个选通要怎么搞?是要重新拆下来焊吗?

是要动烙铁的
回复 支持 反对

使用道具 举报

发表于 2014-7-27 22:00:24 | 显示全部楼层
请问TTL-50p 7寸的屏
怎么接啊能指导一二吗?谢谢!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-7 14:18:06 | 显示全部楼层
zy276574299 发表于 2014-7-27 22:00
请问TTL-50p 7寸的屏
怎么接啊能指导一二吗?谢谢!!

要看手册
回复 支持 反对

使用道具 举报

发表于 2014-8-12 20:41:18 | 显示全部楼层
liu11yang11 发表于 2014-8-7 14:18
要看手册

针脚定义我有了,都说手册?什么是手册?请高手解释。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-14 14:14:43 | 显示全部楼层
官方技术指导手册
回复 支持 反对

使用道具 举报

发表于 2014-9-18 22:22:04 | 显示全部楼层
这个内容不错,需要收藏。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-4-24 13:34 , Processed in 0.026606 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部