使用LinkApi时发现CameraLink在使用一次之后(Create->Start->Stop->Delete),再次Create时会失败:
A8端调试运行代码卡在Create语句:
System_linkCreate(xscameraId, &cameraPrm,sizeof(cameraPrm));
M3VPSS无法调试,通过打印信息推测出运行代码卡在这个iss的函数中():
hal/iss/isp/ipipe_if/src/ipipe_if.c --> ISP_RETURN ipipeif_config(ipipeif_path_cfg_t * ipipeif_cfg)
这个函数是配置一些寄存器,在写或者读的时候卡住了。
:问题1:这里为什么会卡住呢?
我尝试通过复位ISP模块来解决这个问题,根据iss的文档介绍,代码如下:
void isp_sw_reset(void) { static CSL_ISP5Regs* ispreg; // memory map xsApp_mMap(0x5C010000, sizeof(CSL_ISP5Regs), &ispreg); printf("%s enter\n", __FUNCTION__); ISP_SET32(ispreg->ISP5_SYSCONFIG, 2, CSL_ISP5_SYSCONFIG_STANDBYMODE_SHIFT, CSL_ISP5_SYSCONFIG_STANDBYMODE_MASK); ISP_SET32(ispreg->ISP5_CTRL, 1, CSL_ISP5_CTRL_MSTANDBY_SHIFT, CSL_ISP5_CTRL_MSTANDBY_MASK); while(ISP_FEXT(ispreg->ISP5_CTRL, CSL_ISP5_CTRL_MSTANDBY_WAIT_SHIFT, CSL_ISP5_CTRL_MSTANDBY_WAIT_MASK) != 1); ISP_SET32(ispreg->ISP5_SYSCONFIG, 1, CSL_ISP5_SYSCONFIG_RESET_SHIFT, CSL_ISP5_SYSCONFIG_RESET_MASK);
// ISP_FEXT读取操作卡死 while(ISP_FEXT(ispreg->ISP5_SYSCONFIG, CSL_ISP5_SYSCONFIG_RESET_SHIFT, CSL_ISP5_SYSCONFIG_RESET_MASK)) { usleep(200*1000); printf("%s waiting for ISP5_SYSCONFIG_RESET\n", __FUNCTION__); } printf("%s complete\n", __FUNCTION__); xsApp_unmapMem(); }
在最后一步读取寄存器时卡死。
问题2:此处卡死是什么原因导致?是否与前一个问题的原因相同或者类似?
问题3:我最终需要解决的是可以让CameraLink可以再次创建不被卡死,复位ISP这种思路是否正确?
希望TI的各位老司机帮我解惑~~~