- 在 openspec/changes/archive/ 下新增 2026-03-13-check-dvp-dma-ir 归档目录
- 新增设计文档 (design.md),包含背景、目标、决策和风险评估
- 新增提案文档 (proposal.md),说明变更原因、内容和影响
- 新增功能规范 (spec.md),定义 DVP 配置验证、DMA 内存传输正确性和诊断输出要求
- 新增任务清单 (tasks.md),列出代码审查、中断处理和诊断验证的具体步骤
- 更新 openspec/config.yaml,添加上下文注释
- 在 openspec/specs/ 下新增 dvp-dma-ir-capture 功能规范
🐛 fix(dvp): 修复 DVP 任务中的竞态条件并增强调试输出
- 在 DVP_Task() 中访问 Line_Ready_Flag 和 Ready_Line_Ptr 前禁用 DVP 中断,操作后重新启用,防止数据竞争
- 增强第0行的调试打印,每秒计算并输出帧率 (fps)
- 新增打印第0行前8个字节的原始数据,用于验证数据有效性
- 使用外部定义的 sys_tick_ms 进行时间计算,确保时间基准一致
1.7 KiB
1.7 KiB
Context
目前项目采用 CH32V30x 微控制器的 DVP (Digital Video Port) 外设,结合 DMA 进行红外图像数据的采集。 为保证后续的图像处理或网络传输顺利进行,必须确认目前的 DVP 和 DMA 的配置是正确的,能够稳定、及时、无损地将红外图像帧搬运到 RAM 区,并正确处理帧中断。
Goals / Non-Goals
Goals:
- 验证 DVP 引脚配置、时序极性和中断设置是否符合所搭配红外传感器输出时序要求。
- 验证 DMA 数据搬运目标地址是否正确分配且对齐,大小是否匹配一帧红外数据。
- 确认 DMA/DVP 中断服务程序(ISR)中能有效判断帧结束和 DMA 传输完成,不发生漏帧或混乱。
- 添加必要的轻量级日志或断点测试方法来确认取到的数据。
Non-Goals:
- 不涉及深度的图像识别或处理算法的开发。
- 不涉及改变传感器本身的输出模式配置(除非影响获取数据的基础正确性)。
Decisions
- 检查代码而不是立即重写: 首先静态走查相关的配置(如
dvp.c,dvp.h),与 CH32 参考手册进行比对。 - 内存块分配策略验证: 确定 DVP DMA 配置的两块(双缓冲或单缓冲)地址机制,确认没有指针越界风险。
- 测试方法: 在帧结束中断或主循环中计算短时间内获取的有效帧数,并提取部分像素输出串口打印。
Risks / Trade-offs
- [Risk] 数据量大可能引起总线或者处理迟滞 → 中断处理要足够短小,不能阻塞下一次 DMA。
- [Risk] 直接修改中断服务可能会影响原有稳定的网络栈通信延时 → 在验证阶段避免添加过多阻塞的 printf 等操作。