void ipa_color_convert_init(void) {
// 1. 使能IPA时钟
rcu_periph_clock_enable(RCU_IPA);
ipa_deinit(); // 复位IPA模块
// 2. 配置前景层(输入:UYVY422)
ipa_foreground_parameter_struct fg_param;
ipa_foreground_struct_para_init(&fg_param);
fg_param.fg_format = FOREGROUND_PPF_UYVY422_1P; // 输入格式:UYVY422
fg_param.fg_baseaddr = (uint32_t)uyvy_buffer; // 输入缓冲区地址(摄像头数据)
fg_param.fg_line_width = 640; // 图像宽度(像素)
fg_param.fg_line_stride = 640 * 2; // 行跨度(字节,UYVY422每像素2字节)
fg_param.fg_height = 480; // 图像高度
ipa_foreground_config(&fg_param);
// 3. 配置目标层(输出:RGB888)
ipa_destination_parameter_struct dest_param;
ipa_destination_struct_para_init(&dest_param);
dest_param.dest_format = DESTINATION_PPF_RGB888; // 输出格式:RGB888
dest_param.dest_baseaddr = (uint32_t)rgb_buffer; // 输出缓冲区地址
dest_param.dest_line_stride = 640 * 3; // 行跨度(字节,RGB888每像素3字节)
ipa_destination_config(&dest_param);
// 4. 配置转换模式(关键:开启格式转换)
ipa_mode_config(IPA_FGTODE_PF_CONVERT); // 前景→目标,带格式转换
// 5. 配置转换区域(与图像尺寸一致)
ipa_window_config(0, 0, 640-1, 480-1); // 左上角(0,0)到右下角(639,479)
// 6. 使能转换完成中断(可选,替代轮询)
ipa_interrupt_enable(IPA_INT_FGTODE_DONE);
nvic_irq_enable(IPA_IRQn, 1, 0);
}
|