1. 目标
本文介绍如何基于CH6121 BLE SDK 1.3.0中的ESL设备应用示例快速完成ESL设备(电子价签)的功能移植,其中主要包括显示屏驱动、LED驱动的移植,电压采集功能的移植。
2. 显示屏驱动移植
ESL设备应用示例中,封装了显示屏驱动接口,方便用户对接各类显示屏驱动。用户需要添加显示屏类型、并将屏幕尺寸和刷图函数注册至显示屏硬件抽象层即可完成驱动移植。
下面以OPM021EG型号的显示屏为例,介绍如何完成显示屏驱动接口的移植 。
2.1. 驱动接口
开发者需要定义图片数据接收Buffer的大小,并将相关信息和图片显示函数注册至显示屏硬件抽象层,即可完成显示屏驱动对接。
OPM021EG驱动实现文件路径:
applications/bluetooth/esl/src/esl_function/OPM021EG.c
/* OPM021EG显示屏大小为 250 * 128, (250 * 128) / 8 = 4000 Bytes */
#define OED_OPM021EG_SIZE 4000
/* OPM021EG显示屏宽度为128 bits */
#define OED_OPM021EG_WIDTH 128
/* OPM021EG显示屏高度为250 bits */
#define OED_OPM021EG_HEIGHT 250
/* 根据屏幕尺寸定义图片数据接收Buffer,要求4字节对齐。
图片数据通过ESL组件接收完成后将保存至Flash图片区域,
在APP Task中将从Flash读出图片数据,存放至PICO_Orientation数组中
*/
unsigned int PICO_Orientation[(OED_OPM021EG_SIZE + 3) / 4] __noretention = {0};
/* 图片显示函数 */
static int OED_OPM021EG_epd_show_image(void)
{
/* 将图片数据接收Buffer中的数据发送至显示屏 */
......
}
/* 显示屏驱动初始化,注册显示屏尺寸和类型信息、刷图函数至显示屏硬件抽象层。 */
void OED_OPM021EG_init(screen_t *env)
{
......
/* 注册图片接收Buffer大小 */
env->size = OED_OPM021EG_SIZE;
/* 注册显示屏宽度 */
env->width = OED_OPM021EG_WIDTH;
/* 注册显示屏高度 */
env->height = OED_OPM021EG_HEIGHT;
......
/* 注册图片显示驱动函数 */
env->epd_show_image = OED_OPM021EG_epd_show_image;
}
2.2. 型号添加
开发者需要在配置文件中添加宏定义以支持不同型号的显示屏。
显示屏配置头文件路径:
applications/bluetooth/esl/src/esl_function/user_epd_driver.h
/* define EPD model */
enum {
SCREEN_MODEL_INVALID, // = 0
......
/* 新增OPM021EG类型 */
SCREEN_MODEL_OED_OPM021EG_BW122X250,
.....
__SCREEN_MODEL_MAX,
};
2.3. 驱动接口注册
开发者在显示屏驱动接口初始化时,将当前显示屏信息注册至显示屏硬件抽象层。
显示屏硬件抽象层文件路径:
applications/bluetooth/esl/src/esl_function/user_epd_driver.c
/* 显示屏硬件抽象层初始化 */
int user_epd_init(uint8_t model)
{
......
switch (model) {
......
case SCREEN_MODEL_OED_OPM021EG_BW122X250: {
/* 型号为OPM021EG的显示屏的初始化,该函数需要将显示屏尺寸和类型信息、刷图函数注册到
显示屏硬件抽象层。
*/
OED_OPM021EG_init(&esl_user_var.screen_env);
break;
......
}
return 0;
}
2.4. 驱动初始化
开发者在应用初始化时,需要设置当前使用的显示屏类型。
ESL应用初始化文件路径:
applications/bluetooth/esl/src/app_esl.c
/* ESL 应用初始化 */
int esl_application_init()
{
......
/* 显示屏驱动初始化 */
user_epd_init(SCREEN_MODEL_OED_OPM021EG_BW122X250);
......
return 0;
}
3. LED移植
ESL设备应用示例中,实现了LED驱动程序,开发者只需根据产品板硬件设计配置不同的GPIO引脚,即可完成LED灯控功能。
LED头文件路径:
applications/bluetooth/esl/src/esl_function/rgb_led.h
/* 定义红色LED电平管脚 */
#define LED_PIN_RED P18
/* 定义绿色LED电平管脚 */
#define LED_PIN_GREEN P1
/* 定义蓝色LED电平管脚 */
#define LED_PIN_BLUE P0
4. 电压采集移植
CH6121芯片支持内部电压采集,用户只需配置好ADC采集管脚,即可完成芯片工作电压的采集。
文件路径:
applications/bluetooth/esl/src/esl_function/user_batt.c
int get_batt_voltage(void)
{
/* 配置ADC采集通道为P13管脚对应的通道号 */
uint32_t ch_array[1] = {ADC_CH2N_P13};
......
/* 配置P13管脚用途为ADC */
drv_pinmux_config(P13, ADCC);
......
return ret;
}
注意:
CH6121芯片支持内部电压采集的管脚与通道号对应关系见下表。
文章来源:芯片开放社区
文章链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=3768261406034563072