[技术问答] n32926的LCD驱动,数据显示问题

[复制链接]
2406|8
 楼主| love8023 发表于 2017-5-19 17:02 | 显示全部楼层 |阅读模式
各位大神好!
小弟最近一直在做 n32926 的 LCD,数据手册和 LCD 芯片手册看了几圈了,关于初始化配置方面也算是配置了,但是在数据显示方面,小弟一直很迷糊,希望懂的大神能帮忙看一下代码,点拨一下。
谢谢


  1. typedef        unsigned int U32;
  2. volatile U32 FrameBuf[480][272];

  3. /* 填充颜色 */
  4. void paint_back(U32 c){
  5.         unsigned int i, j;
  6.         for(i = 100; i < 200; i++){
  7.                 for(j = 100; j < 200; j++){
  8.                         FrameBuf[i][j] = c;       
  9.                 }       
  10.         }
  11. }

  12. void LCDDelay(int c){
  13.         int i;
  14.         for(; c != 0; c--){
  15.                 for(i = 0; i < 10; i++);       
  16.         }
  17. }

  18. static int lcd_open(struct inode *inode, struct file *file){
  19.         unsigned int clock_div, u32prediv, w55fa92_upll_clock;

  20.         ENTER();

  21.         /* reset IC */
  22. #if 0
  23.         outpw(REG_AHBCLK, inpw(REG_AHBCLK) | VPOST_CKE | HCLK4_CKE);
  24.     outpw(REG_AHBIPRST, inpw(REG_AHBIPRST) | VPOST_RST);
  25.     LCDDelay(10);
  26.     outpw(REG_AHBIPRST, inpw(REG_AHBIPRST) & ~VPOST_RST);
  27. #endif

  28.         outl((inl(REG_AHBCLK) | VPOST_CKE | HCLK4_CKE), REG_AHBCLK);
  29.         outl(inl(REG_AHBIPRST) | VPOST_RST, REG_AHBIPRST);
  30.     LCDDelay(10);
  31.         outl(inl(REG_AHBIPRST) & ~VPOST_RST, REG_AHBIPRST);

  32.         /* 时钟设置: DCLK 频率 -> 9MHz */
  33.         w55fa92_upll_clock = 162000;
  34.         clock_div = w55fa92_upll_clock / 9000;
  35.         u32prediv = 0;
  36.         clock_div--;

  37.         nvt_lock();
  38.         /* [2:0] 000 : LCD_SrcCLK / 1 */
  39.         outl((inl(REG_CLKDIV1) & ~VPOST_N0) | u32prediv, REG_CLKDIV1);
  40.         /* [15:8] VPOST_N = clock_div:
  41.          * ECLKvpost = LCD_SrcCLK / (VPOST_N + 1) */
  42.         outl((inl(REG_CLKDIV1) & ~VPOST_N1) | (clock_div << 8), REG_CLKDIV1);
  43.         /* [4:3] LCD_SrcCLK = UCLKOut */
  44.         outl((inl(REG_CLKDIV1) & ~VPOST_S) | (3 << 3), REG_CLKDIV1);
  45.         nvt_unlock();

  46.         /* 引脚设置 */
  47.         /* 使能时钟信号 */
  48.         outl((inl(REG_GPBFUN1) & ~MF_GPB15) | 0x20000000, REG_GPBFUN1);
  49.         /* 使能 LVDATA[15:0] -> GPC[15:0] */
  50.         outl(0x22222222, REG_GPCFUN0);
  51.         outl(0x22222222, REG_GPCFUN1);
  52.         /* 使能 LVDATA[17:16] -> GPE[1:0]*/
  53.         outl((inl(REG_GPEFUN1) & ~(MF_GPE0 + MF_GPE1)) | 0x22, REG_GPEFUN1);
  54.         /* 使能 LVDATA[23:18] -> GPB[12:7] */
  55.         outl((inl(REG_GPBFUN0) & ~MF_GPB7) | 0x20000000, REG_GPEFUN0);
  56.         outl((inl(REG_GPBFUN1) & 0xFFF00000) | 0x00022222, REG_GPEFUN1);
  57.         /* 使能 LCD_HS, LCD_VS, LCD_DE -> GPD[12:9] */
  58.         outl((inl(REG_GPDFUN1) & 0xFFFF000F) | 0x00002220, REG_GPDFUN1);

  59. #if 0
  60.         outl((inl(REG_GPIOC_OMD) & 0xFFFF0000) | 0x0000FFFF, REG_GPIOC_OMD);
  61.         outl((inl(REG_GPIOE_OMD) & 0xFFFCFFFF) | 0x00030000, REG_GPIOE_OMD);
  62.         outl((inl(REG_GPIOB_OMD) & 0xFFFFFE7F) | 0x00000180, REG_GPIOB_OMD);
  63. #endif

  64.         outl((inl(REG_GPIOC_PUEN) & 0xFFFF0000), REG_GPIOC_PUEN);
  65.         outl((inl(REG_GPIOE_PUEN) & 0xFFFCFFFF), REG_GPIOE_PUEN);
  66.         outl((inl(REG_GPIOB_PUEN) & 0xFFFFFE7F), REG_GPIOB_PUEN);

  67.         /* LCD image LCD interface */
  68.         outl((inl(REG_LCM_TVCtl) & ~TVCtl_LCDSrc) | (1 << 10), REG_LCM_TVCtl);

  69.         /* 配置 LCD 接口 */
  70.         /* [8] 使能 sync with TV */
  71.         outl(inl(REG_LCM_LCDCPrm) & ~LCDCPrm_LCDSynTv, REG_LCM_LCDCPrm);
  72.         /* [1:0] LCD type select:
  73.          *  0x00 High Resolution mode
  74.          *  0x01 Sync-type TFT LCD
  75.          *  0x10 Reserved
  76.          *  0x11 MPU-type LCD */
  77.         outl(inl(REG_LCM_LCDCPrm) & ~LCDCPrm_LCDTYPE, REG_LCM_LCDCPrm);

  78.         /* [21:20] 配置 LCD 并行 RGB 数据总线(高速模式下)
  79.          *  00 16pin, RGB565 output
  80.          *  01 18pin, RGB666 output
  81.          *  10 24pin, RGB888 output
  82.          *  11 Reserved*/
  83.         outl((inl(REG_LCM_LCDCCtl) & ~LCDCCtl_PRDB_SEL) | (0x2 << 20), REG_LCM_LCDCCtl);

  84.         /* [11:10] LCDSrc, [9:8] TVSrc: framebuffer
  85.          *                00 Reserved                                        01 Framebuffer
  86.          *                10 Register setting color        11 internal color bar
  87.          * NotchE;
  88.          * [0] enable TV encoder: 0-disable        1-enable
  89.          * [23:22]:00 NTSC;
  90.          * [15] TV output in D1 size: 0-640x480(VGA) 1-720x480(D1)
  91.          * [3] Interlace: 0-non-interlace        1-interlace
  92.          * ??? */
  93.         outl((inl(REG_LCM_TVCtl) & 0xFFFF30DA) | 0x00008529, REG_LCM_TVCtl);

  94.         /* 设置水平同步扫描时间线(unit: DCLK):
  95.          * 水平同步脉冲宽度 HSPW [31:24] .min 1,
  96.          * 前肩 HFPD [23:12] .min 2 .typ 8
  97.          * 后肩 HBPD [11:0] .min 8 .typ 43 */
  98.         outl(0x6302B008, REG_LCM_TCON1);

  99.         /* 设置垂直同步扫描时间线(unit: H):
  100.          * 水平同步脉冲宽度 HSPW [23:16] .min 1 .typ 10,
  101.          * 前肩 HFPD [15:8] .min 1 .typ 4
  102.          * 后肩 HBPD [7:0] .min 2 .typ 12 */
  103.         outl((inl(REG_LCM_TCON2) & 0xFF000000) | 0x000A040C, REG_LCM_TCON2);

  104.         /* 设置每行活跃数据的数量和每次面板显示的行数: 480x272
  105.          * [31:16] active data count per line: 480
  106.          * [15:0] lines per-panel: 272 */
  107.         outl(0x01E00110, REG_LCM_TCON3);
  108.         /* 设置桢缓冲的大小:
  109.          * [32:16] FB_X: 480 - 1
  110.          * [15:0] FB_Y: 272 - 1*/
  111.         outl(0x01DF010F, REG_LCM_FB_SIZE);
  112.         /* 信号极性,MPU 发出的是正脉冲,而 LCD 需要的是反的
  113.          * 根据芯片手册:取 VDEN HSYNC VSYNC DCLK 的极性 */
  114.         outl((inl(REG_LCM_TCON4) & 0xFFFFFFF0) | 0xE, REG_LCM_TCON4);

  115.         /* set TV control register and LCD to framebuffer, disable DAC*/
  116. //        outl((inl(REG_LCM_TVCtl) & 0xFFFFF0DA) | 0x00000510, REG_LCM_TVCtl);

  117.         /* 桢缓冲开始地址 */
  118. //        U32 FrameBuf = (U32)FrameBuf | 0X80000000;
  119.         outl(FrameBuf, REG_LCM_FSADDR);
  120.        

  121.         /* 使能 LCD 控制器
  122.          * [16] endian select: 0- big endian                1- little endian
  123.          * [3:1] framebuffer data select:
  124.          *        000        RGB555                                        001        RGB565
  125.          *        010        RGB888(dummy,R,G,B)                011 RGB888(R,G,B,dummy)
  126.          * [0] LCD controler run: 0 disable                1 enable */
  127.         outl((inl(REG_LCM_LCDCCtl) & LCDCCtl_FBDS) | (2 << 1), REG_LCM_LCDCCtl);
  128.         outl((inl(REG_LCM_LCDCCtl) & LCDCCtl_YUVBL) | (1 << 16), REG_LCM_LCDCCtl);
  129.         outl((inl(REG_LCM_LCDCCtl) & LCDCCtl_LCDRUN) | 1, REG_LCM_LCDCCtl);

  130.         paint_back(0xCD5C5C);
  131.         outl((U32)FrameBuf, REG_LCM_FSADDR);

  132.         return 0;
  133. }
gejigeji521 发表于 2017-5-20 15:07 | 显示全部楼层
这个开发板官方没有公开任何资料。
gejigeji521 发表于 2017-5-20 15:08 | 显示全部楼层
哦,错了,是这个芯片,官方就给了一个破手册。
szsfy 发表于 2017-5-20 16:04 来自手机 | 显示全部楼层
不懂,友情路过
yiyigirl2014 发表于 2017-5-20 22:08 | 显示全部楼层
网上没有找到这个芯片的资料,不好乱说。
yiy 发表于 2017-5-22 16:39 | 显示全部楼层
这个应该是新唐有私底下培训的,最近看到有人发培训的活动。
chenwei6991627 发表于 2017-5-23 13:35 | 显示全部楼层
实在解决不了,可以有偿啊!
734774645 发表于 2017-5-23 22:30 | 显示全部楼层
是不是这个芯片的开发资料也是要花钱买的,要不网上都找不到呢。
598330983 发表于 2017-5-24 14:07 | 显示全部楼层
楼主的这个芯片的资料可以分享下吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部