求救。。。S3C6410无法触发camera中断。。。

程序猿要转型 2012-10-23 11:44:28
在Linux下用最简单的字符驱动的方法写camera驱动,就是要自己配置寄存器的那种,摄像头是OV9650,输出格式ITU601。我先用request_irq(IRQ_CAMIF_P,(irq_handler_t)camif_p_interrupt,IRQF_DISABLED|IRQF_TRIGGER_HIGH,"camif","camif");申请IRQ_CAMIF_P中断,然后配置camif的寄存器,帧缓冲地址就是LCD的显存地址,示波器检测行场信号都有,中断也注册成功,但是程序始终进不了中断,到底是寄存器配置问题还是中断申请的问题?求解。。。。
camif寄存器初始化子函数如下:
void camif_reg_init(void)
{
unsigned int MainHorRatio,MainVerRatio;

writel(0x2AAAAAA,S3C64XX_GPFCON);//CAMIF
camif_regs->cisrcfmt=(1<<31);
camif_regs->cigctrl=1<<31;//software reset
camif_regs->cigctrl=~(1<<31);
camif_regs->cisrcfmt=(1<<31)|(640<<16)|480;
//clear all flags
camif_regs->ciwdofst=(1<<30)|(3<<27)|(0xf<<12);
camif_regs->ciwdofst=0;

camif_regs->ciwdofst=(1<<31)|(80<<16)|104;//cut window
camif_regs->ciwdofst2=(80<<16)|104;
camif_regs->cigctrl=(1<<26)|(0<<25)|(1<<21)|(1<<20)|(1<<19)|(1<<18);//disable overflow interrupt & set level interrupt &clear p interrupt

//set address
camif_regs->ciprysa1=lcd_info->screen_base;//lcd_info->fix.smem_start;
camif_regs->ciprysa2=lcd_info->screen_base;//lcd_info->fix.smem_start;
camif_regs->ciprysa3=lcd_info->screen_base;//lcd_info->fix.smem_start;
camif_regs->ciprysa4=lcd_info->screen_base;//lcd_info->fix.smem_start;


camif_regs->ciprtrgfmt=(3<<29)|(480<<16)|272;//output RGB
camif_regs->ciprctrl=(16<<19)|(16<<14)|(1<<2);//main burst & remained burst length & enable lastIRQ
camif_regs->ciprscpreratio=(0<<28)|(1<<16)|1;
camif_regs->ciprscpredst=(480<<16)|272;

MainHorRatio=(480<<8)/480;
MainVerRatio=(272<<8)/272;
camif_regs->ciprscctrl=(1<<30)|(1<<29)|(MainHorRatio<<16)|(3<<13)|(2<<11)|MainVerRatio;

camif_regs->ciprtarea=480*272;

camif_regs->ciprscctrl|=1<<15;
camif_regs->ciimgcpt=(1<<31)|(1<<29)|(1<<24)|(100<<10);//enable global capture&preview scaler
}
...全文
156 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序猿要转型 2012-10-24
  • 打赏
  • 举报
回复
多谢楼上的回复~不过我学的是Linux。。wince一点都不懂的说。。。.

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧