HiFi player project, first commit.

This commit is contained in:
francis.wang committed 2026-10-26 20:07:12 +08:00
commit 4126ea13a1
49 files changed
+6333

No files matched your search

+67
View File
@@ -0,0 +1,67 @@
/**
****************************************************************************************************
* @file spilcd.h
* @author HiFi Player Project
* @version V1.0
* @date 2026-01-01
* @brief SPI LCD(ST7789,320x240)驱动
* @note 引脚与初始化流程参考正点原子 DNESP32S3 标准例程(10_spilcd / 30_music)
****************************************************************************************************
*/
#ifndef __SPILCD_H
#define __SPILCD_H
#include <stdint.h>
#include "esp_err.h"
#include "driver/gpio.h"
#include "esp_lcd_panel_io.h"
#include "esp_lcd_panel_ops.h"
#include "xl9555.h"
/* ---------------- 管脚声明 ---------------- */
#define LCD_DC_PIN GPIO_NUM_40 /* LCD 数据/命令选择脚 */
#define LCD_CS_PIN GPIO_NUM_21 /* LCD 片选脚 */
#define LCD_HOST SPI2_HOST /* LCD 与 SD 卡共用 SPI2 */
/* 背光 / 复位 / 电源由 XL9555 扩展 IO 控制 */
#define LCD_PWR(x) do { x ? xl9555_pin_write(SLCD_PWR_IO, 1) : xl9555_pin_write(SLCD_PWR_IO, 0); } while (0)
#define LCD_RST(x) do { x ? xl9555_pin_write(SLCD_RST_IO, 1) : xl9555_pin_write(SLCD_RST_IO, 0); } while (0)
#define LCD_BL(x) do { x ? xl9555_pin_write(LCD_BL_IO, 1) : xl9555_pin_write(LCD_BL_IO, 0); } while (0)
/* ---------------- 屏幕分辨率(横屏) ---------------- */
#define SPI_LCD_H_RES 320
#define SPI_LCD_V_RES 240
/* 面板句柄,LVGL 移植层需要用到 */
extern esp_lcd_panel_handle_t panel_handle;
/**
* @brief 初始化 SPI LCD(SPI 总线必须已由 my_spi_init() 初始化)
* @retval ESP_OK 成功
*/
esp_err_t spilcd_init(void);
/**
* @brief 设置屏幕方向
* @param dir 0: 竖屏 1: 横屏
*/
void spilcd_display_dir(uint8_t dir);
/**
* @brief 用单色清屏
*/
void spilcd_clear(uint16_t color);
/**
* @brief 将一块 RGB565 图像数据刷到屏幕(阻塞,直到 SPI 传输完成)
* @param x1,y1 左上角坐标(包含)
* @param x2,y2 右下角坐标(不包含,即 x2-x1 为宽度)
* @param data RGB565 像素数据,**按大端字节序存放**(高字节在前)。
* 如果是 LVGL 的原生小端数据,需要在调用前自行做字节交换
* (参考 lvgl_port.c 中 disp_flush_cb() 的实现)。
* @note 该函数供 LVGL 的 flush_cb 调用,也可以在其它地方直接使用
*/
void spilcd_flush(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, const void *data);
#endif