API GUIDE / MSCALER / LL
G32S10 MSCALER LL 接口
LL 层接口:mscaler_regs.h 的尺寸字段能表达的范围大于当前 HAL 的校验范围。
1. mscaler_regs.h 寄存器层
1.1 基地址
| 名称 | 地址 | 说明 |
|---|
MSCALER_IOBASE | 0x132A0000 | G32S10 MSCALER 寄存器基地址 |
MSCALER | (mscaler_regs_t *)(uintptr_t)MSCALER_IOBASE | MSCALER 寄存器实例指针 |
1.2 主要寄存器
| 寄存器 | RW | 偏移 | 说明 |
|---|
soft_version / hard_version | R | 0x000 / 0x004 | 软件与硬件版本号 |
ctrl | RW | 0x010 | Shadow 配置控制 |
tiziano_stop | RW | 0x014 | Tiziano 输入 stop 控制 |
all_reg_rst | RW | 0x018 | 全寄存器功能复位 |
ch_work_en | RW | 0x020 | MSCALER 缩放工作使能 |
coef_fix_en | RW | 0x034 | 横向/纵向固定点缩放系数使能 |
src_rsz_size | RW | 0x040 | 输入 crop 宽高 |
rsz_step_w / rsz_step_h | RW | 0x048 / 0x04C | 横向/纵向缩放步进 |
rsz_size | RW | 0x058 | 缩放后图像宽高 |
work_stat | R | 0x060 | MSCALER 工作状态 |
out_fmt | RW | 0x06C | 输出像素格式 |
dmaout_y_addr / dmaout_y_stride | RW | 0x07C / 0x080 | DMA 输出 Y 平面地址与 stride |
dmaout_uv_addr / dmaout_uv_stride | RW | 0x08C / 0x090 | DMA 输出 UV 平面地址与 stride |
cub_w / cub_ws | RW | 0x094 / 0x098 | Cubic 插值参数 |
coef_hcore_* | RW | 0x09C-0x0BC | 横向 H-core 系数,17 个 13-bit 系数 |
coef_wcore_* | RW | 0x0C0-0x0E0 | 纵向 W-core 系数,17 个 13-bit 系数 |
rdma_y_addr / rdma_y_stride | RW | 0x0E8 / 0x0EC | RDMA 输入 Y 平面地址与 stride |
rdma_uv_addr / rdma_uv_stride | RW | 0x0F0 / 0x0F4 | RDMA 输入 UV 平面地址与 stride |
out_buff_num | RW | 0x100 | JPEG 联动时的 DDR 回环行数 |
out_bline_num | RW | 0x104 | 向 JPEG 发送 add 信号的行阈值 |
rdma_enable | RW | 0x10C | RDMA 输入与模块启动使能 |
int_common_0_en/clr/info/mask | RW/RW/R/RW | 0x220-0x22C | frame-end 中断使能、清除、状态和屏蔽 |
1.3 关键字段与配置限制
1.3.1 控制与启动
| 寄存器/字段 | 值 | 说明 |
|---|
CTRL.SHD_CTRL | 1 | Shadow 配置使能。全部配置完成后写 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_*_ADDR | Y/UV 地址均须 8-byte 对齐。 |
RDMA_*_STRIDE、DMAOUT_*_STRIDE | Y/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_width | 8-1920 像素 |
src_height / dst_height | 8-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 |
| shadow | ll_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 Y | ll_mscaler_set_dmaout_y_addr、ll_mscaler_set_dmaout_y_stride |
| DMAOUT UV | ll_mscaler_set_dmaout_uv_addr、ll_mscaler_set_dmaout_uv_stride |
| RDMA Y | ll_mscaler_set_rdma_y_addr、ll_mscaler_set_rdma_y_stride |
| RDMA UV | ll_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 end | ll_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 状态位。