JZ2440 裸机驱动 第13章 LCD控制器(2)

- c = getc();
- printf("%c\n\r", c);
- switch(c)
- {
- case '':
- {
- Test_Lcd_Tft_8Bit_240320();
- break;
- }
- case '':
- {
- Test_Lcd_Tft_16Bit_240320();
- break;
- }
- case '':
- {
- Test_Lcd_Tft_8Bit_640480();
- break;
- }
- case '':
- {
- Test_Lcd_Tft_16Bit_640480();
- break;
- }
- }
main.c主体代码
- 行号
- 11行/*
- 12行 *以240x320、8BPP的显示模式测试TFT LCD
- 13行 */
- 14行void Test_Lcd_Tft_8Bit_240320(void)
- 15行{
- 16行 Lcd_Port_Init(); //设置LCD引脚
- 17行 Tft_Lcd_Init(MODE_TFT_8BIT_240320); //初始化LCD控制器
- 18行 Lcd_PowerEnable(, ); //设置LCD_PWREN有效,它用于打开LCD的电源
- 19行 Lcd_EnvidOnOff(); //使能LCD控制器输出信号
lcdlib.c->Test_Lcd_Tft_8bit_240320()_1
- Lcd_Palette8Bit_Init(); //初始化调色板
- ClearScr(0x0); //清屏
- printf("[TFT 64K COLOR(16bpp) LCD TEST]\n");
- printf("1. Press any key to draw line\n");
- get();
- DrawLine( , , , , ); //颜色为DEMO256pal[0]
- DrawLine( , , , , ); //颜色为DEM0256pal[1]
- DrawLine(, , , , ); //...
- DrawLine( , , , , );
- DrawLine( , , , , );
- DrawLine(, , , , );
- DrawLine(, , , , );
- DrawLine( , , , , );
- printf("2. Press any key to draw circles\n");
- getc();
- Mire();
- printf("3. Press any key to fill the screem with one color\n");
- getc();
- ClearScr(); //输出单色图像,颜色值等于DEMO256pal[128]
- printf("4. Press any key to fill the screem by temporary palette\n");
- getc();
- ClearScrWithTmpPlt(0x0000ff); //输出单色图像,颜色为蓝色
- printf("5. Press any key to fill the screem by palette\n");
- getc();
- DisableTmpPlt(); //关闭临时调色板寄存器
- ChangePalette(0xffff00); //改变整个调色板为黄色,输出单色图像
- printf("6. Press any key to stop the testing\n");
- getc();
- Lcd_EnvidOnOff();
- }
lcdlib.c->Test_Lcd_Tft_8bit_240320()_2
- /*
- *初始化LCD控制器
- *输入参数:
- *type:显示模式
- * MODE_TFT_8BIT_240320:240*320 8bpp的TFT LCD
- * MODE_TFT_16BIT_240320:240*320 16bpp的TFT LCD
- * MODE_TFT_8BIT_640480:640*480 8bpp的TFT LCD
- * MODE_TFT_16BIT_640480:640*480 16bpp的TFT LCD
- */
- void Tft_Lcd_Init(int type)
- {
- switch(type)
- {
- case MODE_TFT_8BIT_240320:
- /*
- *设置LCD控制器的控制寄存器LCDCON1~5
- *1.LCDCON1
- * 设置VCLK的频率:VCLK(Hz) = HCLK/[(CLKVAL+1) x 2]
- * 选择LCD类型:TFT LCD
- * 设置显示模式:8BPP
- * 先禁止LCD信号输出
- *2.LCDCON2/3/4
- * 设置控制信号的时间参数
- * 设置分辨率,即行数和列数
- *现在,可以根据公式算出显示器的分辨率
- *当HCLK = 100MHz时,
- *Frame Rate = 1/[{(VSPW+1) + (VBPD+1) + (LIINEVAL+1) + (VFPD+1)} x
- * {(HSPW+1) + (HBPD+1) + (HFPD+1) + (HOZVAL+1)} x
- * {(2x(CLKVAL+1)/(HCLK))}]
- * = 60Hz
- *3.LCDCON5
- * 设置显示模式为8BPP时,调色板中的数据格式为5:6:5
- * 设置HSYNC、VSYNC脉冲的极性(这需要参考具体的LCD的接口信号):反转字节交换使能
- */
- LCDCON1 = (CLKVAL_TFT_240320 << ) | (LCDTYPE_TFT << ) | \
- (BPPMODE_8BPP << ) | (ENVID_DISABLE << );
- LCDCON2 = (VBPD_240320 << ) | (LINEVAL_TFT_240320 << ) | \
- (VFPD_240320 << ) | (VSPW_240320);
- LCDCON3 = (HBPD_240320 << ) | (HOZVAL_TFT_240320 << ) | (HFPD_240320);
- LCDCON4 = HSPW_240320;
- LCDCON5 = (FORMAT8BPP_565 << ) | (HSYNC_INV << ) | (VSYNC_INV << ) | \
- (BSWP << );
lcddrv.c->Tft_Lcd_Init()
- 行号
- 78行 /*
- 79行 *设置LCD控制器的地址寄存器:LCDSADDR1~3
- 80行 *帧内存与视口(view point)完全吻合
- 81行 *图像数据格式如下(8BPP时,帧缓冲区中的数据为调色板中的索引值):
- 82行 * |--------- PAGEWIDTH ----------|
- 83行 * y/x 0 1 2 239
- 84行 * 0 idx idx idx ... idx
- 85行 * 1 idx idx idx ... idx
- 86行 *1.LCDSADDR1
- 87行 * 设置LCDBANK、LCDBASEU
- 88行 *2.LCDSADDR2
- 89行 * 设置LCDBASEL:帧缓冲区的结束地址A[21:1]
- 90行 *3.LCDSADDR3
- 91行 * OFFSIZE等于0,PAGEWIDTH等于(240/2)
- 92行 */
- 93行 LCDSADDR1 = ((LCDFRAMEBUFFER >> ) << ) | LOWER21BITS (LCDFRAMEBUFFER >> );
- 94行 LCDSADDR2 = LOWER21BITS((LCDFRAMEBUFFER+ \
- 95行 (LINEVAL_TFT_240320 + ) x (HOZVAL_TFT_240320 + ) x ) >> );
- 96行 LCDSADDR3 = ( << ) | (LCD_XSIZE_TFT_240320/);
- 97行
设置LCD控制器的地址寄存器
- 行号
- 98行 /*禁止临时调色板寄存器*/
- 99行 TPAL = ;
- 100行
- 101行 fb_base_addr = LCDFRAMEBUFFER;
- 102行 bpp = ;
- 103行 xsize = ;
- 104行 ysize = ;
- 105行
- 行号
- 296行 /*
- 297行 *设置调色板
- 298行 */
- 299行 void Lcd_Palette8Bit_Init(void)
- 300行 {
- 301行 int i;
- 302行 volatile unsigned int *palette;
- 303行
- 304行 LCDCON5 |= (FORMAT8BPP_565 << ); //设置调色板中数据格式为:5:6:5
- 305行
- 306行 palette = (volatile unsigned int *)PALETTE;
- 307行 for(i = ; i < ; i++)
- 308行 *palette++ = DEMO256pal[i];
- 309行 }
- 310行
Lcd_Palette8Bit_Init()
(4)ChangePalette函数。
- 行号
- 311行 /*
- 312行 *改变调色板为一种颜色
- 313行 *输入参数:
- 314行 * color:颜色值,格式为0xRRGGBB
- 315行 */
- 316行 void ChangePalette(UINT32 color)
- 317行 {
- 318行 int i;
- 319行 unsigned char red, green, blue;
- 320行 UINT32 *palette;
- 321行
- 322行 palette = (UINT32 *)PALETTE;
- 323行 for(i = ; i < ; i++)
- 324行 {
- 325行 red = (color >> ) & 0xff;
- 326行 green = (color >> ) & 0xff;
- 327行 blue = (color >> ) & 0xff;
- 328行 color = (red << ) | (green << ) | blue; //格式:5:6:5
- 329行
- 330行 while((LCDCON5 >> ) == ); //等待直到VSTATUS不为“有效”
- 331行 *palette++ = color;
- 332行 }
- 333行 }
- 334行
ChangePalette()
- /*
- *设置是否输出LCD电源开关信号LCD_PWREN
- *输入参数:
- * invpwren:0表示LCD_PWREN有效时为正常极性
- * 1表示................反转极性
- * pwren :0表示LCD_PWREN输出有效
- * 1表示LCD_PWREN输出无效
- */
- void Lcd_PowerEnable(int invpwren, int pwren)
- {
- GPGCON = (GPGCON & (~( << ))) | ( << ); //GPG4用于LCD_PWREN
- GPGUP = (GPGUP & (~( << ))) | ( << ); //禁止内部上拉
- LCDCON5 = (LCDCON5 & (~( << ))) | (invpwren << ); //设置LCD_PWREN的极性:正常/反转
- LCDCON5 = (LCDCON5 & (~( << ))) | (pwren << ); //设置是否输出LCD_PWREN
- }
Lcd_PowerEnable()
- /*
- *设置LCD控制器是否输出信号
- *输入参数:
- *onoff:
- * 0:关闭
- * 1:打开
- */
- void Lcd_EnvidOnOff(int onoff)
- {
- if(onoff == )
- LCDCON1 |= ; //ENVID ON
- else
- LCDCON1 &= 0x3fffe; //ENVID OFF
- }
Lcd_EnvidOnOff
- /*
- *使用临时调色板寄存器输出单色图像
- *输入参数:
- * color:颜色值,格式为0xRRGGBB
- */
- void ClearScrWithTmpPlt(UINT32 color)
- {
- TPAL = ( << ) | ((color & 0xffffff) << );
- }
- /*
- *停止使用临时调色板寄存器
- */
- void DisableTmpPlt(void)
- {
- TPAL = ;
- }
ClearScrWithTmpPlt()和DisableTmpPlt()
- 行号
- 8行 extern unsigned int fb_base_addr;
- 9行 extern unsigned int bpp;
- 10行 extern unsigned int xsize;
- 11行 extern unsigned int ysize;
- 12行
- 13行 /*
- 14行 *画点
- 15行 *输入参数:
- 16行 * x、y:像素坐标
- 17行 * color:颜色值
- 18行 * 对于16BPP:color的格式为0xAARRGGBB(AA = 透明度),
- 19行 * 需要转换为5:6:5格式
- 20行 * 对于8BPP:color为调色板中索引值,
- 21行 * 其颜色取决于调色板中的数值
- 22行 */
- 23行 void PutPixel(UINT32 x, UINT32 y, UINT32 color)
- 24行 {
- 25行 UINT8 red, green, blue;
- 26行
- 27行 switch(bpp){
- 28行 case :
- 29行 {
- 30行 UINT16 *addr = (UINT16 *)fb_base_addr + (y * xsize + x);
- 31行 red = (color >> ) & 0xff;
- 32行 green = (color >> ) & 0xff;
- 33行 blue = (color >> ) & 0xff;
- 34行 color = (red << ) | (green << ) | blue; //格式:5:6:5
- 35行 *addr = (UINT16)color;
- 36行 break;
- 37行 }
- 38行
- 39行 case :
- 40行 {
- 41行 UINT8 *addr = (UINT8 *)fb_base_addr + (y * xsize + x);
- 42行 *addr = (UINT8)color;
- 43行 break;
- 44行 }
- 45行
- 46行 default:
- 47行 break;
- 48行 }
- 49行 }
- 50行
PutPixel
JZ2440 裸机驱动 第13章 LCD控制器(2)的更多相关文章
- JZ2440 裸机驱动 第13章 LCD控制器(1)
本章目标 了解LCD显示器的接口及时序: 掌握S3C2410/S3C2440 LCD控制器的使用方法: 了解帧缓冲区的概念,掌握如何设置帧缓冲区来显示图像: 13.1 LCD和LCD控制器 13.1 ...
- JZ2440 裸机驱动 第6章 存储控制器
本章目标: 了解S3C2410/S3C2440地址空间的布局 掌握如何通过总线形式访问扩展的外设,比如内存.NOR Flash.网卡等 ························ ...
- JZ2440 裸机驱动 第10章 系统时钟和定时器
本章目标 了解S3C2410/S3C2440的时钟体系结构 掌握通过设置MPLL改变系统时钟的方法 掌握在不同的频率下设置存储控制器的方法 掌握PWM定时器的用法 ...
- JZ2440 裸机驱动 第8章 NAND Flash控制器
本章目标 了解NAND Flash 芯片的接口 掌握通过NAND Flash控制器访问NAND Flash的方法 8.1 NAND Flash介绍和NAND Flash控制器使用 NAND ...
- JZ2440 裸机驱动 第14章 ADC和触摸屏接口
本章目标: 了解S3C2410/S3C2440和触摸屏的结构: 了解电阻触摸屏的工作原理和等效电路图: 了解S3C2410/S3C2440触摸屏控制器的多种工作模式: ...
- JZ2440 裸机驱动 第12章 I2C接口
本章目标: 了解I2C总线协议: 掌握S3C2410/S3C2440中I2C接口的使用方法: 12.1 I2C总线协议及硬件介绍 12.1.1 I2C总线协议 1 I2C总线的概念 2 I2C总线的信 ...
- JZ2440 裸机驱动 第7章 内存管理单元MMU
本章目标: 了解虚拟地址和物理地址的关系: 掌握如何通过设置MMU来控制虚拟地址到物理地址的转化: 了解MMU的内存访问权限机制: 了解TLB.Cache.Write ...
- JZ2440 裸机驱动 第9章 中断体系结构
本章目标: 了解ARM体系CPU的7种工作模式 了解S3C2410/S3C2440中断体系结构 掌握S3C2410/S3C2440的中断服务程序的编写方法 9.1 S3C241 ...
- JZ2440 裸机驱动 第5章 GPIO接口
本章目标: 掌握嵌入式开发的步骤:编程.编译.烧写程序.运行 通过GPIO的操作了解软件如何控制硬件 5.1 GPIO硬件介绍 S3C2440A有130个多功能输入/输出口引脚 ...
随机推荐
- PHP:第四章——PHP数组查找,替换,过滤,判断相关函数
<pre> <?php //查找,替换,过滤,判断相关函数 header("Content-Type:text/html;charset=utf-8"); /*知 ...
- learning uboot test command
uboot commad test test - minimal test like /bin/sh so we can use test command to some judge for exam ...
- learning armbian steps(2) ----- armbian 镜像编译
参考:https://docs.armbian.com/Developer-Guide_Build-Preparation/ 通过如下指令进行编译: apt-get -y -qq install gi ...
- Automatic Login Using sshpass
#! /bin/bash user=root password=12345678 remote_ip=192.168.3.140 sshpass -p $password ssh $user@$rem ...
- SQL Server 调优系列玩转篇二(如何利用汇聚联合提示(Hint)引导语句运行)
前言 上一篇我们分析了查询Hint的用法,作为调优系列的最后一个玩转模块的第一篇.有兴趣的可以点击查看:SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行) 本篇继续玩转模块 ...
- java关于null的介绍及比较问题..未完待续
非对象比较内容,用== 对象比较内容,用相应的方法比如equais. demo1
- python爬虫常见面试题(一)
前言 之所以在这里写下python爬虫常见面试题及解答,一是用作笔记,方便日后回忆:二是给自己一个和大家交流的机会,互相学习.进步,希望不正之处大家能给予指正:三是我也是互联网寒潮下岗的那批人之一,为 ...
- html邮件链接和锚点链接
锚点链接: 锚点链接: 标记:<a name="XXX"></a> 取读:<a href="#XXX"></a> ...
- tomcat catalina.out(一,windows下的catalina.out)
最近在研究项目时,发现linux操作系统中,catalina_home/logs/catalina.out的文件有几个G的大小,便上网查了下这个文件的生成方式及如何避免,下面是我整理的材料: 之前我们 ...
- mysql 删除表中记录
一.清除mysql表中数据 delete from 表名;truncate table 表名;不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以 ...