芯片:D122BBV
平台:自己做的板子 + SDK# V1.0.5 #
需求:增加一个SPI+RGB的驱动
进入自己创建的工程,可以看到sdk下默认有几个panel供我们选择,如果没有适合我们的panel,那么就需要自己创建一个了。
首先从luban-lite-master\bsp\artinchip\drv\display\panel\panel_rgb_st7701s.c复制一份,因为我们准备修改一份st7796的驱动,找个名字相近的复制,然后把文件名字改成panel_rgb_st7796.c,打开文件,需要修改几点
1.头部的接口IO,根据自己的原理图修改,
2.修改static int panel_enable(struct aic_panel *panel)里面的初始化代码部分,这个部分由液晶厂家提供,参考原先的格式把命令填写进去就好了。
3.将文件里面所有带有st7701s的替换成st7796
4.st7701s_timing 接口时序信息,这个一般也由液晶厂家提供。按照参数填写
驱动文件就改好了
在这里插入代`/*
* Copyright (c) 2023, Artinchip Technology Co., Ltd
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "panel_com.h"
#include <aic_hal.h>
#define SLEEP_PIN "PE.1"
#define RESET_PIN "PE.2"
#define CS "PE.3"
#define SCL "PA.8"
#define SDI "PA.9"
static struct gpio_desc reset_gpio;
static struct gpio_desc sleep_gpio;
static void panel_gpio_init(void)
{
panel_get_gpio(&reset_gpio, RESET_PIN);
panel_get_gpio(&sleep_gpio, SLEEP_PIN);
panel_gpio_set_value(&sleep_gpio, 1);
aic_delay_ms(2);
panel_gpio_set_value(&reset_gpio, 0);
aic_delay_ms(20);
panel_gpio_set_value(&reset_gpio, 1);
aic_delay_ms(120);
}
static int panel_enable(struct aic_panel *panel)
{
panel_gpio_init();
panel_spi_device_emulation(CS, SDI, SCL);
//初始化代码
/*
这里我就不写了
*/
panel_di_enable(panel, 0);
panel_de_timing_enable(panel, 0);
panel_backlight_enable(panel, 0);
return 0;
}
static struct aic_panel_funcs st7701s_funcs = {
.disable = panel_default_disable,
.unprepare = panel_default_unprepare,
.prepare = panel_default_prepare,
.enable = panel_enable,
.register_callback = panel_register_callback,
};
static struct display_timing st7701s_timing = {
.pixelclock = 42000000,
.hactive = 400,
.hfront_porch = 100,
.hback_porch = 100,
.hsync_len = 10,
.vactive = 960,
.vfront_porch = 80,
.vback_porch = 100,
.vsync_len = 20,
};
static struct panel_rgb rgb = {
.mode = PRGB,
.format = PRGB_24BIT,
.clock_phase = DEGREE_0,
.data_order = RGB,
.data_mirror = 0,
};
struct aic_panel rgb_st7701s = {
.name = "panel-st7701s",
.timings = &st7701s_timing,
.funcs = &st7701s_funcs,
.rgb = &rgb,
.connector_type = AIC_RGB_COM,
};
`码片
下一步我们来改.h文件,从C文件可以看出调用了
#include “panel_com.h”
#include <aic_hal.h>
两个文件,打开panel_com.h,非常自觉的找到st7701s,并在它下面加上自己的st7796
打开panel_com.c文件,同理复制7701s的修改为7796
保存完毕,我们回到menuconfig里面,发现好像还是没有出现st7796的选项,这个时候我们需要去修改menuconfig的配置,就在panel路径下的 Kconfig,打开Kconfig,还是非常自觉的找到st7701s,并在下面复制一下,修改为st7796
最后打开luban-lite-master\bsp\artinchip\SConscript,如下添加
所有保存完毕,这个时候我们再去menuconfig里面看,已经出现了st7796的选项了,下面就可以测试lcd点亮的情况了。