关于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);
上面这四个函数各自实现什么功能?
设置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。详细方法你得看你的开发说明文档。
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驱动的问题,高手来帮忙看看代码,看看每个函数实现啥功能的主要内容,如果未能解决你的问题,请参考以下文章