关于linux下使用s3c6410开发板实现lcd驱动的问题,高手来帮忙看看代码,看看每个函数实现啥功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于linux下使用s3c6410开发板实现lcd驱动的问题,高手来帮忙看看代码,看看每个函数实现啥功能相关的知识,希望对你有一定的参考价值。

#define GPECON *(volatile unsigned long *)0x7F008080
#define GPEDAT *(volatile unsigned long *)0x7F008084
#define GPFCON *(volatile unsigned long *)0x7F0080A0
#define GPFDAT *(volatile unsigned long *)0x7F0080A4
#define GPICON *(volatile unsigned long *)0x7F008100
#define GPJCON *(volatile unsigned long *)0x7F008120
以上用宏定义定义出端口E、F、I、J寄存的的内存地址,方便以后运算并且生命为volatile,确保本条指令不会因编译器的优化而省略,即要求每次直接读值。与volatile变量有关的运算,不要进行编译优化,以免出错。
#define MIFPCON *(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 VBPD(x) ((x) << 16)表示在一帧图像开始时,垂直同步信号以后的无效的行数。
#define VFPD(x) ((x) << 8)表示在一帧图像结束后,垂直同步信号以前的无效的行数。
#define VSPW(x) ((x) << 0)表示垂直同步脉冲的宽度,用行数计算。
#define VIDTCON1 *(volatile unsigned long *)0x77100014
#define HBPD(x) ((x) << 16)
#define HFPD(x) ((x) << 8)
#define HSPW(x) ((x) << 0)
#define VIDTCON2 *(volatile unsigned long *)0x77100018
#define LINEVAL(x) ((x) << 11)
#define HOZVAL(x) ((x) << 0)
#define WINCON0 *(volatile unsigned long *)0x77100020
#define VIDOSD0A *(volatile unsigned long *)0x77100040
#define VIDOSD0B *(volatile unsigned long *)0x77100044
#define VIDOSD0C *(volatile unsigned long *)0x77100048

#defineVIDW00ADD0B0 *(volatile unsigned long *)0x771000A0
#defineVIDW00ADD1B0 *(volatile unsigned long *)0x771000D0
#define VIDW00ADD2 *(volatile unsigned long *)0x77100100

unsigned long fb = 0x52000000;
void (*printf)(char *, ...) = 0x57e11cd8;
void init_gpio(void);
void init_lcd(void);
void enable_lcd(void);
void test_lcd(void);

void _start(void)

init_gpio();
init_lcd();
enable_lcd();
test_lcd();

#define RGB(r, g, b) ((r << 16) | (g << 8) | (b))
void test_lcd(void)

unsigned long (*p)[480] = fb;
int i, j;
for(i = 0; i < 272; i++)
for(j = 0; j < 480; j++)
p[i][j] = RGB(255, 0, 0);


void init_gpio(void)

GPECON &= ~(0xf << 0);
GPECON |= (1 << 0);
GPFCON &= ~(0x3 << 28);
GPFCON |= (1 << 28);
GPICON = 0xaaaaaaaa;
GPJCON = 0xaaaaaa;


void init_lcd(void)

/* normal mode */
MIFPCON &= ~(1 << 3);
/* RGB I/F */
SPCON |= 1;

VIDCON0 = (14 << 6) | (1 << 4);
VIDCON1 = (1 << 6) | (1 << 5);
/* VIDEO TIME CONTROL REGISTER */
VIDTCON0 = VSPW(9) | VBPD(1) | VFPD(1);
VIDTCON1 = HSPW(40) | HBPD(1) | HFPD(1);
VIDTCON2 = LINEVAL(271) | HOZVAL(479);

WINCON0 = (0xb << 2) | (1);
VIDOSD0A = 0;
VIDOSD0B = (480 << 11) | (272 << 0);
VIDOSD0C = 480*272;
VIDW00ADD0B0 = ((fb >> 24) << 24) | ((fb & 0xffffff) << 0);
VIDW00ADD1B0 = ((fb & 0xffffff) + 480*272*4);
VIDW00ADD2 = 480*4;


void enable_lcd(void)

GPEDAT |= 1;
GPFDAT |= (1 << 14);
VIDCON0 |= (1 << 1) | (1 << 0);


上面这四个函数各自实现什么功能?

参考技术A void init_gpio(void);
设置LCD所用的IO脚的工作模式(如背光控制脚、LCD Power、RESET、地址线等)

void init_lcd(void);
初始化LCD参数(设置寄存器:显示模式、行/帧边界、屏幕尺寸、framebuffer地址等)

void enable_lcd(void);
打开背光、LCD Power等。

void test_lcd(void);
全屏红色(framebuffer填充红色)。

void _start(void)
主函数追问

请问执行代码以后,生成的lcd.bin 文件放到tftp文件夹中,在我使用的s3c6410开发板上,用那个tftp把lcd.bin下载到什么地址,怎么执行?

追答

你这不是linux 的驱动,象是boot测试程序。
要加载运行的话得看你用的什么boot。详细方法你得看你的开发说明文档。

参考技术B init_gpio(); //初始化端口引脚,如设置io引脚上拉、输出等等
init_lcd(); //初始化lcd,如设置vm触发频率,显示模式,信号同步等等
enable_lcd(); //lcd使能,这个就不用说了吧,看名字就知道(在对lcd进行初始化设置以后要进行使能才能正常工作)
test_lcd(); //测试lcd,就是将lcd显示全红追问

请问执行代码以后,生成的lcd.bin 文件放到tftp文件夹中,在我使用的s3c6410开发板上,用那个tftp把lcd.bin下载到什么地址,怎么执行?

迅为IMX6开发板提供原理图丨底板PCB丨驱动程序源码丨芯片丨LCD数据手册丨开发环境丨产品使用手册

迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源

兼容四款核心板产品升级自如:IMX6Q商业扩展级丨IMX6Q-Plus丨IMX6Q工业级丨IMX6DL

板载模块:WIFI蓝牙、4G、GPS、SATA、CAN/RS485、千兆以太网、CAMERA接口等

资料丰富:原理图、底板PCB、驱动程序源码、开发坏境、数据手册、使用手册等

四核商业级-2G:NXP 四核 i.MX6Q,主频1GHz;内存:2GB DDR3;存储:16GB EMMC;SATA接口:支持

双核商业级-1G:NXP 双核精简版 i.MX6DL,主频 1GHz;内存:1GB DDR3;存储:8GB EMMC;SATA接口:不支持

四核工业级-1G:NXP 四核 i.MX6Q,主频 800MHz;内存:1GB DDR3;存储:8GB EMMC;SATA接口:支持

四核Plus版本:NXP 四核 i.MX6Q,主频 1 GHz;内存:2GB DDR3;存储:16GB EMMC;SATA接口:支持

 

 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片
 
技术分享图片

核心板参数

尺寸:51mm*61mm

四核商业级-2G:NXP 四核 i.MX6Q,主频 1 GHz;内存:2GB DDR3;存储:16GB EMMC;SATA接口:支持

双核商业级-1G:NXP 双核精简版 i.MX6DL,主频 1GHz;内存:1GB DDR3;存储:8GB EMMC;SATA接口:不支持

四核工业级-1G:NXP 四核 i.MX6Q,主频 800MHz;内存:1GB DDR3;存储:8GB EMMC;SATA接口:支持

四核Plus版本:NXP 四核 i.MX6Q,主频 1 GHz;内存:2GB DDR3;存储:16GB EMMC;SATA接口:支持

EEPROM:4MB的EEPROM用来存储关键数据

电源管理:内部独立

工作电压:5V

系统支持:Android4.4.2、Linux3.0.35、QT4.7/5.7、Ubuntu12.04系统

商业级运行温度:-20℃到+80 ℃

工业级运行温度:-40℃到+85 ℃

引角扩展:引出脚多达320个,满足用户各类扩展需求

扩展参数:

千兆以太网:1路自适应千兆以太网

EIM通用总线: 32位数据线全引出

SDIO:3路

JTAG:1路引出

SATA:1路

CAMARA:DVP和MIPI接口全引出

LCD:双路LVDS和24位RGB接口

HDMI:1路V1.4

GPIO:引出

矩阵键盘:引出

PWM:3路

I2C:3路

声卡IIS:1路

CAN:2路

USB:HOST+OTG

UART:5路

pcie:1路

底板参数

尺寸:125mm*190mm

POWER:电直流电源输入接口,12V/2A电源输入

SWITCH:电源开关

LVDS接口:2路

RGB接口:1路

CAN:1 路 CAN 总线接口

MIC:支持MIC输入

PHONE:支持耳机输出

RESET:1个复位按键

串口:2路串口

USB HOST:3路

网口:1 路千兆以太网,RJ45 接口

TF卡:1个

SATA:1 个 SATA 接口

WIFI蓝牙:支持

GPS模块:支持(选配)

OTG:1路

SIM卡槽:1个

4G模块:全网通(选配)

HDMI接口:标准HDMI v1.4,1080p高清分辨率输出

RS485:1个

IRDA:1个

DIP SWITCH:1个7位拨码开关

JTAG:1个

CAMERA接口:1个支持500万摄像头

GPIO接口:20PIN

按键:4 个

RTC:实时时钟

BUZZER:1个蜂鸣器

MIPI接口:DSI和CSI各一个,支持LCD和CAMARA;

EIM总线:1路

以上是关于关于linux下使用s3c6410开发板实现lcd驱动的问题,高手来帮忙看看代码,看看每个函数实现啥功能的主要内容,如果未能解决你的问题,请参考以下文章

第五章 搭建S3C6410开发板的测试环境

第五章 搭建S3C6410开发板的测试环境

五搭建S3C6410开发板的测试环境—学习笔记

搭建S3C6410开发板的测试环境

搭建S3C6410开发板的测试环境

搭建S3C6410开发板的测试环境