1. jpege_regs.h 寄存器列表
1.1 基地址
| 名称 | 地址 | 说明 |
|---|
JPEGE_IOBASE | 0x13200000 | G32S10 JPEGE 寄存器基地址 |
JPEGE | (jpege_regs_t *)(uintptr_t)JPEGE_IOBASE | JPEGE 寄存器实例指针 |
1.2 主要寄存器
| 寄存器 | RW | 偏移 | 说明 |
|---|
trig | RW | 0x000 | 触发、复位、shadow 控制 |
ctrl | RW | 0x004 | 编码模式、量化控制、AXI 写控制、ISP 联动 |
nmcu | RW | 0x008 | 当前帧 MCU 数量减一 |
frm_info | RW | 0x00C | 输入帧宽高 |
line_strd | RW | 0x010 | 输入行 stride |
rawy_addr | RW | 0x014 | Y/RAWY 输入地址 |
rawc_addr | RW | 0x018 | NV12/YUV420 的 UV 输入起始地址,需 256 字节对齐;YUV422/Bayer 下无效 |
format_ctrl | RW | 0x01C | 输入图像格式、Bayer pattern、AR outstanding |
wrap | RW | 0x020 | OCM 中 ISP/JPEG 可用的 8 行像素空间数量 |
marker | RW | 0x024 | JPEG restart marker 控制 |
code_pix_total | RW | 0x028 | 编码像素总数,按 MCU 对齐后写入 |
post_rdy_key0 / post_rdy_key1 | RW | 0x02C / 0x030 | Post-ready debug key |
bs_addr | RW | 0x034 | JPEG bitstream 输出地址 |
timeout_thrd | RW | 0x038 | 硬件帧超时阈值 |
version_num | R | 0x040 | RTL 版本号 |
glb_stat | R | 0x100 | 帧结束状态、当前帧 QP、输出码流长度 |
glb_fsm | R | 0x104 | 全局 FSM debug 状态 |
glb_fe_frm_cnt | R | 0x108 | JPEG/ISP frame counter |
intr_enable | RW | 0x10C | 中断使能 |
intr_stat | R | 0x110 | 中断状态 |
intr_clr | W | 0x114 | 中断清除 |
debug_* | R/RW | 0x118-0x1E0 | 运行期和帧结束锁存 debug 信息 |
qt_base_tab[32] | RW | 0x300-0x37C | 硬件 QP 模式使用的 base quantization table |
qt_tab[384] | RW | 0x400-0x9FC | 软件量化表 RAM,3 组 Y/UV 表 |
1.3 关键位域
1.3.1 TRIG
| 位 | 宏 | 说明 |
|---|
| 16:31 | JPEGE_FRM_END_CYCLES_MASK | 帧结束后进入 reset FSM 前的保持周期 |
| 12 | JPEGE_SW_SEQ_RST_REGS_MASK | SW sequence reset 是否包含 sequence registers |
| 8:11 | JPEGE_SW_RESET_CYCLE_MASK | 软件 reset pulse 宽度 |
| 7 | JPEGE_SHADOW_NEXT_START_EN_MASK | shadow 更新在下一帧开始时生效;生效后硬件自动清零 |
| 6 | JPEGE_SHADOW_NEXT_END_EN_MASK | shadow 更新在下一帧结束时生效;生效后硬件自动清零 |
| 5 | JPEGE_SHADOW_CUR_EN_MASK | shadow 更新对当前帧生效,用于第 0 帧配置;生效后硬件自动清零 |
| 4 | JPEGE_SHADOW_FLAG_MASK | shadow 控制使能标志,用于第 0 帧配置和更改 QP 与 QK_TAB_SEL 时 |
| 3 | JPEGE_SW_FSM_RESET_MASK | 软件触发 FSM reset |
| 2 | JPEGE_SW_SEQ_RESET_MASK | 软件触发 sequence reset,包括 frame reset |
| 1 | JPEGE_SW_FRM_RESET_MASK | 软件触发 frame reset |
| 0 | JPEGE_START_MASK | 非自动模式下每一帧需手动启动 |
1.3.2 CTRL
| 位 | 宏 | 说明 |
|---|
| 31 | JPEGE_AUTO_MODE_MASK | 是否开 start auto 模式,仅在开启isp时可使用 |
| 30 | JPEGE_AUTO_RESET_MASK | 帧结束或中断后自动 frame reset |
| 29 | JPEGE_TABLE_MODE_MASK | 0 软件表模式,1 硬件 QP 模式 |
| 22:28 | JPEGE_QP_MASK | QP,硬件 QP 模式使用,有效值 0-98 |
| 20:21 | JPEGE_QK_TAB_SEL_MASK | 软件表模式下使用,选择 3 组量化表之一 |
| 18 | JPEGE_TIME_OUT_EN_MASK | 硬件帧超时检测使能 |
| 16:17 | JPEGE_AWLEN_MASK | AXI AWLEN selector,0/1/2/3 对应 4/8/16/32 burst length |
| 15 | JPEGE_SAME_FRM_SEL_MASK | same-frame counter 逻辑选择,default 0 |
| 14 | JPEGE_ISP_EN_MASK | 使能 ISP/scaler 联动输入 |
| 13 | JPEGE_CROSS_4K_DIS_MASK | AXI cross-4K boundary 控制,default 0 |
| 10:11 | JPEGE_QT_V_MASK | V 分量量化表索引,default 1 |
| 6:7 | JPEGE_QT_U_MASK | U 分量量化表索引,default 1 |
| 2:3 | JPEGE_QT_Y_MASK | Y 分量量化表索引,default 0 |
1.3.3 FORMAT_CTRL
| 位 | 宏 | 说明 |
|---|
| 0:1 | JPEGE_FORMAT_SEL_MASK | 输入格式:0 NV12/YUV420,1 YUYV/YUV422,2 Y-only,3 Bayer |
| 2:3 | JPEGE_BAYER_FORMAT_MASK | Bayer pattern:RGGB/BGGR/GBRG/GRBG |
| 4:7 | JPEGE_AR_OUTSTANDING_MASK | AXI read outstanding,硬件存实际值减一 |
1.3.4 MARKERS
| 位 | 宏 | 说明 |
|---|
| 0 | JPEGE_MARKERS_ENABLE_MASK | Restart marker 使能 |
| 16:31 | JPEGE_MARKERS_NUMBER_MASK | Restart interval MCU 数,硬件存实际值减一 |
1.3.5 GLB_STAT / 中断
| 寄存器 | 位 | 宏 | 说明 |
|---|
glb_stat | 31 | JPEGE_FRM_END_MASK | 当前帧结束,BS_LEN 稳定 |
glb_stat | 24:30 | JPEGE_QP_IN_CUR_FRAME_MASK | 硬件 QP 模式下当前帧使用的 QP |
glb_stat | 0:23 | JPEGE_BS_LEN_MASK | 输出 bitstream 长度,单位 byte |
intr_enable/stat/clr | 3 | JPEGE_TIMEOUT_* | 硬件 timeout |
intr_enable/stat/clr | 2 | JPEGE_FRAME_START_ABNORMAL_* | frame start abnormal |
intr_enable/stat/clr | 1 | JPEGE_OVERFLOW_* | ISP 向 DDR 写数据覆盖 JPEG 读数据区域的异常,不表示 bitstream buffer 溢出 |
intr_enable/stat/clr | 0 | JPEGE_FRAME_END_* | frame end |
1.4 硬件限制和量化表区域
| 项 | 限制 |
|---|
| 输入宽度 | 640-1920,并满足像素格式对齐要求:Y 为 8,NV12/YUYV/Bayer 为 16 |
| 输入高度 | 480-1440,并满足像素格式对齐要求:YUYV 为 8,Y/NV12/Bayer 为 16 |
| 源/目的地址 | JPEGE HAL 要求 256 字节对齐 |
| AR outstanding | 1-16 |
| AWLEN selector | 0-3 |
| QP | 0-98,仅硬件 QP 模式使用 |
| QK_TAB_SEL | 0-2,仅软件表模式使用 |
量化表有两条路径:
| 模式 |
TABLE_MODE |
软件配置项 |
表区域 |
HAL_JPEGE_QT_MODE_HARD |
1 |
param.qp + config.codec.qt_table |
qt_base_tab[32] |
HAL_JPEGE_QT_MODE_SOFT |
0 |
param.qk_table + config.codec.qt_table |
qt_tab[384] |
软件量化表 RAM 支持 3 组 Y/UV 表。QK_TAB_SEL=0/1/2 分别选择高/中/低压缩程度的表组。
1.5 公开类型
| 值 |
说明 |
HAL_JPEGE_QT_MODE_SOFT |
软件提供完整量化表,使用 QK_TAB_SEL 选择表组 |
HAL_JPEGE_QT_MODE_HARD |
硬件根据 QP 和 base table 计算量化表 |
| 值 |
说明 |
HAL_JPEGE_QT_TABLE_1 |
使用内置表 preset 1 |
HAL_JPEGE_QT_TABLE_2 |
使用内置表 preset 2 |
| 值 |
说明 |
HAL_JPEGE_QK_TABLE_HIGH_COMPRESSION |
软件表模式选择高压缩组 |
HAL_JPEGE_QK_TABLE_MEDIUM_COMPRESSION |
软件表模式选择中压缩组 |
HAL_JPEGE_QK_TABLE_LOW_COMPRESSION |
软件表模式选择低压缩组 |
| 值 |
说明 |
HAL_JPEGE_PIX_FMT_NV12 |
Semi-planar NV12 输入 |
HAL_JPEGE_PIX_FMT_YUYV |
Packed YUYV 输入 |
HAL_JPEGE_PIX_FMT_Y |
单 Y 平面输入 |
HAL_JPEGE_PIX_FMT_BAYER |
Bayer raw 输入;HAL 会强制转为手动 start 并关闭 ISP linkage |
| 字段 | 类型 | 说明 |
|---|
width | uint32_t | 输入宽度,范围 640-1920,必须满足像素格式对齐 |
height | uint32_t | 输入高度,范围 480-1440,必须满足像素格式对齐 |
qp | uint32_t | 硬件 QP 模式使用,范围 0-98 |
| 字段 | 类型 | 说明 |
|---|
src_addr | void * | Y/RAWY 源地址,必须 256 字节对齐 |
src_uv_addr | void * | NV12/YUV420 UV 源地址;为 NULL 时 HAL 按 src_addr + stride * height 推导;YUYV/YUV422、Bayer 和单 Y 不使用 |
dst_addr | void * | JPEG bitstream 输出地址,必须 256 字节对齐 |
dst_buf_size | uint32_t | 输出 buffer 容量 |
| 字段 | 类型 | 说明 |
|---|
restart_markers_en | bool | 是否插入 restart markers |
restart_mcu_num | uint32_t | restart interval,启用时必须在 1 到 mcu_number - 1 |
| 字段 | 类型 | 说明 |
|---|
start_auto | bool | true 使用 scaler 自动 start,false 使用软件 START |
reset_auto | bool | true 硬件自动 frame reset,false 由 HAL 在取结果后触发 SW_FRM_RESET |
wrap | uint32_t | JPEG_WRAP 寄存器值,表示 OCM 中 ISP/JPEG 可用的 8 行像素空间数量;NV12/YUV420 至少 4,YUYV/YUV422 和单 Y 至少 2,Bayer 不配置 |
ar_outstanding | uint32_t | AXI read outstanding,范围 1-16 |
awlen | uint32_t | AXI AWLEN selector,范围 0-3 |
isp_en | bool | true 关联 ISP/scaler 输入,false 使用 PSRAM direct input |
timeout_ms | uint32_t | 软件等待帧完成的超时时间,单位为毫秒;为 0 时使用 middleware 默认值 |
reset_cycle | uint32_t | 软件 reset pulse field,范围 0-15 |
2. LL JPEGE 接口
详见 code/include/drivers/g32s10/jpege/ll_jpege.h。所有函数均为 static inline,直接访问 JPEGE 寄存器。
2.1 触发、复位、Shadow
| 类别 | 主要函数 |
|---|
| reset 参数 | ll_jpege_set_trig_frm_end_cycles, ll_jpege_set_trig_sw_reset_cycle, ll_jpege_enable/disable_trig_sw_seq_rst_regs |
| shadow | ll_jpege_set_shadow_flag, ll_jpege_enable_shadow_cur, ll_jpege_enable_shadow_next_start, ll_jpege_enable_shadow_next_end |
| 软件 reset | ll_jpege_enable_fsm_reset, ll_jpege_enable_seq_reset, ll_jpege_enable_frm_reset |
| start | ll_jpege_start |
2.2 CTRL 控制
| 类别 | 主要函数 |
|---|
| 触发模式 | ll_jpege_set_auto_mode, ll_jpege_set_trig_mode |
| auto frame reset | ll_jpege_enable_auto_reset, ll_jpege_disable_auto_reset |
| 量化控制 | ll_jpege_set_table_mode, ll_jpege_set_qp, ll_jpege_set_qk_table, ll_jpege_set_ctrl_qt |
| timeout | ll_jpege_set_enable_time_out, ll_jpege_set_disable_time_out, ll_jpege_set_timeout_threshold |
| AXI | ll_jpege_set_awlen, ll_jpege_set_new_frm_sel, ll_jpege_set_cross_4k_enable |
| ISP | ll_jpege_enable_isp, ll_jpege_disable_isp |
2.3 帧参数和地址
| 类别 | 主要函数 |
|---|
| MCU/宽高/stride | ll_jpege_set_mcu_number, ll_jpege_get_mcu_number, ll_jpege_set_frame_info, ll_jpege_set_line_stride |
| 源/目的地址 | ll_jpege_set_src_y_addr, ll_jpege_set_src_uv_addr, ll_jpege_set_dst_addr |
| 格式 | ll_jpege_set_pix_format, ll_jpege_set_bayer_format, ll_jpege_set_format |
| AXI read | ll_jpege_set_ar_outstanding |
| wrap | ll_jpege_set_wrap,配置 OCM 中 ISP/JPEG 可用的 8 行像素空间数量 |
| restart marker | ll_jpege_enable_restart_markers, ll_jpege_disable_restart_markers, ll_jpege_set_restart_markers_number |
| 像素总数 | ll_jpege_set_code_pixel_number |
2.4 状态、计数器和中断
| 类别 | 主要函数 |
|---|
| 输出状态 | ll_jpege_get_output_size, ll_jpege_get_frame_end, ll_jpege_get_qp_in_cur_frame |
| FSM | ll_jpege_get_glb_fsm, ll_jpege_get_reset_fsm_done |
| frame counter | ll_jpege_get_frm_cnt, ll_jpege_get_isp_frm_cnt |
| 中断使能 | ll_jpege_enable/disable_frame_end_intr, ll_jpege_enable/disable_overflow_intr, ll_jpege_enable/disable_frame_start_abnormal_intr, ll_jpege_enable/disable_timeout_intr, ll_jpege_enable/disable_all_intr |
| 中断状态 | ll_jpege_get_intr_status, ll_jpege_get_frame_end_info, ll_jpege_get_overflow_info, ll_jpege_get_frame_start_abnormal_info, ll_jpege_get_timeout_info |
| 中断清除 | ll_jpege_clear_intr_status, ll_jpege_clear_frame_end_intr, ll_jpege_clear_overflow_intr, ll_jpege_clear_frame_start_abnormal_intr, ll_jpege_clear_timeout_intr, ll_jpege_clear_all_intr |
2.5 量化表写入
| 函数 | 功能 |
|---|
ll_jpege_set_quant_base_table(table, word_count) | 写硬件 QP 模式 base table,即 qt_base_tab[] |
ll_jpege_set_quant_table(table, word_count) | 写软件量化表 RAM,即 qt_tab[] |