API GUIDE / JPEGD / LL

G32S10 JPEGD LL 接口

LL 层接口:当前 HAL 固定使用以下 selector,不在 HAL public API 中暴露选择器配置:

1. jpegd_regs.h 寄存器层

1.1 基地址

名称地址说明
JPEGD_IOBASE0x13210000G32S10 JPEGD 寄存器基地址
JPEGD(jpegd_regs_t *)(uintptr_t)JPEGD_IOBASEJPEGD 寄存器实例指针

1.2 主要寄存器

寄存器RW偏移说明
trigRW0x000启动、软件 reset 和 reset 状态
ctrlRW0x004timeout、QT/HA/HD table selector、cross 4K 控制
nmcuRW0x008当前帧 MCU 数量减一
frm_infoRW0x00C对齐后的输出帧宽高
line_strdRW0x010输出行 stride
rawy_addrRW0x014输出 Y 平面起始地址
rawc_addrRW0x018NV12/YUV420 输出 UV 平面起始地址
bs_addrRW0x01Centropy bitstream 起始地址
timeout_thrdRW0x020硬件 timeout 阈值
format_ctrlRW0x024输出像素格式
code_pix_totalRW0x028解码输出的对齐后 RAW 字节总数
markersRW0x02CRestart marker 使能和 interval
post_ready_key0 / post_ready_key1RW0x030 / 0x034Post-ready debug key
version_numR0x038RTL 版本号
intr_enableRW0x03C中断使能
intr_statR0x040中断状态
intr_clrW0x044中断清除
glb_statR0x100帧结束状态和 RAW 输出长度
glb_fsmR0x104全局 FSM 和 reset FSM 状态
debug_*R/RW0x108-0x16Cbitstream/raw/debug FSM/EXI/ETC 运行期信息
qt_tab_y[16]RW0x300-0x33CY 分量量化表,16 个 32-bit word
qt_tab_u[16]RW0x340-0x37CU 分量量化表,16 个 32-bit word
qt_tab_v[16]RW0x380-0x3BCV 分量量化表,16 个 32-bit word
huffmin[16]RW0x400-0x43CHuffman minimum table
huffbase[64]RW0x500-0x5FCHuffman base table
huffsymb[336]RW0x600-0xB3CHuffman symbol table

1.3 关键位域

1.3.1 TRIG

位宏说明
31JPEGD_RESET_END_MASK软件 reset 完成状态
8JPEGD_SW_SEQ_RST_REGS_MASKSequence reset 是否覆盖 sequence-level registers
4:7JPEGD_SW_RESET_CYCLE_MASK软件 reset pulse 宽度
3JPEGD_SW_FSM_RESET_MASK软件触发 FSM reset
2JPEGD_SW_SEQ_RESET_MASK软件触发 sequence reset
1JPEGD_SW_FRM_RESET_MASK软件触发 frame reset
0JPEGD_START_MASK软件启动一帧解码

1.3.2 CTRL

位宏说明
13JPEGD_CROSS_4K_DIS_MASKcross-4K-boundary 控制
12JPEGD_TIME_OUT_EN_MASK硬件 timeout 检测使能
10:11JPEGD_QT_V_MASKV 分量量化表 selector
9JPEGD_HA_V_MASKV 分量 AC Huffman table selector
8JPEGD_HD_V_MASKV 分量 DC Huffman table selector
6:7JPEGD_QT_U_MASKU 分量量化表 selector
5JPEGD_HA_U_MASKU 分量 AC Huffman table selector
4JPEGD_HD_U_MASKU 分量 DC Huffman table selector
2:3JPEGD_QT_Y_MASKY 分量量化表 selector
1JPEGD_HA_Y_MASKY 分量 AC Huffman table selector
0JPEGD_HD_Y_MASKY 分量 DC Huffman table selector

当前 HAL 固定使用以下 selector,不在 HAL public API 中暴露选择器配置:

分量QTHA/ACHD/DC
Y000
U111
V111

1.3.3 FORMAT_CTRL

位宏说明
0:1JPEGD_FORMAT_SEL_MASK输出格式:0 NV12/YUV420,1 YUYV/YUV422,2 单 Y

1.3.4 MARKERS

位宏说明
0JPEGD_MARKERS_ENABLE_MASKRestart marker 解码使能
16:31JPEGD_MARKERS_NUMBER_MASKRestart interval MCU 数,硬件存实际值减一

1.3.5 GLB_STAT / 中断

寄存器位宏说明
glb_stat31JPEGD_FRM_END_MASK当前帧解码结束
glb_stat0:23JPEGD_RAW_LEN_MASK输出 RAW 字节数
intr_enable/stat/clr1JPEGD_TIMEOUT_INTR_MASK硬件 timeout
intr_enable/stat/clr0JPEGD_FRAME_END_INTR_MASKframe end

1.4 表寄存器布局

表寄存器数组word 数byte 数说明
Y QTqt_tab_y[16]1664Y 分量 8-bit quant table,按 4 byte 打包成 32-bit word
U QTqt_tab_u[16]1664U 分量 8-bit quant table,按 4 byte 打包成 32-bit word
V QTqt_tab_v[16]1664V 分量 8-bit quant table,按 4 byte 打包成 32-bit word
Huffman minimumhuffmin[16]1664DC/AC minimum table payload
Huffman basehuffbase[64]64256DC/AC base table payload
Huffman symbolhuffsymb[336]3361344DC/AC symbol table payload

LL 表写入接口逐 word 写这些寄存器数组。HAL 会固定使用上述 word 数。

1.5 硬件限制和几何计算

项当前 HAL 限制
输出宽度8-1920
输出高度8-1440
输出 RAWY/RAWC 地址16 字节对齐,且不能为 0
输入 bitstream 地址HAL 只校验非空
输入 bitstream 长度必须非 0
Reset cycle0-15,0 在 reset 流程中按 HAL 默认值处理
输出格式NV12/YUV420、YUYV/YUV422、单 Y
QT 表指针qt_y/qt_u/qt_v 均不能为 NULL
Huffman 表指针huffmin/huffbase/huffsymb 均不能为 NULL

几何参数计算:

输出格式 对齐宽 对齐高 stride code_pix_total / 输出容量要求 MCU 数
HAL_JPEGD_PIX_FMT_Y 8 8 width_aligned stride * height_aligned (width_aligned / 8) * (height_aligned / 8)
HAL_JPEGD_PIX_FMT_NV12 16 16 width_aligned stride * height_aligned * 3 / 2 (width_aligned / 16) * (height_aligned / 16)
HAL_JPEGD_PIX_FMT_YUYV 16 8 width_aligned * 2 stride * height_aligned (width_aligned / 16) * (height_aligned / 8)

NV12 输出下,若 frame.dst_uv_addr == NULL,HAL 按紧凑布局推导:

dst_uv_addr = dst_y_addr + stride * height

推导出的 UV 地址仍必须满足 16 字节对齐,输出 buffer 仍必须覆盖 HAL 计算出的完整输出容量。

2. LL JPEGD 接口

详见 code/include/drivers/g32s10/jpegd/ll_jpegd.h。所有函数均为 static inline,直接访问 JPEGD 寄存器。

2.1 LL 层约定

  • LL 不保存状态,不记录当前帧参数,也不做调用顺序保护

  • LL 不检查空指针、数组长度、地址对齐、MCU 数范围和输出格式合法性

  • LL 的 *_mcu_number() 接口接收实际 MCU 数,写寄存器时自动转为硬件需要的 value - 1

  • LL 表写入接口按 word_count 循环写寄存器数组,调用方必须传固定表长:QT 和 HUFFMIN 为 16,HUFFBASE 为 64,HUFFSYMB 为 336。LL 不自行限制该值:过小会留下旧表项,过大会写过寄存器数组边界

  • HAL 是当前推荐的寄存器配置入口;只有在 bring-up 或调试时才建议直接调用 LL

2.2 触发和复位

类别主要函数
reset 状态ll_jpegd_get_reset_end, ll_jpegd_get_reset_fsm_done
reset 参数ll_jpegd_set_sw_reset_cycle, ll_jpegd_enable_sw_seq_rst_regs, ll_jpegd_disable_sw_seq_rst_regs
软件 resetll_jpegd_enable_fsm_reset, ll_jpegd_enable_seq_reset,  ll_jpegd_enable_frm_reset
startll_jpegd_start

2.3 CTRL 控制

类别主要函数
timeoutll_jpegd_enable_timeout, ll_jpegd_disable_timeout, ll_jpegd_set_timeout_thrd
cross 4Kll_jpegd_enable_cross_4k_boundary
QT selectorll_jpegd_set_qt_y, ll_jpegd_set_qt_u, ll_jpegd_set_qt_v
AC Huffman selectorll_jpegd_set_ha_y, ll_jpegd_set_ha_u, ll_jpegd_set_ha_v
DC Huffman selectorll_jpegd_set_hd_y, ll_jpegd_set_hd_u, ll_jpegd_set_hd_v

2.4 帧参数和地址

类别主要函数
MCU/宽高/stridell_jpegd_set_mcu_number, ll_jpegd_get_mcu_number, ll_jpegd_set_frame_width, ll_jpegd_set_frame_height, ll_jpegd_set_frame_info, ll_jpegd_set_line_stride
源/目的地址ll_jpegd_set_src_addr, ll_jpegd_set_dst_y_addr, ll_jpegd_set_dst_uv_addr
输出格式ll_jpegd_set_output_format
像素总数ll_jpegd_set_code_pixel_number
restart markerll_jpegd_enable_restart_markers, ll_jpegd_disable_restart_markers, ll_jpegd_set_restart_marker_mcu_number

2.5 Debug、状态和中断

类别主要函数
post-ready keyll_jpegd_enable_post_ready_key0, ll_jpegd_enable_post_ready_key1, ll_jpegd_enable_post_ready_keys
版本ll_jpegd_get_version_num
输出状态ll_jpegd_get_glb_stat, ll_jpegd_get_frame_end, ll_jpegd_get_raw_len, ll_jpegd_get_output_size
FSMll_jpegd_get_glb_fsm, ll_jpegd_get_reset_fsm_done, ll_jpegd_get_slv_fsm1, ll_jpegd_get_slv_fsm0, ll_jpegd_get_reset_fsm, ll_jpegd_get_ctrl_fsm
中断使能ll_jpegd_enable_frame_end_intr, ll_jpegd_disable_frame_end_intr, ll_jpegd_enable_timeout_intr, ll_jpegd_disable_timeout_intr, ll_jpegd_enable_intr, ll_jpegd_disable_intr, ll_jpegd_enable_all_intr, ll_jpegd_disable_all_intr
中断状态ll_jpegd_get_intr_status, ll_jpegd_get_frame_end_info, ll_jpegd_get_timeout_info
中断清除ll_jpegd_clear_frame_end_intr, ll_jpegd_clear_timeout_intr, ll_jpegd_clear_intr, ll_jpegd_clear_intr_status, ll_jpegd_clear_all_intr

2.6 QT 和 Huffman 表写入

函数功能
ll_jpegd_set_qt_y_table(qt_y, word_count)写 Y 分量量化表,即 qt_tab_y[];word_count 必须为 16
ll_jpegd_set_qt_u_table(qt_u, word_count)写 U 分量量化表,即 qt_tab_u[];word_count 必须为 16
ll_jpegd_set_qt_v_table(qt_v, word_count)写 V 分量量化表,即 qt_tab_v[];word_count 必须为 16
ll_jpegd_set_huffmin_table(huffmin, word_count)写 Huffman minimum 表,即 huffmin[];word_count 必须为 16
ll_jpegd_set_huffbase_table(huffbase, word_count)写 Huffman base 表,即 huffbase[];word_count 必须为 64
ll_jpegd_set_huffsymb_table(huffsymb, word_count)写 Huffman symbol 表,即 huffsymb[];word_count 必须为 336