试了一下4412直接读写寄存器来配置CAM0的时钟,按芯片手册上主要配置了5个寄存器:
134 unsigned int data;
135 VPLL_CON0_MAP = ioremap(VPLL_CON0,4);
136 CLK_SRC_CAM0_MAP = ioremap(CLK_SRC_CAM0,4);
137 CLK_SRC_MASK_CAM0_MAP = ioremap(CLK_SRC_MASK_CAM0,4);
138 CLK_DIV_CAM0_MAP = ioremap(CLK_DIV_CAM0,4);
139 CLK_GATE_IP_CAM_MAP = ioremap(CLK_GATE_IP_CAM,4);
140 /*Turn VPLL Clock*/
141 // writel(readl(VPLL_CON0_MAP)|0x80000000,VPLL_CON0_MAP);
142 /*wait for VPLL to Lock*/
143 // while(!(readl(VPLL_CON0_MAP) & 0x20000000)){
144 // ;
145 // }
146 // mdelay(1);
147 data = readl(VPLL_CON0_MAP);
148 printk("%s():VPLL_CON0_MAP = 0x%x\n",__func__,data);
149
150 /*configure CLK_GATE_IP_CAM*/
151 data = readl(CLK_GATE_IP_CAM_MAP);
152 printk("%s():CLK_GATE_IP_CAM_MAP = 0x%x\n",__func__,data);
153 writel(data|0x00030000,CLK_GATE_IP_CAM_MAP);
154 data = readl(CLK_GATE_IP_CAM_MAP);
155 printk("%s():CLK_GATE_IP_CAM_MAP = 0x%x\n",__func__,data);
156
157 /*configure CLK_SRC_CAM0*/
158 data = readl(CLK_SRC_CAM0_MAP);
159 printk("%s():CLK_SRC_CAM0_MAP = 0x%x\n",__func__,data);
160 data &= 0xfff0ffff;
161 data |= 0x00080000;
162 writel(data,CLK_SRC_CAM0_MAP);
163 printk("%s():CLK_SRC_CAM0_MAP = 0x%x\n",__func__,readl(CLK_SRC_CAM0_MAP));
164 /*configure CLK_SRC_MASK_COM0*/
165 data = readl(CLK_SRC_MASK_CAM0_MAP);
166 printk("%s():CLK_SRC_MASK_CAM0_MAP = 0x%x\n",__func__,data);
167 data |= (~0xfff0ffff);
168 writel(data,CLK_SRC_MASK_CAM0_MAP);
169 printk("%s():CLK_SRC_MASK_CAM0_MAP = 0x%x\n",__func__,readl(CLK_SRC_MASK_CAM0_MAP));
170 /*configure CLK_DIV_CAM0*/
171 data = readl(CLK_DIV_CAM0_MAP);
172 printk("%s():CLK_DIV_CAM0_MAP = 0x%x\n",__func__,data);
173 data &= 0xfff0ffff;
174 writel(data,CLK_DIV_CAM0_MAP);
175 printk("%s():CLK_DIV_CAM0_MAP = 0x%x\n",__func__,readl(CLK_DIV_CAM0_MAP));
和GPIO
119 GPJ0CON_MAP = ioremap(GPJ0CON,4);
120 GPJ1CON_MAP = ioremap(GPJ1CON,4);
121 /*Set GPJ as Camera interface*/
122 writel(0x22222222,GPJ0CON_MAP);
123 writel(0x00022222,GPJ1CON_MAP);
124 printk("%s():GPJ0CON_MAP = 0x%x\n",__func__,readl(GPJ0CON_MAP));
125 printk("%s():GPJ1CON_MAP =0x %x\n",__func__,readl(GPJ1CON_MAP));
应该是把所有关于CAM0时钟的寄存器都配置了,但是CAMIF上并没有产生时钟信号,和摄像头的I2C通信也失败了。我应该怎么解决这个问题呢?
或者我应该看哪些源代码来找到配置时钟的API?谢谢!

[ 此帖被ruif在2013-08-07 09:58重新编辑 ]