TA的每日心情 | 慵懒 2017-10-13 15:34 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
RK3399的CPU采用big.LITTLE大小核架构,双Cortex-A72大核+四Cortex-A53小核结构,对整数、浮点、内存等作了大幅优化,在整体性能、功耗及核心面积三个方面都具革命性提升。 RK3399的GPU采用四核ARM新一代高端图像处理器Mali-T860,集成更多带宽压缩技术:如智能迭加、ASTC、本地像素存储等,还支持更多的图形和计算接口,总体性能比上一代提升45%。
请参考 drivers/video/rockchip/screen/lcd_LD089WU1_mipi.c
包含头文件:#include "../transmitter/mipi_dsi.h"
#define SCREEN_TYPE SCREEN_MIPI 定义屏幕类型为 MIPI,SCREEN_TYPE 如果不设为
SCREEN_MIPI,MIPI 的相关驱动不会执行。
#define MIPI_DSI_LANE 4 //定义 LANE 个数
MIPI_DSI_LANE 是 LCD 的 DATA LANE 数,现在大多数分辨率稍高点的一般是 4 个 LANE 的,所
以默认可以不用设置,必须和硬件相匹配。
#define MIPI_DSI_HS_CLK 1000*1000000 //DSI_HS_CLK
MIPI_DSI_HS_CLK 是各个 LANE 传输时的速率(ddr 双边沿),最小值 80Mbps,最大 1Gbps,默
认是 1Gbps,这个也基本上不用改,除非板子布线有问题,跑不了 1Gbps 的。
如果 MIPI 屏幕本身需要初始化,要定义 RK_SCREEN_INIT
#define RK_SCREEN_INIT 1
并实现下面两个函数:
int rk_lcd_init(void) {
u8 dcs[16] = {0};
if(dsi_is_active() != 1)
return -1;
/*below is changeable*/
msleep(50);
dsi_enable_hs_clk(1);
dcs[0] = LPDT;
dcs[1] = dcs_exit_sleep_mode;
dsi_send_dcs_packet(dcs, 2);
msleep(1);
dcs[0] = LPDT;
dcs[1] = dcs_set_display_on;
dsi_send_dcs_packet(dcs, 2);
msleep(10);
dsi_enable_video_mode(1);
}
int rk_lcd_standby(u8 enable) {
u8 dcs[16] = {0};
if(dsi_is_active() != 1)
return -1;
if(enable) {
/*below is changeable*/
dcs[0] = LPDT;
dcs[1] = dcs_set_display_off;
dsi_send_dcs_packet(dcs, 2);
msleep(1);
dcs[0] = LPDT;
dcs[1] = dcs_enter_sleep_mode;
dsi_send_dcs_packet(dcs, 2);
msleep(1);
} else {
/*below is changeable*/
rk_lcd_init();
}
说明:
1、dsi_is_active()用来判断 DSI 是否已经处于工作状态了,如果是返回 1,如果不是返回 0,
如果出错返回-1。
2、dcs[0] = LPDT;
dcs[1] = dcs_enter_sleep_mode;
dsi_send_dcs_packet(dcs, 2);
屏的初始化是通过 DSI 来传送数据的,根据需要封装了 dsi_send_dcs_packet 这个接口。对
于 dcs[]数组,第一个成员为写的模式,第二个成员为 DCS 命令,后面的成员为 DCS 命令的参数。
上 面 两 句 用 来 发 送 , dcs_exit_sleep_mode 这 个 命 令 , 这 些 DCS 命 令 是 在
drivers/video/rockchip/transmitter/mipi_dsi.h 定义的,具体的含义请参考 MIPI DCS 的规范。
当然屏自定义的命令也可以通过该接口发送。 |
|