历史上的今天
今天是:2024年10月08日(星期二)
2021年10月08日 | S3C2440裸机------LCD_使用调色板
2021-10-08
1.调色板地址
调色板就是一块内存的地址,我们在s3c2440的芯片手册中搜索palette,可以找到调色板的地址。

2.s3c2440_lcd_controller.c
我们在s3c2440_lcd_controller.c里面设置调色板。
#include "lcd.h"
#include "lcd_controller.h"
#include "../s3c2440_soc.h"
#define HCLK 100
void jz2440_lcd_pin_init(void)
{
/* 初始化引脚 : 背光引脚 */
GPBCON &= ~0x3;
GPBCON |= 0x01;
/* LCD专用引脚 */
GPCCON = 0xaaaaaaaa;
GPDCON = 0xaaaaaaaa;
/* PWREN */
GPGCON |= (3<<8);
}
/* 根据传入的LCD参数设置LCD控制器 */
void s3c2440_lcd_controller_init(p_lcd_params plcdparams)
{
int pixelplace;
unsigned int addr;
jz2440_lcd_pin_init();
/* [17:8]: clkval, vclk = HCLK / [(CLKVAL+1) x 2]
* 9 = 100M /[(CLKVAL+1) x 2], clkval = 4.5 = 5
* CLKVAL = 100/vclk/2-1
* [6:5]: 0b11, tft lcd
* [4:1]: bpp mode
* [0] : LCD video output and the logic enable/disable
*/
int clkval = (float)HCLK/plcdparams->time_seq.vclk/2-1+0.5;
//int clkval = 5;
int bppmode = plcdparams->bpp == 8 ? 0xb :
plcdparams->bpp == 16 ? 0xc :
0xd; /* 0xd: 24,32bpp */
LCDCON1 = (clkval<<8) | (3<<5) | (bppmode<<1) ;
/* [31:24] : VBPD = tvb - 1
* [23:14] : LINEVAL = line - 1
* [13:6] : VFPD = tvf - 1
* [5:0] : VSPW = tvp - 1
*/
LCDCON2 = ((plcdparams->time_seq.tvb - 1)<<24) |
((plcdparams->yres - 1)<<14) |
((plcdparams->time_seq.tvf - 1)<<6) |
((plcdparams->time_seq.tvp - 1)<<0);
/* [25:19] : HBPD = thb - 1
* [18:8] : HOZVAL = 列 - 1
* [7:0] : HFPD = thf - 1
*/
LCDCON3 = ((plcdparams->time_seq.thb - 1)<<19) |
((plcdparams->xres - 1)<<8) |
((plcdparams->time_seq.thf - 1)<<0);
/*
* [7:0] : HSPW = thp - 1
*/
LCDCON4 = ((plcdparams->time_seq.thp - 1)<<0);
/* 用来设置引脚极性, 设置16bpp, 设置内存中象素存放的格式
* [12] : BPP24BL
* [11] : FRM565, 1-565
* [10] : INVVCLK, 0 = The video data is fetched at VCLK falling edge
* [9] : HSYNC是否反转
* [8] : VSYNC是否反转
* [7] : INVVD, rgb是否反转
* [6] : INVVDEN
* [5] : INVPWREN
* [4] : INVLEND
* [3] : PWREN, LCD_PWREN output signal enable/disable
* [2] : ENLEND
* [1] : BSWP
* [0] : HWSWP
*/
pixelplace = plcdparams->bpp == 32 ? (0) :
plcdparams->bpp == 16 ? (1) :
(1<<1); /* 8bpp */
LCDCON5 = (plcdparams->pins_pol.vclk<<10) |
(plcdparams->pins_pol.rgb<<7) |
(plcdparams->pins_pol.hsync<<9) |
(plcdparams->pins_pol.vsync<<8) |
(plcdparams->pins_pol.de<<6) |
(plcdparams->pins_pol.pwren<<5) |
(1<<11) | pixelplace;
/* framebuffer地址 */
/*
* [29:21] : LCDBANK, A[30:22] of fb
* [20:0] : LCDBASEU, A[21:1] of fb
*/
addr = plcdparams->fb_base & ~(1<<31);
LCDSADDR1 = (addr >> 1);
/*
* [20:0] : LCDBASEL, A[21:1] of end addr
*/
addr = plcdparams->fb_base + plcdparams->xres*plcdparams->yres*plcdparams->bpp/8;
addr >>=1;
addr &= 0x1fffff;
LCDSADDR2 = addr;//
}
void s3c2440_lcd_controller_enalbe(void)
{
/* 背光引脚 : GPB0 */
GPBDAT |= (1<<0);
/* pwren : 给LCD提供AVDD */
LCDCON5 |= (1<<3);
/* LCDCON1'BIT 0 : 设置LCD控制器是否输出信号 */
LCDCON1 |= (1<<0);
}
void s3c2440_lcd_controller_disable(void)
{
/* 背光引脚 : GPB0 */
GPBDAT &= ~(1<<0);
/* pwren : 给LCD提供AVDD */
LCDCON5 &= ~(1<<3);
/* LCDCON1'BIT 0 : 设置LCD控制器是否输出信号 */
LCDCON1 &= ~(1<<0);
}
/* 设置调色板之前, 先关闭lcd_controller */
void s3c2440_lcd_controller_init_palette(void)
{
volatile unsigned int *palette_base = (volatile unsigned int *)0x4D000400;
int i;
int bit = LCDCON1 & (1<<0);
/* LCDCON1'BIT 0 : 设置LCD控制器是否输出信号 */
if (bit)
LCDCON1 &= ~(1<<0);
for (i = 0; i < 256; i++)
{
/* 低16位 : rgb565 */
*palette_base++ = i;
}
if (bit)
LCDCON1 |= (1<<0);
}
struct lcd_controller s3c2440_lcd_controller = {
.name = "s3c2440",
.init = s3c2440_lcd_controller_init,
.enable = s3c2440_lcd_controller_enalbe,
.disable = s3c2440_lcd_controller_disable,
.init_palette = s3c2440_lcd_controller_init_palette,
};
void s3c2440_lcd_contoller_add(void)
{
register_lcd_controller(&s3c2440_lcd_controller);
}
史海拾趣
|
大家好,下面这个程序可以用串口助手发送十六进制数并在数码管上显示.因为串口通讯软件只能发2位数,所以显示也只能是2位, 请教大家:如和实现三位数字的发送与显示,举例说明:比如我想发送123并在单片机的数码管上显示123,该如何发送与分离数字. 程 ...… 查看全部问答> |
|
今天看三星给的2450开发手册的驱动开发 发现手册里面有AC97与IIS驱动的选择问题 于是乎.....上来论坛问问高手。。。。 AC97与IIS的区别是什么? 补充一句,小弟我是菜鸟,还未入门!… 查看全部问答> |
|
请问WinCE下支持MFC的非模态对话框吗?我创建的非模态对话框咋WinCE下,弹出来后,然后用鼠标拖动对话框移动,可是每移动一次,屏幕上就多出一个对话框(和原来的一模一样的),单击关闭也没有响应,不知道是为什么?还有就是在对话抗构造函数中我 ...… 查看全部问答> |
|
c# WinCE 无线网卡的信号强弱 问题 我想通过 c#代码获取 类似ping 的功能,或是获取无线网络的信号强弱, 因为我想在网络连通性好的时候向服务器传送数据,不好的时候存到PDA得本地数据库中… 查看全部问答> |
|
MSP430F249的I2C模块使用的是七位地址模式,当初调试时发现接受数据时,接收到的第一个数据容易变成上一次接收的最后一个数据,一直它和其他的I2C模块一样,最后静下心看了他的英文手册发现它使用的是七位地址模式 ...… 查看全部问答> |




