使用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 mapxsApp_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的各位老司机帮我解惑~~~
user5305451:
顶一下,都放假了吗,快来人呀~~~~~
Chris Meng:
回复 user5305451:
你好,
IPNC RDK里面有一个函数Iss_captResetAndRestart,建议参考这个函数来复位ISS。在复位ISS前,请确保所以ISS对DDR的访问都已经结束。
user5305451:
回复 Chris Meng:
你好,
我调试之后发现前面问题提到的卡住的现象,只是会出现在所有Link都Delete之后,包括您提到的函数Iss_captResetAndRestart;如果Link正在运行,就不会出现卡死的现象。
现在我需要解决CameraLink第二次Create失败卡死的问题,请问有什么好的思路吗?
Chris Meng:
回复 user5305451:
你好,
我们默认代码如果reboot,会有同样的问题么?
user5305451:
回复 Chris Meng:
您说的reboot是什么操作?
我们现在是通过重新加载M3VPSS的程序来确保第二次可以运行:
fw_load.out shutdown VPSS-M3
fw_load.out startup VPSS-M3 ./firmware/ipnc_rdk_fw_m3vpss.xem3