feat: 完成按键、屏幕和蜂鸣器适配

This commit is contained in:
2024-01-31 17:20:09 +08:00
parent 7181da95de
commit 64e95d278c
31 changed files with 385 additions and 1338 deletions

View File

@@ -1 +1,185 @@
ENTRY( _start )
ENTRY( _start )
__stack_size = 2048;
PROVIDE( _stack_size = __stack_size );
MEMORY
{
/* CH32V30x_D8C - CH32V305RB-CH32V305FB
CH32V30x_D8 - CH32V303CB-CH32V303RB
*/
/*
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
*/
/* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC
CH32V30x_D8 - CH32V303VC-CH32V303RC
FLASH + RAM supports the following configuration
FLASH-192K + RAM-128K
FLASH-224K + RAM-96K
FLASH-256K + RAM-64K
FLASH-288K + RAM-32K
*/
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 224K
}
SECTIONS
{
.init :
{
_sinit = .;
. = ALIGN(4);
KEEP(*(SORT_NONE(.init)))
. = ALIGN(4);
_einit = .;
} >FLASH AT>FLASH
.vector :
{
*(.vector);
. = ALIGN(64);
} >FLASH AT>FLASH
.text :
{
. = ALIGN(4);
*(.text)
*(.text.*)
*(.rodata)
*(.rodata*)
*(.glue_7)
*(.glue_7t)
*(.gnu.linkonce.t.*)
. = ALIGN(4);
} >FLASH AT>FLASH
.fini :
{
KEEP(*(SORT_NONE(.fini)))
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _etext = . );
PROVIDE( _eitcm = . );
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH AT>FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH AT>FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH AT>FLASH
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} >FLASH AT>FLASH
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} >FLASH AT>FLASH
.dalign :
{
. = ALIGN(4);
PROVIDE(_data_vma = .);
} >RAM AT>FLASH
.dlalign :
{
. = ALIGN(4);
PROVIDE(_data_lma = .);
} >FLASH AT>FLASH
.data :
{
*(.gnu.linkonce.r.*)
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(8);
PROVIDE( __global_pointer$ = . + 0x800 );
*(.sdata .sdata.*)
*(.sdata2.*)
*(.gnu.linkonce.s.*)
. = ALIGN(8);
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
. = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
.bss :
{
. = ALIGN(4);
PROVIDE( _sbss = .);
*(.sbss*)
*(.gnu.linkonce.sb.*)
*(.bss*)
*(.gnu.linkonce.b.*)
*(COMMON*)
. = ALIGN(4);
PROVIDE( _ebss = .);
} >RAM AT>FLASH
PROVIDE( _end = _ebss);
PROVIDE( end = . );
.stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size :
{
PROVIDE( _heap_end = . );
. = ALIGN(4);
PROVIDE(_susrstack = . );
. = . + __stack_size;
PROVIDE( _eusrstack = .);
} >RAM
}

View File

@@ -322,8 +322,8 @@ static void ips200_set_region(uint16 x1, uint16 y1, uint16 x2, uint16 y2)
// zf_assert(y2 < ips200_y_max);
ips200_write_command(0x2a);
ips200_write_16bit_data(x1);
ips200_write_16bit_data(x2);
ips200_write_16bit_data(x1+80);
ips200_write_16bit_data(x2+80);
ips200_write_command(0x2b);
ips200_write_16bit_data(y1);

View File

@@ -110,7 +110,7 @@
// 例C5-C12 IPS200_DATAPORT 设置为 GPIOC DATA_START_NUM 设置为 5
// --------------------双排 SPI 接口两寸屏幕引脚定义--------------------//
#define IPS200_DEFAULT_DISPLAY_DIR (IPS200_PORTAIT) // 默认的显示方向
#define IPS200_DEFAULT_DISPLAY_DIR (IPS200_CROSSWISE_180) // 默认的显示方向
#define IPS200_DEFAULT_PENCOLOR (RGB565_YELLOW) // 默认的画笔颜色
#define IPS200_DEFAULT_BGCOLOR (RGB565_BLACK) // 默认的背景颜色
#define IPS200_DEFAULT_DISPLAY_FONT (IPS200_8X16_FONT) // 默认的字体模式

View File

@@ -54,8 +54,8 @@
#if K24C02_USE_SOFT_IIC // 这两段 颜色正常的才是正确的 颜色灰的就是没有用的
//====================================================软件 IIC 驱动====================================================
#define K24C02_SOFT_IIC_DELAY (500) // 软件 IIC 的时钟延时周期 数值越小 IIC 通信速率越快
#define K24C02_SCL_PIN (E3) // 软件 IIC SCL 引脚 连接 K24C02 的 SCL 引脚
#define K24C02_SDA_PIN (E2 ) // 软件 IIC SDA 引脚 连接 K24C02 的 SDA 引脚
#define K24C02_SCL_PIN (D13) // 软件 IIC SCL 引脚 连接 K24C02 的 SCL 引脚
#define K24C02_SDA_PIN (D14) // 软件 IIC SDA 引脚 连接 K24C02 的 SDA 引脚
//====================================================软件 IIC 驱动====================================================
#else
//====================================================硬件 IIC 驱动====================================================
@@ -69,7 +69,7 @@
#define K24C02_TIMEOUT_COUNT (0x00FF) // K24C02 超时计数
//================================================定义 K24C02 内部地址================================================
#define K24C02_DEV_ADDR (0xA0 >> 1) // IIC写入时的地址字节数据 +1为读取
#define K24C02_DEV_ADDR (0xA0 >> 1) // IIC 写入时的地址字节数据 +1 为读取
//================================================定义 K24C02 内部地址================================================
#define K24C02_SIZE (256) // 256 byte

View File

@@ -95,18 +95,18 @@
#define MT9V03X_IMAGE_SIZE ( MT9V03X_W * MT9V03X_H ) // 整体图像大小不能超过 65535
#define MT9V03X_COF_BUFFER_SIZE ( 64 ) // 配置串口缓冲区大小 不低于 64
#define MT9V03X_AUTO_EXP_DEF (0 ) // 自动曝光设置 默认不开启自动曝光设置 范围 [0-63] 0为关闭
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
#define MT9V03X_AUTO_EXP_DEF (0 ) // 自动曝光设置 默认不开启自动曝光设置 范围 [0-63] 0 为关闭
// 如果自动曝光开启 EXP_TIME 命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X_EXP_TIME_DEF (512) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
#define MT9V03X_FPS_DEF (50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS如果过大则设置为计算出来的最大FPS
#define MT9V03X_LR_OFFSET_DEF (0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
#define MT9V03X_FPS_DEF (50 ) // 图像帧率 摄像头收到后会自动计算出最大 FPS如果过大则设置为计算出来的最大 FPS
#define MT9V03X_LR_OFFSET_DEF (0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为 188 376 752 时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X_UD_OFFSET_DEF (0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
#define MT9V03X_UD_OFFSET_DEF (0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为 120 240 480 时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X_GAIN_DEF (32 ) // 图像增益 范围 [16-64] 增益可以在曝光时间固定的情况下改变图像亮暗程度
#define MT9V03X_PCLK_MODE_DEF (1 ) // 像素时钟模式 范围 [0-1] 默认0 可选参数为:[0不输出消隐信号,1输出消隐信号]
// 通常都设置为0如果使用CH32V307DVP接口或STM32DCMI接口采集需要设置为1
#define MT9V03X_PCLK_MODE_DEF (1 ) // 像素时钟模式 范围 [0-1] 默认0 可选参数为:[0不输出消隐信号1输出消隐信号]
// 通常都设置为 0如果使用 CH32V307DVP 接口或 STM32DCMI 接口采集需要设置为 1
// 仅总钻风 MT9V034 V1.5 以及以上版本支持该命令
// 摄像头命令枚举
@@ -121,7 +121,7 @@ typedef enum
MT9V03X_LR_OFFSET, // 图像左右偏移命令
MT9V03X_UD_OFFSET, // 图像上下偏移命令
MT9V03X_GAIN, // 图像偏移命令
MT9V03X_PCLK_MODE, // 像素时钟模式命令(仅总钻风MT9V034 V1.5以及以上版本支持该命令)
MT9V03X_PCLK_MODE, // 像素时钟模式命令 (仅总钻风 MT9V034 V1.5 以及以上版本支持该命令)
MT9V03X_CONFIG_FINISH, // 非命令位,主要用来占位计数
MT9V03X_COLOR_GET_WHO_AM_I = 0xEF,