2440 camera 问题????--献上所有分
刚接触CE1个月 马上要在公司自己开发的主板上移植7645BF驱动了 还有些有关camera驱动问题还不是很清楚 希望高人解答!!!
比如 2440上 camera分配的是irq6 该irq可能由INTSUB_CAM_P、INTSUB_CAM_C或INT_CAM 被置一而引起,有的资料上说中断由VSYNC垂直同步信号引起 这个由VSYNC触发的中断到底是 INTSUB_CAM_P、INTSUB_CAM_C还是INT_CAM啊? ??如果触发的是INT_CAM 那INTSUB_CAM_P、INTSUB_CAM_C又是怎么被触发的?是由APP发命令触发吗?
程序中首先使能INT_CAM再使能INTSUB_CAM_P或INTSUB_CAM_C中断,开始采集图像(使能C或P通道),采集完一帧时会触发中断INT_CAM ,进入中断处理,在中断处理函数中检测SUBSRCPND来判断是INTSUB_CAM_P还是INTSUB_CAM_C(也就是判断哪个通道发出的中断)
**************************
飞凌嵌入式 www.witech.com.cn
**************************
INTSUB_CAM_P或INTSUB_CAM_C中断 是由什么触发呢? 如果是软件触发 要实现持续显示 那么APP就要不断触发INTSUB_CAM_P??因为在IST中每次都进行了清中断操作 是不是这样啊
引用: 引用 2 楼 xiaopi224 的回复:
程序中首先使能INT_CAM再使能INTSUB_CAM_P或INTSUB_CAM_C中断,开始采集图像(使能C或P通道),采集完一帧时会触发中断INT_CAM ,进入中断处理,在中断处理函数中检测SUBSRCPND来判断是INTSUB_CAM_P还是INTSUB_CAM_C(也就是判断哪个通道发出的中断)
**************************
飞凌嵌入式 www.witech.com.cn
**************************
采完一帧是要触发ITN_CAM 但是直接触发的INT_CAM还是触发INTSUB_CAM_P或INTSUB_CAM_C而间接触发INT_CAM的
再请教xiaopi224一个问题
在下面代码中发现产生INTSRC_CAM中断后若BIT_SUB_CAM_P和BIT_SUB_CAM_C都没触发 那就执行 “//有疑问的代码”标记的代码 即屏蔽掉了Camera所有中断并返回了SYSINTR_NOP 这样 相应的IST得不到执行也就不会调用InterruptDone来打开屏蔽的中断那 以后不是都不会产生INTSRC_CAM中断了??????????
else if(IntPendVal == INTSRC_CAM)
{
// RETAILMSG(1,(TEXT("INT:SYSINTR_CAM INT:0x%x,0x%x\r\n"),s2440INT->rSRCPND,s2440INT->rSUBSRCPND));
if( s2440INT->rSUBSRCPND & (0x1<<11) )
{
s2440INT->rINTSUBMSK |= (0x1<<11);
s2440INT->rINTMSK |= BIT_CAM;
s2440INT->rSUBSRCPND = (0x1<<11);
s2440INT->rSRCPND = BIT_CAM;
if (s2440INT->rINTPND & BIT_CAM) s2440INT->rINTPND = BIT_CAM;
return SYSINTR_CAM;
}
else if (s2440INT->rSUBSRCPND & BIT_SUB_CAM_P)
{
s2440INT->rINTSUBMSK |= (0x2<<11);
s2440INT->rINTMSK |= BIT_CAM;
s2440INT->rSUBSRCPND = (0x2<<11);
s2440INT->rSRCPND = BIT_CAM;
if (s2440INT->rINTPND & BIT_CAM) s2440INT->rINTPND = BIT_CAM;
return SYSINTR_CAM;
}
//有疑问的代码
s2440INT->rINTSUBMSK |= (BIT_SUB_CAM_C | BIT_SUB_CAM_P);
s2440INT->rINTMSK |= BIT_CAM;
s2440INT->rSUBSRCPND = (BIT_SUB_CAM_C | BIT_SUB_CAM_P);
s2440INT->rSRCPND = BIT_CAM;
if (s2440INT->rINTPND & BIT_CAM)
{
s2440INT->rINTPND = BIT_CAM;
}
return SYSINTR_NOP;
//有疑问的代码
}
BIT_SUB_CAM_C 和BIT_SUB_CAM_P都没有的话也就不会产生INT_CAM中断了吧,所以屏蔽掉也没关系啦
你看看驱动里面使能中断的时候都是先使能INT_CAM 吧
基于上面问题再请教xiaopi224一个问题 BIT_SUB_CAM_P和BIT_SUB_CAM_C 若同时被触发则上面代码不能处理BIT_SUB_CAM_C 因为判断有BIT_SUB_CAM_P中断后就直接返回了 这样对吗 ????
引用: 引用 6 楼 xiaopi224 的回复:
BIT_SUB_CAM_C 和BIT_SUB_CAM_P都没有的话也就不会产生INT_CAM中断了吧,所以屏蔽掉也没关系啦
你看看驱动里面使能中断的时候都是先使能INT_CAM 吧
INT_CAM 好像是由VSYNC触发的 就算BIT_SUB_CAM_C 和BIT_SUB_CAM_P没触发 在VSYNC下降沿INT_CAM都会被触发吧 你说的有点矛盾哦.
哦 上面说的有误,我的理解是这样的,产生中断就是为了要处理数据,也就是C或P采集完一帧后产生中断告诉你这帧采集完成可以进行处理了。如果不使能BIT_SUB_CAM_C 和BIT_SUB_CAM_P也就没办法判断是哪个通道采集完了,所以……
所以我才 想问BIT_SUB_CAM_C 和BIT_SUB_CAM_P到底是由什么触发的 难道是 VSYNC 下降沿触发BIT_SUB_CAM_P进而触发INT_CAM 如果VSYNC 触发的是int_cam 则会因忘了触发BIT_SUB_CAM_C 和BIT_SUB_CAM_P而引发上面的问题
BIT_SUB_CAM_C , BIT_SUB_CAM_P都是CAM的中断。
首先C/P只是摄像码流的差别:C-port表示YCbCr模式,P-port表示RGB模式。
不管哪种一旦有中断,都会在触发自身标志位中断的同时,也触发INT_CAM。
而INT_CAM被触发的原因不仅仅C/P这两种。
这些中断,都是硬件控制器触发的,然后由软件进行判断及相应的处理。
引用: 引用 11 楼 shuiyan 的回复:
这些中断,都是硬件控制器触发的,然后由软件进行判断及相应的处理。
datasheet 上没说BIT_SUB_CAM_C , BIT_SUB_CAM_P是硬件触发啊 资料上 SUBSRCPND 这个包含BIT_SUB_CAM_C , BIT_SUB_CAM_P位的REG是R/W 属性的啊 也就是可以软件配置的啊!
不用资料说,必须知道:所有的中断源都是硬件控制器触发,软件只是处理中断。可以配置,只是提供这个接口,当需要的时候去触发。一般极少用到的。
引用: 引用 13 楼 shuiyan 的回复:
不用资料说,必须知道:所有的中断源都是硬件控制器触发,软件只是处理中断。可以配置,只是提供这个接口,当需要的时候去触发。一般极少用到的。
这样说比较合理 但“所有的中断源都是硬件控制器触发”也不是吧 我看到有的datasheet上也明确指明了一些中断源reg可以软件置位啊 如 以下摘录的一datasheet
5.7.2.2.1 IRQ 软件设置中断
ARM1 中断控制器(ICTL1)支持通过软件来设置中断。IRQ 中断软件设置寄存器
(ICTL1_IRQ_INTFORCE)的控制比特与IRQ 请求信号一一对应,可以通过设置IRQ 中断
软件设置寄存器(ICTL1_IRQ_INTFORCE)的相应比特来触发IRQ 中断;并通过对IRQ 中
断软件设置寄存器(ICTL1_IRQ_INTFORCE)的相应比特清零来清除IRQ 中断请求。