10.1寸白菜平板DIY之时钟配置
在开始玩平板的各个模块之前,我们必须先把系统的时钟配置好,这个比较重要。因为好多外设,如UART,SPI,I2C等等都与系统时钟有着紧密相关。在我们使用这些模块功能之前,我们必须配置好时钟,分配好各种时钟的频率。IMAPX210内部有3个PLL,分别为APLL,DPLL,EPLL,其中,APLL是系统主PLL,主要给系统CPU和HCLK,HCLKX2,PCLK总线时钟提供PLL时钟源。DPLL是专门给CPU提供异步时钟的PLL,当CPU工作在异步模式时才可以使用DPLL的时钟。EPLL是附加时钟,主要给各种外设提供时钟参考,如SD卡,USB,摄像头等都可以选择EPLL作为时钟。
在IMAPX210手册中我们可以看到有如下一个框架图:
attach://111160.jpg
图中可以看到通过PLL_CLKSEL的前3位可以切换对应的PLL的时钟源,可以是外部时钟或外部晶振。可以通过APLL_CFG、DPLL_CFG和EPLL_CFG可以选择使不实用PLL。
在IMAPX210中,CPU最高可以到1Ghz,HCLK最高可以到133Mhz,HCLKX2最高可以到266Mhz,PCLK最高为66Mhz。
attach://111162.jpg
上图是一个配置PLL的步骤。
首先第一步是要将输出时钟选择选为参考时钟,即不使用PLL时钟。
其次是失能PLL,让PLL停止工作。
然后配置PLL的值。
接着要给个至少1us的延时,这里可以不关心,时间很短。
重新使能PLL。
然后等待PLL锁定。
最后切换时钟输出选择到PLL输出即可。
下面是时钟配置的代码:static unsigned int
imapx200_get_pll(unsigned long pllval, unsigned long baseclk)
{
unsigned long odiv, ddiv, mdiv;
/*To prevent overflow in calculation*/
baseclk /= 1000;
odiv = (pllval & IMAP_PLL_ODIV)>>12;
ddiv = (pllval & IMAP_PLL_DDIV)>>7;
mdiv = (pllval & IMAP_PLL_MULTIV);
return (baseclk*(2*(mdiv + 1))) / ((ddiv + 1)*(1<<(odiv)))*1000;
}
void clock_init(void)
{
unsigned int clk,i;
/*PLL时钟选择外部时钟*/
PLL_CLKSEL=0x00;
/**
*HCLK=APLL/12=132Mhz
*HCLKX2=APLL/6=264Mhz
*PCLK=HCLK/(1*2)=66Mhz
**/
DIV_CFG0=(0x01<<16)|(0x06<<8)|(0x0c<<4)|0x02;
/**
*TIM0_CLK=EPLL/(7+1)=60Mhz
*TIM1_CLK=EPLL/(7+1)=60Mhz
*TV_CLK = TV_ECLK
*CAM_CLK=EPLL/(5+1)=80Mhz
*UART_CLK=EPLL/(5+1)=80Mhz
**/
DIV_CFG1=(0x05<<26)|(0x02<<24)|(0x05<<18)|(2<<16)|(0x03<<10)|(0x07<<7)|(0x02<<5)|(0x07<<2)|(0x02);
/**
*GPU_CLK=External clock=12Mhz
*ASYN_CLK=DPLL/1=1200Mhz
*USB_CLK = EPLL/(9+1)=48Mhz
*IIS_CLK=EPLL/(5+1)=80Mhz
**/
DIV_CFG2=0x16260102;
/**
*SD0_CLK=External clock=12Mhz
*SD1_CLK=External clock=12Mhz
*SD2_CLK=External clock=12Mhz
**/
DIV_CFG3=0x00030303;
/**
*IDS_CLK=EPLL/(7+1)=60Mhz
*IDSTF_CLK=EPLL/(7+1)=60Mhz
**/
DIV_CFG4=0x001e1e;
/*DPLL=12Mhz*2*(99+1)/(2*1)=1200Mhz*/
DPLL_CFG=BIT31|(0x01<<12)|99;
/*EPLL=12Mhz*2*(39+1)/(2*1)=480Mhz*/
EPLL_CFG=BIT31|(0x01<<12)|39;
/*APLL=12Mhz*2*(65+1)/1=1584Mhz*/
APLL_CFG=BIT31|65;
/*等待PLL锁定*/
while((PLL_LOCKED&0x07)==0)
{
// debug("wait for APLL locked!\r\n");
for(i=500;i>0;i--);
}
/*切换PLL时钟输出到PLL输出*/
PLL_OCLKSEL=0x07;
/*打开GPU,VIDEN,VIDDE,MEMPL电源*/
NPOW_CFG =0x3f;
/*设置CPU为异步模式,当CPU时钟使用DPLL时,要设为异步模式 */
CPUSYNC_CFG=0x01;
clk= imapx200_get_pll(APLL_CFG,12000000);
debug("APLL:%dM\r\n",clk/1000000);
clk= imapx200_get_pll(DPLL_CFG,12000000);
debug("DPLL:%dM\r\n",clk/1000000);
clk= imapx200_get_pll(EPLL_CFG,12000000);
debug("EPLL:%dM\r\n",clk/1000000);
debug("PLL_OCLKSEL:0x%x\r\n",PLL_OCLKSEL);
debug("APLL_CFG:0x%x\r\n",APLL_CFG);
debug("DIV_CFG0:0x%x\r\n",DIV_CFG0);
debug("DIV_CFG1:0x%x\r\n",DIV_CFG1);
debug("DIV_CFG2:0x%x\r\n",DIV_CFG2);
debug("DIV_CFG3:0x%x\r\n",DIV_CFG3);
debug("DIV_CFG4:0x%x\r\n",DIV_CFG4);
}
这里把DPLL配置成了1.2Ghz,给CPU提供异步时钟,这个是可以正常工作的,虽然官方手册说最高1Ghz。
下面上工程文件:
顶 1G赫兹 meirenai 发表于 2013-5-10 08:36 static/image/common/back.gif
顶 1G赫兹
我现在跑的1.2G,有些发热,哈哈~ 强悍啊!1.2G跑系统稳定吗? 该怎么操作? 楼主厉害,要做个裸奔平板? fsclub 发表于 2013-5-10 09:07 static/image/common/back.gif
楼主厉害,要做个裸奔平板?
哈哈,先裸奔一下,时机成熟就上u-boot,然后上openWRT,现在这个u-boot不能保存环境变量,比较郁闷啊~ LM1876 发表于 2013-5-10 09:01 static/image/common/back.gif
该怎么操作?
看数据手册,结合我的代码,你就知道怎么配置了,还是比较简单的 靠一个JTAG口,玩的花样百出,楼主够牛。
顺便问一下:楼主有原理图吗?如果没有,那绝对是niubility!ORZ kevinstar888 发表于 2013-5-10 16:02 static/image/common/back.gif
靠一个JTAG口,玩的花样百出,楼主够牛。
顺便问一下:楼主有原理图吗?如果没有,那绝对是niubility!ORZ ...
这个是有原理图的啊,没有原理图搞不了啊,一些接线都不知道,除非只搞片内资源~ nongxiaoming 发表于 2013-5-10 15:53 static/image/common/back.gif
哈哈,先裸奔一下,时机成熟就上u-boot,然后上openWRT,现在这个u-boot不能保存环境变量,比较郁闷啊~ ...
带屏的东西上openwrt没啥意思吧,上ubuntu或者archlinux才是正路啊。 老兄,是论坛之前卖的10.1寸白菜平板吗?你哪搞来的原理图啊?当初不是只有刷机工具的吗?可否共享下? honami520 发表于 2013-5-10 17:19 static/image/common/back.gif
老兄,是论坛之前卖的10.1寸白菜平板吗?你哪搞来的原理图啊?当初不是只有刷机工具的吗?可否共享下? ...
原理图也是之前的他们找到的啊,在二手区那个研究帖那里,在百度文库也有下载,我这里上传一份吧~
gzhuli 发表于 2013-5-10 17:10 static/image/common/back.gif
带屏的东西上openwrt没啥意思吧,上ubuntu或者archlinux才是正路啊。
跑ubuntu能跑得动吗?我的6410板子ubuntu是放在SD卡跑的,而且不是很流畅 nongxiaoming 发表于 2013-5-10 19:34 static/image/common/back.gif
跑ubuntu能跑得动吗?我的6410板子ubuntu是放在SD卡跑的,而且不是很流畅
不一定要跑GNOME的嘛,LXDE或者XFCE应该还行。 gzhuli 发表于 2013-5-10 20:25 static/image/common/back.gif
不一定要跑GNOME的嘛,LXDE或者XFCE应该还行。
谢谢大师指点,我去折腾折腾看看~现在裸机刚搞了LCD,准备做触摸,哈哈~先玩玩裸机也不错~ 哈哈,原来你在折腾这个呀,难怪最近看不到人影!{:lol:}{:lol:} NXP 发表于 2013-5-10 20:43 static/image/common/back.gif
哈哈,原来你在折腾这个呀,难怪最近看不到人影!
之前是在忙毕业设计啊,这几天才有点时间玩这个,17号还要进行第二次答辩,晕倒呢~ nongxiaoming 发表于 2013-5-10 20:51 static/image/common/back.gif
之前是在忙毕业设计啊,这几天才有点时间玩这个,17号还要进行第二次答辩,晕倒呢~ ...
你终于可以解放了!{:lol:} NXP 发表于 2013-5-10 20:54 static/image/common/back.gif
你终于可以解放了!
是的啊,哈哈 Lihai de bi ye shen 求个10寸平板 有哪位知道这个10.1寸白菜平板的屏幕如何利用起来么?
我这个平板的电池坏了,就非得插着电源线使用,很不方便,想拆了玩玩它的各个模块。
屏幕都型号是:N101L6-L0A
在网上搜了一下,没有找到驱动板! ustbzm 发表于 2014-4-14 22:33
有哪位知道这个10.1寸白菜平板的屏幕如何利用起来么?
我这个平板的电池坏了,就非得插着电源线使用,很不 ...
我已经在上面移植了rt-thread,可以搞个emwin玩玩,哈哈,这个屏是LVDS接口的,你找淘宝估计有驱动板呢 nongxiaoming 发表于 2013-5-10 20:51
之前是在忙毕业设计啊,这几天才有点时间玩这个,17号还要进行第二次答辩,晕倒呢~ ...
你大四? zlpvch 发表于 2014-4-15 00:40
你大四?
毕业快一年了,哪里还大四啊,这帖子大四时发的。
页:
[1]