帧缓冲区fb在内存中,要实现fb同步显示需要设定DMA操作。

设定LCD的DMA操作,要在开始操作LCD之前。

common/lcd.c中定义lcd_init() -->

driver/video/atmel_lcdfb.c定义lcd_ctrl_init().

lcd_ctrl_init()定义了DMA与mm的联系。

67 void lcd_ctrl_init(void *lcdbase)
 68 {
 69     unsigned long value;
 70
 71     /* Turn off the LCD controller and the DMA controller */
 72     lcdc_writel(panel_info.mmio, ATMEL_LCDC_PWRCON,
 73             1 << ATMEL_LCDC_GUARDT_OFFSET);
 74
 75     /* Wait for the LCDC core to become idle */
 76     while (lcdc_readl(panel_info.mmio, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY)
 77         udelay(10);
 78
 79     lcdc_writel(panel_info.mmio, ATMEL_LCDC_DMACON, 0);
 80
 81     /* Reset LCDC DMA */
 82     lcdc_writel(panel_info.mmio, ATMEL_LCDC_DMACON, ATMEL_LCDC_DMARST);
 83
 84     /* ...set frame size and burst length = 8 words (?) */
 85     value = (panel_info.vl_col * panel_info.vl_row *
 86          NBITS(panel_info.vl_bpix)) / 32;
 87     value |= ((ATMEL_LCDC_DMA_BURST_LEN - 1) << ATMEL_LCDC_BLENGTH_OFFSET);
 88     lcdc_writel(panel_info.mmio, ATMEL_LCDC_DMAFRMCFG, value);
 89
 90     /* Set pixel clock */
 91     value = get_lcdc_clk_rate(0) / panel_info.vl_clk;
 92     if (get_lcdc_clk_rate(0) % panel_info.vl_clk)
 93         value++;
 94     value = (value / 2) - 1;
 95
 96     if (!value) {
 97         lcdc_writel(panel_info.mmio, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS);
 98     } else
 99         lcdc_writel(panel_info.mmio, ATMEL_LCDC_LCDCON1,
100                 value << ATMEL_LCDC_CLKVAL_OFFSET);
101
102     /* Initialize control register 2 */
103 #ifdef CONFIG_AVR32
104     value = ATMEL_LCDC_MEMOR_BIG | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE;
105 #else
106     value = ATMEL_LCDC_MEMOR_LITTLE | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE;
107 #endif
108     if (panel_info.vl_tft)
109         value |= ATMEL_LCDC_DISTYPE_TFT;
110
111     if (!(panel_info.vl_sync & ATMEL_LCDC_INVLINE_INVERTED))
112         value |= ATMEL_LCDC_INVLINE_INVERTED;
113     if (!(panel_info.vl_sync & ATMEL_LCDC_INVFRAME_INVERTED))
114         value |= ATMEL_LCDC_INVFRAME_INVERTED;
115     value |= (panel_info.vl_bpix << 5);
116     lcdc_writel(panel_info.mmio, ATMEL_LCDC_LCDCON2, value);
117
118     /* Vertical timing */
119     value = (panel_info.vl_vsync_len - 1) << ATMEL_LCDC_VPW_OFFSET;
120     value |= panel_info.vl_upper_margin << ATMEL_LCDC_VBP_OFFSET;
121     value |= panel_info.vl_lower_margin;
122     lcdc_writel(panel_info.mmio, ATMEL_LCDC_TIM1, value);
123
124     /* Horizontal timing */
125     value = (panel_info.vl_right_margin - 1) << ATMEL_LCDC_HFP_OFFSET;
126     value |= (panel_info.vl_hsync_len - 1) << ATMEL_LCDC_HPW_OFFSET;
127     value |= (panel_info.vl_left_margin - 1);
128     lcdc_writel(panel_info.mmio, ATMEL_LCDC_TIM2, value);
129
130     /* Display size */
131     value = (panel_info.vl_col - 1) << ATMEL_LCDC_HOZVAL_OFFSET;
132     value |= panel_info.vl_row - 1;
133     lcdc_writel(panel_info.mmio, ATMEL_LCDC_LCDFRMCFG, value);
134
135     /* FIFO Threshold: Use formula from data sheet */
136     value = ATMEL_LCDC_FIFO_SIZE - (2 * ATMEL_LCDC_DMA_BURST_LEN + 3);
137     lcdc_writel(panel_info.mmio, ATMEL_LCDC_FIFO, value);
138
139     /* Toggle LCD_MODE every frame */
140     lcdc_writel(panel_info.mmio, ATMEL_LCDC_MVAL, 0);
141
142     /* Disable all interrupts */
143     lcdc_writel(panel_info.mmio, ATMEL_LCDC_IDR, ~0UL);
144
145     /* Set contrast */
146     value = ATMEL_LCDC_PS_DIV8 |
147         ATMEL_LCDC_POL_POSITIVE |
148         ATMEL_LCDC_ENA_PWMENABLE;
149     lcdc_writel(panel_info.mmio, ATMEL_LCDC_CONTRAST_CTR, value);
150     lcdc_writel(panel_info.mmio, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT);
151
152     /* Set framebuffer DMA base address and pixel offset */
153     lcdc_writel(panel_info.mmio, ATMEL_LCDC_DMABADDR1, (u_long)lcdbase);
154
155     lcdc_writel(panel_info.mmio, ATMEL_LCDC_DMACON, ATMEL_LCDC_DMAEN);
156     lcdc_writel(panel_info.mmio, ATMEL_LCDC_PWRCON,
157             (1 << ATMEL_LCDC_GUARDT_OFFSET) | ATMEL_LCDC_PWR);
158 }

uboot中fb实现的更多相关文章

  1. Uboot中支持lcd和hdmi显示不同的logo图片【转】

    本文转载自:http://blog.csdn.net/u010865783/article/details/54953315 在lcd为竖屏,hdmi显示横屏的情况下,如果按照默认的uboot显示框架 ...

  2. uboot中添加FIQ中断及相关问题

    本文主要说明了在uboot中添加FIQ中断时遇到的问题以及对应的解决办法. 首先交代一下项目的软硬件环境.硬件方面,使用s3c2440作为主控芯片,外接串口.网卡等设备.软件方面,主控芯片上电后运行u ...

  3. u-boot中nandflash初始化流程分析(转)

    u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/ ...

  4. (四)ubuntu学习前传—uboot中对Flash和DDR的管理

    1.uboot阶段Flash的分区 (1)所谓分区,就是说对Flash进行分块管理.(2)PC机等产品中,因为大家都是在操作系统下使用硬盘的,整个硬盘由操作系统统一管理,操作系统会使用文件系统帮我们管 ...

  5. uboot中gd的定义和使用

    近期在做uboot中nand启动相关的工作,遇到一个问题一直纠结着.如今最终明确了这个问题,想想还有好多兄弟在某个黑暗的角落里或者某台电脑前纠结着呢,所以赶紧写下来以供查阅. uboot versio ...

  6. u-boot中分区和内核MTD分区关系

    一.u-boot中环境变量与uImage中MTD的分区关系 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 一般我们只需要分3-4 ...

  7. 关于Yaffs2在u-boot中的支持

    开发板是一块2G的MLC的NandFlash,页大小8k+512,为其移植u-boot到yaffs2这了.以前在Mini2440上移植过2k+64的slc的NandFlash的Yaffs2支持,当然也 ...

  8. uboot中raise:Signal #8 caught的根本原因

    在移植uboot时编译一切正常,但uboot启动中载入自己写的网卡驱动出现故障,一直在打印raise:Signal #8 caught google  百度了一番,也有非常多人遇到了这个问题,大家都说 ...

  9. 分析uboot中 make xxx_config过程

    make xxx_config实质上就是调用了 首先看MKCONFIG: [注意]SRCTREE=源文件下的目录 之后的语句: @$(MKCONFIG) $(@:_config=) arm arm92 ...

随机推荐

  1. 如何发布开源自己的框架或类库到CocoaPods - 图文讲解

    当自己的库已经上传GitHub后,那么如何快速简单的开源自己的库呢? 这里就是介绍如何将自己的类库上传到pods管理库,以便开源所有人都能方便使用. 准备前提: - 项目已上传到GitHub (注意, ...

  2. Python 绘图库的使用:matplotlib

    Matplotlib 官方API地址:https://matplotlib.org/ 例子: import matplotlib.pyplot as plt num_list=[1.5,0.6,7.8 ...

  3. 【ERROR】EXP-00091

    问题: 在我们做exp的过程中可能经常会遇到EXP-00091: Exporting questionable statistics.这样的EXP信息,其实它就是exp的error message,它 ...

  4. JMeter学习笔记--使用URL回写来处理用户会话

    如果测试的Web应用系统使用URL回写而非Cookie来保存会话信息,那么测试人员需要做一些额外的工作来测试web站点 为了正确回应URL回写,JMeter需要解析从服务器收到的HTML,并得到唯一的 ...

  5. 再看C#中的托付和事件

    在一口一个设计模式--观察者模式中.我们已经知道怎样应用观察者模式,但通过近期的深入学习,发现观察者模式存在下面缺陷: 1.抽象通知者依赖于抽象观察者: 2.每一个详细观察者被调用的方法必须一致. 比 ...

  6. explore your hadoop data and get real-time results

    deep api integration makes getting value from your big data easy 深度api集成使你大数据訪问更加easy Elasticsearch ...

  7. iOS学习笔记37-时间和日期计算

    一.时间和日期计算 我们在应用开发中,时常须要和时间打交道,比方获取当前时间,获取两个时间点相隔的时间等等,在iOS开发中与时间相关的类有例如以下几个: 1. NSDate:表示一个绝对的时间点 2. ...

  8. C# xml可序列化多值枚举脚本

    代码: using System; using System.Collections.Generic; using System.Xml; using System.Xml.Schema; using ...

  9. [svc][op]磁盘MBR分区机制- inode/Block深入实战

    一 思路: 1,磁盘物理结构及大小计算 2,分区 MBR GPT知识 3,fdisk分区 挂载 自动挂载 4,格式化文件系统 5,inode block 6,软硬链接 查看磁盘: [root@moba ...

  10. android购物车遇到的问题

    近期 做购物车的时候 ,遇到几个问题.如今 总结例如以下: 1:不让listview复用组件(购物车.或者有特殊操作的时候): 自己保存全部的view对象 public View getView(fi ...