nongxiaoming 发表于 2013-5-10 08:33:42

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。
下面上工程文件:

meirenai 发表于 2013-5-10 08:36:32

顶   1G赫兹            

nongxiaoming 发表于 2013-5-10 08:37:38

meirenai 发表于 2013-5-10 08:36 static/image/common/back.gif
顶   1G赫兹

我现在跑的1.2G,有些发热,哈哈~

qietingfy 发表于 2013-5-10 08:45:12

强悍啊!1.2G跑系统稳定吗?

LM1876 发表于 2013-5-10 09:01:29

该怎么操作?

fsclub 发表于 2013-5-10 09:07:35

楼主厉害,要做个裸奔平板?

nongxiaoming 发表于 2013-5-10 15:53:49

fsclub 发表于 2013-5-10 09:07 static/image/common/back.gif
楼主厉害,要做个裸奔平板?

哈哈,先裸奔一下,时机成熟就上u-boot,然后上openWRT,现在这个u-boot不能保存环境变量,比较郁闷啊~

nongxiaoming 发表于 2013-5-10 15:54:56

LM1876 发表于 2013-5-10 09:01 static/image/common/back.gif
该怎么操作?

看数据手册,结合我的代码,你就知道怎么配置了,还是比较简单的

kevinstar888 发表于 2013-5-10 16:02:29

靠一个JTAG口,玩的花样百出,楼主够牛。
顺便问一下:楼主有原理图吗?如果没有,那绝对是niubility!ORZ

nongxiaoming 发表于 2013-5-10 16:19:56

kevinstar888 发表于 2013-5-10 16:02 static/image/common/back.gif
靠一个JTAG口,玩的花样百出,楼主够牛。
顺便问一下:楼主有原理图吗?如果没有,那绝对是niubility!ORZ ...

这个是有原理图的啊,没有原理图搞不了啊,一些接线都不知道,除非只搞片内资源~

gzhuli 发表于 2013-5-10 17:10:36

nongxiaoming 发表于 2013-5-10 15:53 static/image/common/back.gif
哈哈,先裸奔一下,时机成熟就上u-boot,然后上openWRT,现在这个u-boot不能保存环境变量,比较郁闷啊~ ...

带屏的东西上openwrt没啥意思吧,上ubuntu或者archlinux才是正路啊。

honami520 发表于 2013-5-10 17:19:12

老兄,是论坛之前卖的10.1寸白菜平板吗?你哪搞来的原理图啊?当初不是只有刷机工具的吗?可否共享下?

nongxiaoming 发表于 2013-5-10 19:33:23

honami520 发表于 2013-5-10 17:19 static/image/common/back.gif
老兄,是论坛之前卖的10.1寸白菜平板吗?你哪搞来的原理图啊?当初不是只有刷机工具的吗?可否共享下? ...

原理图也是之前的他们找到的啊,在二手区那个研究帖那里,在百度文库也有下载,我这里上传一份吧~

nongxiaoming 发表于 2013-5-10 19:34:34

gzhuli 发表于 2013-5-10 17:10 static/image/common/back.gif
带屏的东西上openwrt没啥意思吧,上ubuntu或者archlinux才是正路啊。

跑ubuntu能跑得动吗?我的6410板子ubuntu是放在SD卡跑的,而且不是很流畅

gzhuli 发表于 2013-5-10 20:25:59

nongxiaoming 发表于 2013-5-10 19:34 static/image/common/back.gif
跑ubuntu能跑得动吗?我的6410板子ubuntu是放在SD卡跑的,而且不是很流畅

不一定要跑GNOME的嘛,LXDE或者XFCE应该还行。

nongxiaoming 发表于 2013-5-10 20:28:27

gzhuli 发表于 2013-5-10 20:25 static/image/common/back.gif
不一定要跑GNOME的嘛,LXDE或者XFCE应该还行。

谢谢大师指点,我去折腾折腾看看~现在裸机刚搞了LCD,准备做触摸,哈哈~先玩玩裸机也不错~

NXP 发表于 2013-5-10 20:43:07

哈哈,原来你在折腾这个呀,难怪最近看不到人影!{:lol:}{:lol:}

nongxiaoming 发表于 2013-5-10 20:51:45

NXP 发表于 2013-5-10 20:43 static/image/common/back.gif
哈哈,原来你在折腾这个呀,难怪最近看不到人影!

之前是在忙毕业设计啊,这几天才有点时间玩这个,17号还要进行第二次答辩,晕倒呢~

NXP 发表于 2013-5-10 20:54:49

nongxiaoming 发表于 2013-5-10 20:51 static/image/common/back.gif
之前是在忙毕业设计啊,这几天才有点时间玩这个,17号还要进行第二次答辩,晕倒呢~ ...

你终于可以解放了!{:lol:}

nongxiaoming 发表于 2013-5-10 21:55:32

NXP 发表于 2013-5-10 20:54 static/image/common/back.gif
你终于可以解放了!

是的啊,哈哈

rei1984 发表于 2013-11-4 07:11:18

Lihai de bi ye shen

liangbmw 发表于 2013-11-4 22:30:13

求个10寸平板

ustbzm 发表于 2014-4-14 22:33:56

有哪位知道这个10.1寸白菜平板的屏幕如何利用起来么?
我这个平板的电池坏了,就非得插着电源线使用,很不方便,想拆了玩玩它的各个模块。
屏幕都型号是:N101L6-L0A
在网上搜了一下,没有找到驱动板!

nongxiaoming 发表于 2014-4-15 00:22:29

ustbzm 发表于 2014-4-14 22:33
有哪位知道这个10.1寸白菜平板的屏幕如何利用起来么?
我这个平板的电池坏了,就非得插着电源线使用,很不 ...

我已经在上面移植了rt-thread,可以搞个emwin玩玩,哈哈,这个屏是LVDS接口的,你找淘宝估计有驱动板呢

zlpvch 发表于 2014-4-15 00:40:40

nongxiaoming 发表于 2013-5-10 20:51
之前是在忙毕业设计啊,这几天才有点时间玩这个,17号还要进行第二次答辩,晕倒呢~ ...

你大四?

nongxiaoming 发表于 2014-4-15 00:44:00

zlpvch 发表于 2014-4-15 00:40
你大四?

毕业快一年了,哪里还大四啊,这帖子大四时发的。
页: [1]
查看完整版本: 10.1寸白菜平板DIY之时钟配置