2440 camera 问题????--献上所有分

0400240116   2009-4-9 15:25 楼主
刚接触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发命令触发吗?

回复评论 (14)

点赞  2009-4-9 15:54

程序中首先使能INT_CAM再使能INTSUB_CAM_P或INTSUB_CAM_C中断,开始采集图像(使能C或P通道),采集完一帧时会触发中断INT_CAM ,进入中断处理,在中断处理函数中检测SUBSRCPND来判断是INTSUB_CAM_P还是INTSUB_CAM_C(也就是判断哪个通道发出的中断)



**************************
飞凌嵌入式 www.witech.com.cn   
**************************
点赞  2009-4-9 19:54
INTSUB_CAM_P或INTSUB_CAM_C中断 是由什么触发呢? 如果是软件触发 要实现持续显示 那么APP就要不断触发INTSUB_CAM_P??因为在IST中每次都进行了清中断操作  是不是这样啊
点赞  2009-4-10 09:11
引用: 引用 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的
点赞  2009-4-10 11:36
再请教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;
//有疑问的代码
        }

点赞  2009-4-10 15:17
BIT_SUB_CAM_C 和BIT_SUB_CAM_P都没有的话也就不会产生INT_CAM中断了吧,所以屏蔽掉也没关系啦

你看看驱动里面使能中断的时候都是先使能INT_CAM 吧
点赞  2009-4-10 17:29
基于上面问题再请教xiaopi224一个问题 BIT_SUB_CAM_P和BIT_SUB_CAM_C 若同时被触发则上面代码不能处理BIT_SUB_CAM_C 因为判断有BIT_SUB_CAM_P中断后就直接返回了 这样对吗 ????
点赞  2009-4-10 17:41
引用: 引用 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都会被触发吧 你说的有点矛盾哦.
点赞  2009-4-10 17:47
哦 上面说的有误,我的理解是这样的,产生中断就是为了要处理数据,也就是C或P采集完一帧后产生中断告诉你这帧采集完成可以进行处理了。如果不使能BIT_SUB_CAM_C 和BIT_SUB_CAM_P也就没办法判断是哪个通道采集完了,所以……
点赞  2009-4-13 10:03
所以我才 想问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而引发上面的问题
点赞  2009-4-13 12:32
BIT_SUB_CAM_C , BIT_SUB_CAM_P都是CAM的中断。
首先C/P只是摄像码流的差别:C-port表示YCbCr模式,P-port表示RGB模式。
不管哪种一旦有中断,都会在触发自身标志位中断的同时,也触发INT_CAM。
而INT_CAM被触发的原因不仅仅C/P这两种。

这些中断,都是硬件控制器触发的,然后由软件进行判断及相应的处理。
点赞  2009-4-13 16:52
引用: 引用 11 楼 shuiyan 的回复:


这些中断,都是硬件控制器触发的,然后由软件进行判断及相应的处理。
datasheet 上没说BIT_SUB_CAM_C , BIT_SUB_CAM_P是硬件触发啊 资料上 SUBSRCPND 这个包含BIT_SUB_CAM_C , BIT_SUB_CAM_P位的REG是R/W 属性的啊 也就是可以软件配置的啊!
点赞  2009-4-13 17:53
不用资料说,必须知道:所有的中断源都是硬件控制器触发,软件只是处理中断。可以配置,只是提供这个接口,当需要的时候去触发。一般极少用到的。
点赞  2009-4-13 18:10
引用: 引用 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 中断请求。
点赞  2009-4-13 18:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复