LCD初始化

1.引脚初始化

2.时序初始化

VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数

VFBD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数

VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算

HBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数

HFPD(horizontal front porth):表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数

HSPW(horizontal sync pulse width):表示水平同步信号的宽度,用VCLK计算

LCDCON1:

CLKVAL=7   VCLK=HCLK/((CLKVAL+1)*2) VCLK=6.0-7.1MHz HCLK=100MHz

PNRMODE 11

BPPMODE 1100

ENVID

LCDCON2:

VSPW(pulse width) 4

VBPD(back proch) 4

VFPD(front proch) 4

LINEVAL 319   LINEVAL+1=320

LCDCON3:

HBPD(back proch) 1

HFPD(front proch) 14

HOZVAL 239   HOZVAL+1=240

LCDCON4:

HSPW -14 (左边边界)

LCDCON5

FRM560 1

INVVLINE 1

INVVFRAME 1

HWSWP 1

3.帧缓冲初始化

每个像素点用2个字节 16bpp,帧缓冲大小240*320*2

1.分配帧缓冲空间

2.告知帧缓冲地址给LCD控制器

4.杂项初始化

/********************************************************************
*名称:lcd
*作者:D
*时间:2015.11.18
*功能:液晶显示屏驱动
********************************************************************/ /********************************************************************
* 宏定义
********************************************************************/
#define GPCCON ( (*(volatile unsigned long *)0x56000020) ) //GPC组控制寄存器
#define GPDCON ( (*(volatile unsigned long *)0x56000030) ) //GPD组控制寄存器
#define GPGCON ( (*(volatile unsigned long *)0x56000060) ) //GPG组控制寄存器 #define LCDCON1 ( (*(volatile unsigned long *)0X4D000000) ) //LCD控制1寄存器
#define LCDCON2 ( (*(volatile unsigned long *)0X4D000004) ) //LCD控制2寄存器
#define LCDCON3 ( (*(volatile unsigned long *)0X4D000008) ) //LCD控制3寄存器
#define LCDCON4 ( (*(volatile unsigned long *)0X4D00000C) ) //LCD控制4寄存器
#define LCDCON5 ( (*(volatile unsigned long *)0X4D000010) ) //LCD控制5寄存器 #define LCDSADDR1 ( (*(volatile unsigned long *)0X4D000014) ) //帧缓冲起始地址1寄存器
#define LCDSADDR2 ( (*(volatile unsigned long *)0X4D000018) ) //帧缓冲起始地址2寄存器
#define LCDSADDR3 ( (*(volatile unsigned long *)0X4D00001C) ) //帧缓冲起始地址3寄存器 #define TPAL ( (*(volatile unsigned long *)0X4D000050) ) //临时调色板寄存器 #define HIGHT 320 //屏高,vertical
#define WIDTH 240 //屏宽,horizontal //LCDCON1配置
#define CLKVAL 7 //CLKVAL[17:8]:4 VCLK=HCLK/((CLKVAL+1)*2) VCLK=6.0-7.1MHz HCLK=100MHz
#define PNRMODE 0x3 //PNRMODE[6:5]:11 TFT LCD
#define BPPMODE 0xC //BPPMODE[4:1]:1100 16 bpp for TFT
#define ENVID_ON 1 //ENVID[0]:0 打开LCD输出
#define ENVID_OFF 0 //ENVID[0]:0 关闭LCD输出 //LCDCON2配置
#define VBPD 1 //VBPD[31:24]:2-1 垂直后肩
#define LINEVAL (HIGHT-1) //LINEVAL[23:14]:240-1 屏高,对应于Vertical Display Active
#define VFPD 1 //VFPD[13:6]:2-1 垂直前肩
#define VSPW 12 //VSPW[5:0]:13-1 垂直脉宽,对应于Vertical Blank Time //LCDCON3配置
#define HBPD 1 //HBPD[25:19]:2-1 水平后肩
#define HOZVAL (WIDTH-1) //HOZVAL[18:8]:240-1 屏宽,对应于Horizontal Display Active
#define HFPD 1 //HFPD[7:0]:2-1 水平前肩 //LCDCON4配置
#define HSPW 79 //HSPW[7:0]:80-1 水平脉宽,对应于Horizontal Blank Time //LCDCON5配置
#define FRM565 1 //FRM565[11]:1 5:6:5 Format
#define INVVLINE 1 //INVVLINE[9]:1 HSYNC Inverted
#define INVVFRAME 1 //INVVFRAME[8]:1 VSYNC Inverted
#define PWREN_ON 1 //PWREN[3]:1 打开LCD电源
#define PWREN_OFF 1 //PWREN[3]:0 关闭LCD电源
#define HWSWP 1 //HWSWP[0]:1 Swap Enable //TPAL配置
#define TPALEN_ON 1 //TPALEN[24]:1 Enable
#define TPALEN_OFF 0 //TPALEN[24]:0 Disable
#define TPALVAL 0xFF0000 //TPALVAL[23:16]:RED, TPALVAL[15:8], GREEN,TPALVAL[7:0]:BLUE /********************************************************************
* 全局变量
********************************************************************/
unsigned short LCDBUFFER[HIGHT][WIDTH]; //帧缓冲320*240*2字节 /********************************************************************
*名称:init_lcd
*功能:初始化液晶显示屏
*********************************************************************/
void init_lcd(){
unsigned long LCDBANK; //LCDSADDR1[29:21] 帧缓冲起始地址30:22位
unsigned long LCDBASEU; //LCDSADDR2[20:0] 帧缓冲起始地址21:1位
unsigned long LCDBASEL; //LCDSADDR2[20:0] 帧缓冲结束地址21:1位
unsigned long OFFSIZE; //LCDSADDR3[21:11] 每行偏移的半字
unsigned long PAGEWIDTH; //LCDSADDR3[10:0] 每行字节的半字 //初始化引脚
GPCCON = 0xAAAAAAAA; //GPC15-GPC8:10 VD[7-0], GPC7:10 LCD_LPCREVB, GPC6:10 LCD_LPCREV, GPC5:10 LCD_LPCOE, GPC4:10 VM, GPC3:10 VFRAME, GPC2:10 VLINE, GPC1:10 VCLK, GPC0:10 LEND
GPDCON = 0xAAAAAAAA; //GPD15-GPD0:10 VD[23-8]
GPGCON |= (0x3<<8); //GPG4[9:8]:11 LCD_PWRDN //初始化时序
LCDCON1 = (CLKVAL<<8)|(PNRMODE<<5)|(BPPMODE<<1)|(ENVID_OFF<<0);
LCDCON2 = (VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW<<0);
LCDCON3 = (HBPD<<19)|(HOZVAL<<8)|(HFPD<<0);
LCDCON4 = (HSPW<<0);
LCDCON5 = (FRM565<<11)|(INVVLINE<<9)|(INVVFRAME<<8)|(TPALEN_OFF<<3)|(HWSWP<<0); //初始化帧缓冲
LCDBANK = ((unsigned long)LCDBUFFER>>22)&0x1FF; //取出帧缓冲地址的30:22位
LCDBASEU = ((unsigned long)LCDBUFFER>>1)&0x1FFFFF; //取出帧缓冲起始地址的21:1位
LCDSADDR1 = (LCDBANK<<21)|(LCDBASEU<<0); LCDBASEL = ( (((unsigned long)LCDBUFFER + WIDTH*HIGHT*2)>>1) )&0x1FFFFF; //取出帧缓冲结束地址的21:1位
LCDSADDR2 = (LCDBASEL<<0); OFFSIZE = 0;
PAGEWIDTH = WIDTH*2/2; //页宽一个字是2个字节,所以乘以2,又因为该值是半字,所以除以2
LCDSADDR3 = (OFFSIZE<<11)|(PAGEWIDTH<<0); //关闭临时调色板
TPAL = (TPALEN_OFF<<24); //打开液晶显示屏
LCDCON5 |= (PWREN_ON<<3);
LCDCON1 |= (ENVID_ON<<0);
} /********************************************************************
*名称:clear_lcd
*参数:
* none
*返回:
* none
*功能:清屏
*********************************************************************/
void clear_lcd(){
//打开临时调色板
TPAL = (TPALEN_ON<<24)|(TPALVAL<<0);
}

[国嵌攻略][061][2440LCD驱动设计]的更多相关文章

  1. [国嵌攻略][052][NandFlash驱动设计_读]

    NandFlash读数据方式 1.页读,读出页中主数据区的所有数据,提供页地址(行地址) 2.随机读,读出页中指定的存储单元的数据,提供页地址(行地址)和页内偏移(行地址) 代码编写 1.根据Nand ...

  2. [国嵌攻略][054][NandFlash驱动设计_写]

    Nand Flash支持按页写和随机写两种方式,在下面实现的是按页写.闪存在写数据时,只能写入1,不能写入0,所以写函数必须和擦除函数一起使用,并且擦除函数是按块擦除. /************** ...

  3. [国嵌攻略][164][USB驱动程序设计]

    USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...

  4. [国嵌攻略][160][SPI驱动程序设计]

    SPI Flash驱动 1.打开/drivers/mtd/devices/m25p80.c驱动文件.找到初始化m25p80_init函数,其中通过spi_register_driver来注册spi设备 ...

  5. [国嵌攻略][151][nandflash驱动程序设计]

    初始化 打开/drivers/mtd/nand/s3c2410.c找到nand flash驱动程序代码,找到模块初始化函数s3c_nand_init,找到platform_driver中的probe函 ...

  6. [国嵌攻略][117][LED驱动程序设计]

    LED程序设计 1.编写内核模块 2.搭建字符驱动框架 3.实现设备方法 头文件 <linux/io.h> writel() 1.编译/安装驱动 make cp leddev.ko ... ...

  7. [国嵌攻略][065][DM9000驱动程序设计]

    移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x4800 ...

  8. [国嵌攻略][104][Linux内核模块设计]

    内核模块示例 #inlcude <linux/init.h> #inlcude <linux/module.h> static int hello_init(){ printk ...

  9. [国嵌攻略][165][usb下载线驱动设计]

    查看USB设备的生产商ID和设备ID 示例: lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 生产商ID是1d ...

随机推荐

  1. js垃圾回收机制

    垃圾回收机制,简称GC(garbage collection),会定期(周期性)地回收那些不再使用的变量,然后释放其内存. 而内存占用的情况有很多: 1.变量 2.字面量对象声明:var obj = ...

  2. 学习 Kubernetes 的 Why 和 How - 每天5分钟玩转 Docker 容器技术(114)

    这是一个系统学习 Kubernetes 的教程,有下面两个特点: 系统讲解当前最流行的容器编排引擎 Kubernetes包括了安装部署.应用管理.网络.存储.监控.日志管理等多各个方面. 重实践并兼顾 ...

  3. Webpack 2 视频教程 018 - 使用可视化图表进行统计分析打包过程

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  4. 区分javascript中的toString(),toLocaleString(),valueOf()方法

    首先我们随意创建一个对象,这很简单,打开FF浏览器的Firebug切换到控制台或者打开webkit浏览器的审查元素功能. 输入以下内容: var obj1=[1,2,3,4,5] var obj2=[ ...

  5. 微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信小程序红包开发语音红包

    公司最近开发的一个微信语音红包,就是前些时间比较火的包你说红包小程序.如何提高识别的精准度呢. 在说精准度之前,先大概说下整个语音识别的开发流程.前面我有文章已经说到过了.具体我就不谈了.一笔带过. ...

  6. commons-dbutils 字段名称转换

    我们在写bean的时候,字段通常都使用小驼峰命名法,但是在设计数据库时,一般使用下划线分割命名.这样,在取出数据库字段时,还需要转换.如何简洁的实现这种转换呢? 你能遇到的问题,只要是普遍存在的,大家 ...

  7. sql server 各种等待类型-转

    等待的类型 资源等待 当某个工作线程请求访问某个不可用的资源(因为该资源正在由其他某个工作线程使用,或者该资源尚不可用)时,便会发生资源等待.资源等待的示例包括锁等待.闩锁等待.网络等待以及磁盘 I/ ...

  8. PHP 微信分享页面(图文)

    首先确保你的公众号配置没有问题,详细请看: PHP 微信公众号-创建菜单-配置 1.获取签名包 这里需要你的appid 和 开发者密码 //获取签名包 public function getSignP ...

  9. SEO之网站关键词的优化 :首页,内页关键字,长尾关键字

    这篇文章主要讲的是SEO之网站关键词的优化 :首页,内页关键字,长尾关键字. 为了查找方便,小A汇总了所有SEO优化的相关教程,方便大家查找到自己想要的SEO优化技巧: SEO优化教程汇总. 网站关键 ...

  10. python如何玩“跳一跳”!(windows安桌版本请进!)

    最近"跳一跳",很火爆,有木有? 看了一下网上的教程,动作搭建了一下环境,就可以用脚本自动跑起来啦!!! 下面说一下android手机的实现过程: 首先,是python环境的搭建 ...