API GUIDE / MSCALER / LL

G32S10 MSCALER LL 接口

LL 层接口:mscaler_regs.h 的尺寸字段能表达的范围大于当前 HAL 的校验范围。

1. mscaler_regs.h 寄存器层

1.1 基地址

名称地址说明
MSCALER_IOBASE0x132A0000G32S10 MSCALER 寄存器基地址
MSCALER(mscaler_regs_t *)(uintptr_t)MSCALER_IOBASEMSCALER 寄存器实例指针

1.2 主要寄存器

寄存器RW偏移说明
soft_version / hard_versionR0x000 / 0x004软件与硬件版本号
ctrlRW0x010Shadow 配置控制
tiziano_stopRW0x014Tiziano 输入 stop 控制
all_reg_rstRW0x018全寄存器功能复位
ch_work_enRW0x020MSCALER 缩放工作使能
coef_fix_enRW0x034横向/纵向固定点缩放系数使能
src_rsz_sizeRW0x040输入 crop 宽高
rsz_step_w / rsz_step_hRW0x048 / 0x04C横向/纵向缩放步进
rsz_sizeRW0x058缩放后图像宽高
work_statR0x060MSCALER 工作状态
out_fmtRW0x06C输出像素格式
dmaout_y_addr / dmaout_y_strideRW0x07C / 0x080DMA 输出 Y 平面地址与 stride
dmaout_uv_addr / dmaout_uv_strideRW0x08C / 0x090DMA 输出 UV 平面地址与 stride
cub_w / cub_wsRW0x094 / 0x098Cubic 插值参数
coef_hcore_*RW0x09C-0x0BC横向 H-core 系数,17 个 13-bit 系数
coef_wcore_*RW0x0C0-0x0E0纵向 W-core 系数,17 个 13-bit 系数
rdma_y_addr / rdma_y_strideRW0x0E8 / 0x0ECRDMA 输入 Y 平面地址与 stride
rdma_uv_addr / rdma_uv_strideRW0x0F0 / 0x0F4RDMA 输入 UV 平面地址与 stride
out_buff_numRW0x100JPEG 联动时的 DDR 回环行数
out_bline_numRW0x104向 JPEG 发送 add 信号的行阈值
rdma_enableRW0x10CRDMA 输入与模块启动使能
int_common_0_en/clr/info/maskRW/RW/R/RW0x220-0x22Cframe-end 中断使能、清除、状态和屏蔽

1.3 关键字段与配置限制

1.3.1 控制与启动

寄存器/字段值说明
CTRL.SHD_CTRL1Shadow 配置使能。全部配置完成后写 0xFFFFFFFF,使已写入的 shadow 寄存器生效。
CH_WORK_EN[0]1使能 MSCALER 缩放工作。
COEF_FIX_EN[0]1使能横向固定点缩放。
COEF_FIX_EN[4]1使能纵向固定点缩放。
RDMA_ENABLE[0]1使能 RDMA 输入并启动 MSCALER 模块。
ALL_REG_RST[0]写入 reset 请求全寄存器功能复位。

1.3.2 图像几何与格式

项寄存器字段说明
输入宽高SRC_RSZ_SIZE[26:16] / [10:0]输入 crop 宽/高,字段宽度均为 11 bit。
输出宽高RSZ_SIZE[26:16] / [10:0]缩放后图像宽/高,字段宽度均为 11 bit。
横向步进RSZ_STEP_W[18:0]step_w = (16384 * src_width) / dst_width,不做四舍五入;必须 <= 0x7ffff;0x4000 表示 1:1。
纵向步进RSZ_STEP_H[18:0]step_h = (16384 * src_height) / dst_height,不做四舍五入;必须 <= 0x7ffff;0x4000 表示 1:1。
输出格式OUT_FMT[1:0]0:only Y,1:YUV420/NV12,2:YUV422/YUYV。

1.3.3 地址、stride 与 JPEG 联动

项要求
RDMA_*_ADDR、DMAOUT_*_ADDRY/UV 地址均须 8-byte 对齐。
RDMA_*_STRIDE、DMAOUT_*_STRIDEY/UV stride 均须 8-byte 对齐。
OUT_BUFF_NUM[10:0]JPEG 联动时推荐不小于图像高度的一半;未联动时配置为图像高度。
OUT_BLINE_NUM[5:0]单独使用时配置为图像高度;JPEG 联动时 YUV420/only Y 推荐 8,YUV422 推荐 16。
INT_COMMON_0_*[0]定义为 scaler 输出 frame-end 中断;其他位在当前 spec 中为保留位。

1.4 HAL 实现限制

mscaler_regs.h 的尺寸字段能表达的范围大于当前 HAL 的校验范围。应用通过 HAL 使用时,应以以下规则为准:

项当前 HAL 规则
src_width / dst_width8-1920 像素
src_height / dst_height8-1440 像素
缩放步进按公式计算后的 step_w 和 step_h 必须 <= 0x7ffff
Y 平面基地址非空且 8-byte 对齐
NV12/YUV420 UV 地址可显式配置源/目标 UV 地址;为 NULL 时 HAL 分别按 Y 平面大小推导到 Y 平面之后。最终地址仍须非空且 8-byte 对齐;YUV422/ONLY_Y 不使用 UV 地址。
out_bline_num必须小于或等于 dst_height
超时计时HAL 不依赖 systick;直接使用 HAL 时由应用提供等待机制

2. LL MSCALER 接口

详见 code/include/drivers/g32s10/mscaler/ll_mscaler.h。所有接口均为 static inline,直接操作 MSCALER 寄存器;调用方负责调用时序与参数合法性。

2.1 版本、控制、复位与工作使能

类别主要函数
版本ll_mscaler_get_soft_version、ll_mscaler_get_hard_version
shadowll_mscaler_enable_shadow_ctrl
停止/复位ll_mscaler_set_tiziano_stop、ll_mscaler_set_all_reg_tstn
工作与固定点系数ll_mscaler_enable_channel_work、ll_mscaler_enable_coef_fix

2.2 图像几何和格式

类别主要函数
输入尺寸ll_mscaler_set_src_width、ll_mscaler_set_src_height、ll_mscaler_set_src_size
缩放步进ll_mscaler_set_resize_step_width、ll_mscaler_set_resize_step_height、ll_mscaler_set_resize_step
输出尺寸ll_mscaler_set_result_width、ll_mscaler_set_result_height、ll_mscaler_set_result_size
格式与状态ll_mscaler_set_out_fmt、ll_mscaler_get_work_status

2.3 DMA 地址和 stride

类别主要函数
DMAOUT Yll_mscaler_set_dmaout_y_addr、ll_mscaler_set_dmaout_y_stride
DMAOUT UVll_mscaler_set_dmaout_uv_addr、ll_mscaler_set_dmaout_uv_stride
RDMA Yll_mscaler_set_rdma_y_addr、ll_mscaler_set_rdma_y_stride
RDMA UVll_mscaler_set_rdma_uv_addr、ll_mscaler_set_rdma_uv_stride
组合接口ll_mscaler_set_y_addr、ll_mscaler_set_uv_addr、ll_mscaler_set_y_stride、ll_mscaler_set_uv_stride

四组单独地址/stride setter 的参数注释均标明了 8-byte 对齐约束。组合接口不重复校验,调用时同样必须遵守此约束。

2.4 算法参数与 JPEG 联动

类别主要函数
Cubic 参数ll_mscaler_set_algo_cub,接收 6 个元素:X1、X2、Y1、Y2、A、B
横向系数ll_mscaler_set_algo_coef_h
纵向系数ll_mscaler_set_algo_coef_w
JPEG 联动ll_mscaler_set_out_buff_num、ll_mscaler_set_out_bline_num、ll_mscaler_set_linkage_jpeg
RDMA 启动ll_mscaler_enable_rdma

2.5 中断

类别主要函数
通用位操作ll_mscaler_enable_interrupt、ll_mscaler_clear_interrupt、ll_mscaler_enable_interrupt_mask
状态ll_mscaler_get_interrupt_info、ll_mscaler_clear_interrupt_status
frame endll_mscaler_enable_frame_end_intp、ll_mscaler_set_frame_end_clear、ll_mscaler_set_frame_end_mask

当前 ll_mscaler_clear_interrupt_status() 只将 MSCALER_FRAME_END_MASK 写入 clear 寄存器,因此只清除 frame-end 状态位。