历史上的今天
返回首页

历史上的今天

今天是: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);

}

推荐阅读

史海拾趣

Continental公司的发展小趣事

近年来,大陆集团在特种商用车胎领域也取得了重要突破。2014年,大陆集团在亚洲国际物流技术与运输系统展览会上发布了一款全新的产品——SC8特种商用车胎。这款产品是专门针对亚洲物料搬运业而开发出来的,适用于仓库、饮料业、造纸业等多个行业。SC8轮胎具备超深的轮胎花纹和极佳的性能,为物料搬运业提供了更高效、更安全的解决方案。这一产品的推出进一步巩固了大陆集团在商用车胎领域的市场地位。

Gumstix公司的发展小趣事
检查压敏元件是否老化或受到污染,必要时更换新的压敏元件。同时,也可以考虑调整电路参数以提高灵敏度。
Caltron Devices Ltd公司的发展小趣事

为了进一步提升公司的竞争力和影响力,Caltron Devices Ltd公司积极实施国际化战略。公司加强与国外同行的交流与合作,引进先进的技术和管理经验,不断提升自身的创新能力。同时,Caltron还积极参加国际电子展会和论坛,展示公司的最新产品和技术成果,成功打开了全球市场的大门。

HB公司的发展小趣事

服务:Hartmann Codier GmbH深知客户是企业发展的基石。因此,公司始终将客户服务放在首位,致力于为客户提供优质的产品和服务。公司建立了完善的客户服务体系,包括售前咨询、售中支持和售后服务等环节。

成果:通过不断优化客户服务流程和提高服务质量,Hartmann Codier GmbH赢得了广大客户的信赖和支持。公司与客户之间建立了长期稳定的合作关系,共同推动了电子行业的繁荣发展。同时,公司也根据客户的反馈和需求,不断改进产品和服务,以满足市场的不断变化和升级。

弘凯光电(BRIGHTEK)公司的发展小趣事

弘凯光电股份有限公司,自2001年成立以来,便以光电半导体封装与解决方案提供商的身份,开始在电子行业中崭露头角。早期,公司以台湾为基地,凭借对技术的不断追求和对市场的敏锐洞察,逐步在光电半导体领域积累了宝贵的经验。通过持续的研发和创新,弘凯光电逐渐形成了自己的核心竞争力,为后续的快速发展奠定了坚实基础。

HDK(北陆电气)公司的发展小趣事

弘凯光电一直致力于技术创新和产品升级。公司拥有一支高效、创新的技术团队,通过对产品技术的深入研究和持续创新,不断推出具有竞争力的新产品。例如,公司的iCLed系列产品,凭借其独特的设计和卓越的性能,在智能座舱设计领域获得了广泛应用。这种对技术创新的不断追求,使得弘凯光电在电子行业中始终保持领先地位。

问答坊 | AI 解惑

锁相环电路

本帖最后由 paulhyde 于 2014-9-15 04:03 编辑 锁相环电路  …

查看全部问答>

关于串口发送数码管显示的问题

大家好,下面这个程序可以用串口助手发送十六进制数并在数码管上显示.因为串口通讯软件只能发2位数,所以显示也只能是2位, 请教大家:如和实现三位数字的发送与显示,举例说明:比如我想发送123并在单片机的数码管上显示123,该如何发送与分离数字. 程 ...…

查看全部问答>

塑料晶体管诞生

普林斯顿大学的研究人员表示,通过将有机导体,半导体和绝缘体喷墨打印到一层昂贵的聚合物基板上可生成全塑晶体管,这种全塑晶体管可以大幅降低有机太阳能电池的价格。Yueh-Lin (Lynn) Loo教授针对其全塑晶体管发明了一种新的塑化工艺,她希望这 ...…

查看全部问答>

弱弱地问一下AC97与IIS

今天看三星给的2450开发手册的驱动开发 发现手册里面有AC97与IIS驱动的选择问题 于是乎.....上来论坛问问高手。。。。 AC97与IIS的区别是什么? 补充一句,小弟我是菜鸟,还未入门!…

查看全部问答>

WinCE 下非模态对话框的问题以及对话框全屏的问题

请问WinCE下支持MFC的非模态对话框吗?我创建的非模态对话框咋WinCE下,弹出来后,然后用鼠标拖动对话框移动,可是每移动一次,屏幕上就多出一个对话框(和原来的一模一样的),单击关闭也没有响应,不知道是为什么?还有就是在对话抗构造函数中我 ...…

查看全部问答>

c# WinCE 无线网卡的信号强弱 问题

c# WinCE 无线网卡的信号强弱 问题 我想通过 c#代码获取 类似ping 的功能,或是获取无线网络的信号强弱, 因为我想在网络连通性好的时候向服务器传送数据,不好的时候存到PDA得本地数据库中…

查看全部问答>

MSP430F249的I2C模块

      MSP430F249的I2C模块使用的是七位地址模式,当初调试时发现接受数据时,接收到的第一个数据容易变成上一次接收的最后一个数据,一直它和其他的I2C模块一样,最后静下心看了他的英文手册发现它使用的是七位地址模式 ...…

查看全部问答>

MSP430G225

求大神们帮我写一个关于用MSP430实现电压测量系统的设计,其中采用12864显示,外界DS1302时钟芯片,大神们快快帮忙啊,Thx。。。。。:rose:…

查看全部问答>