/******************************************
实验步骤
1.配置引脚功能,将其GPI、GPJ引脚设置为VD数据输出模式,及GPJ后几位设置成LCD时钟输出;
2.设置LCD时序值,初始化时序值。
(1)需要初始化时序:VSPW、VBPD、LINEVAL、VFPD、HSPW、HBPB、HOZVAL、HFPD、
CLKVAL(在LCD芯片手册中找到初始化时序图,然后找到对应的时序参数)
(2)找到初始化这些时序信号相应的寄存器(在芯片手册中找到相应的寄存器,并对其初始化)
(3)结合LCD芯片手册和时序图将对应参数的是设置出来
3.帧缓存初始化(帧缓冲指的是在内存中开辟出来的用来存储图像数据空间,并告知给LCD的CMA。)
(1)设置窗口大小对应的寄存器
(2)告诉ADM寄存器内存起始地址和大小
4.杂项初始化()
5.画点
6.画线
7.绘制QQ图
8.单色显示
**********************************************************/
#define GPICON (*(volatile unsigned long *)0x7F008100)
#define GPJCON (*(volatile unsigned long *)0x7F008120)
#define MOFPCON (*(volatile unsigned long *)0x7410800C)
#define SPCON (*(volatile unsigned long *)0x7F0081A0)
#define VIDCON0 (*(volatile unsigned long *)0x77100000)
#define VIDCON1 (*(volatile unsigned long *)0x77100004)
#define VIDTCON0 (*(volatile unsigned long *)0x77100010)
#define VIDTCON1 (*(volatile unsigned long *)0x77100014)
#define VIDTCON2 (*(volatile unsigned long *)0x77100018)
#define WINCON0 (*(volatile unsigned long *)0x77100020)
#define VIDOSD0A (*(volatile unsigned long *)0x77100040)
#define VIDOSD0B (*(volatile unsigned long *)0x77100044)
#define VIDOSD0C (*(volatile unsigned long *)0x77100048)
#define VIDW00ADD0B0 (*(volatile unsigned long *)0x771000A0)
#define VIDW00ADD1B0 (*(volatile unsigned long *)0x771000D0) #define VSPW 9
#define VBPD 1
#define LINEVAL 271
#define VFPD 1
//#define CLKVAL 4 //10 = 100/((CLKVAL+1)*2)
#define HSPW 40
#define HBPD 1
#define HOZVAL 479
#define HFPD 1 #define LeftTopX 0
#define LeftTopY 0
#define RightBotX 479
#define RightBotY 271 #define FRAME_BUFFER 0x54000000 extern unsigned char bmp[];/* 导出的时候切记不要包含图像头数据!!!!!! */ void lcd_port_init()
{
GPICON = 0xaaaaaaaa;
GPJCON = 0xaaaaaaaa;
}
void lcd_contral_init()
{
MOFPCON = <<; /* 这一位必须设置为0 */
SPCON = 0x01; /* RGB模式下必须设置为1 */ VIDCON0 = (<<)|(<<)|(<<); /* 禁止视频输出和控制信号 选择视频时钟源 确定VCLK和CLKVAL[7:0]的值[VCLK=视频时钟源/(CLKVAL+1)] */
VIDCON1 = (<<)|(<<); VIDTCON0 = (VBPD<<)|(VFPD<<)|(VSPW<<); /* 时钟初始化 */
VIDTCON1 = (HBPD<<)|(HFPD<<)|(HSPW<<);
VIDTCON2 = (LINEVAL<<)|(HOZVAL<<); WINCON0 = (<<)|(0xb<<)|(<<); /* 禁止视频输出和视频控制信号 选择BPP图像窗口模式(24bpp) 打开半字交换控制位 */ VIDOSD0A = (LeftTopX<<)|(LeftTopY<<); /* 设置视频窗口0的位置 */
VIDOSD0B = (RightBotX<<)|(RightBotY<<);
VIDOSD0C = (LINEVAL+)|(HOZVAL+); /* 设置视频窗口0的尺寸 */ VIDW00ADD0B0 = FRAME_BUFFER; /* 设置缓存区开始地址 */
VIDW00ADD1B0 = ((FRAME_BUFFER+(HOZVAL+)**(LINEVAL+)))&(0xffffff); /* 设置缓存区结束地址 ????*/
} void lcd_init()
{
lcd_port_init();
lcd_contral_init(); //打开LCD电源
} void point(int row, int col, int color)
{
int red, green, blue;
unsigned long *point = (unsigned long*)FRAME_BUFFER;
red = (color>>) & 0xff;
green = (color>>) & 0xff;
blue = (color>>) & 0xff;
*(point + row* + col) = (green<<) | (blue<<) | red; /* 具体不知原因 试出来的 */ } void paint_bmp(const unsigned char bmp[])
{
int i,j;
unsigned char *p = (unsigned char *)bmp;
int blue, green,red;
int color; for(i=;i<;i++) /* 必须和导出的尺寸一致!!! */
{
for(j=;j<;j++)
{
red = *p++; /* 必须和导出的颜色顺序一模一样!!!!!! */
blue = *p++;
green = *p++; color = (red<<)|(green<<)|(blue<<); point(i,j,color);
}
}
} void lcd_test()
{
int y;
for(y=;y<;y++)
point(,y,0xFF0000); paint_bmp(bmp);
}

ok6410的LCD裸机范例的更多相关文章

  1. ok6410的DMA裸机总结

    1.为何使用DMA:为了提高CPU的工作效率,避免多余的等待时间 2.关于DMA控制器:(1)通道数:2440有4个通道,6410有4个DMA控制器(初始化的时候要选择),32个通道.210有两种DM ...

  2. ok6410[000] 搭建裸机开发环境

    1.安装交叉工具链arm-linux-gcc-4.3.2 先把这个工具复制到rhat系统中[rhel-server-6.3-i386-dvd.iso] 解压arm-linux-gcc-4.3.2到一个 ...

  3. Smart210学习-----lcd驱动

    帧缓冲设备 1.1帧缓冲设备:帧缓冲(framebuffer)是 Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行 ...

  4. [国嵌攻略][142][LCD驱动程序架构]

    LCD裸机驱动回顾 1.LCD初始化 1.1.控制器初始化 1.2.端口初始化 1.3.指明了帧缓冲 2.LCD图形显示 2.1.将图形数据写入帧缓冲 Linux帧缓冲体验 把图片转换成开发板屏对应的 ...

  5. Linux驱动之LCD驱动编写

    在Linux驱动之内核自带的S3C2440的LCD驱动分析这篇博客中已经分析了编写LCD驱动的步骤,接下来就按照这个步骤来字尝试字节编写LCD驱动.用的LCD屏幕为tft屏,每个像素点为16bit.对 ...

  6. tiny4412 裸机程序 七、重定位代码到DRAM【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37116637 一.关于DRAM 上一章我们讲解了如何对代码进行重定位,但是将代码重定位到只有25 ...

  7. 11. Linux——LCD驱动程序

    由上一节 得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 4) 使能LC ...

  8. 十、LCD的framebuffer设备驱动

    在读者学习本章以及后续LCD相关章节之前,最好拥有LCD裸机基础,可以参考:LCD编程. 在内核中,表示LCD使用的是framebuffer(帧缓冲,简写为fb),其内容对应于屏幕上的界面显示.修改f ...

  9. mkimage工具 加载地址和入口地址 内核启动分析

    第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...

随机推荐

  1. Oracle 10g RAC中的DRM问题及关闭

    在RAC环境中,Oracle使用GRD(Global Resource Service)来记录各个RAC节点的资源信息,具体通过GCS(Global Cache Service)和GES(Global ...

  2. Java将Unix时间戳转换成指定格式日期

    public String TimeStamp2Date(String timestampString, String formats){     Long timestamp = Long.pars ...

  3. OpenGL ES为缓存提供数据的7个步骤

    OpenGL ES为缓存提供数据的7个步骤: 1.生成glGenBuffers()——请求OpenGL ES为图形处理器控制的缓存生成一个独一无二的标识符. 2.绑定glBindBuffer()——告 ...

  4. Oracle 时间相减得出毫秒、秒、分、时、天,,【转】

    http://blog.csdn.net/redarmy_chen/article/details/7351410 oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 ...

  5. 站点发布到 IIS 后,System.Data.SqlLite.dll 末找到

    近来在部署一个站点到客户的服务器 IIS 上时,打开后却出现一个错误的页面,系统提示System.Data.SqlLite.dll 末找到,在站点部署到客户的服务器之前时,在本地测试,却没有发现什么异 ...

  6. Java基础学习(学习IT企业必读的324个JAVA面试题.pdf 整理)

    一.Java程序基础 javac 文件名.java    编译程序 java 类名               运行java程序 代码规范中,一下几点要注意: 包名:包名是全小写的名词,中间可以由点分 ...

  7. haproxy配置文件简单管理

    版本:python3功能:对haproxy配置文件进行简单的查询.添加以及删除功能操作流程:1.根据提示选择相应的选项2.进入所选项后,根据提示写入相应的参数3.查询功能会返回查询结果,添加.删除以及 ...

  8. android 3D旋转效果实现

    一说到3D,可能第一反应就是使用OpenGL ES....但是,实现这么个小功能,要动用这玩意,莫名的恐惧啊!!!!至今也没弄明白这个怎么玩... 好吧,幸亏还有个Camera类可以帮助我们,据说底层 ...

  9. 解决jQuery插件重名问题

    jQuery第三方插件命名冲突: 1.以某种方法为自己创建的jQuery插件添加命名空间,以免名称冲突.比如:在自己的插件名之前添加某类名称前缀. 2.避免影响全局命名空间.将自己的所有函数调用和变量 ...

  10. angular 页面加载时可以调用 函数处理

    转载于 作者:海底苍鹰地址:http://blog.51yip.com/jsjquery/1599.html 我希望页面加载的时候,我能马上处理页面的数据,如请求API .... 所以这样设置 在某个 ...