主题 : 4412的给外设的时钟应该怎么配置 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 94381
精华: 0
发帖: 30
金钱: 155 两
威望: 31 点
综合积分: 60 分
注册时间: 2013-07-15
最后登录: 2013-10-16
楼主  发表于: 2013-08-06 21:31

 4412的给外设的时钟应该怎么配置

试了一下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重新编辑 ]
级别: 新手上路
UID: 94381
精华: 0
发帖: 30
金钱: 155 两
威望: 31 点
综合积分: 60 分
注册时间: 2013-07-15
最后登录: 2013-10-16
1楼  发表于: 2013-08-07 17:34
自顶。。。