Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8036
  • 博文数量: 4
  • 博客积分: 155
  • 博客等级: 民兵
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-24 21:29
文章分类
文章存档

2012年(4)

我的朋友
最近访客

分类: 嵌入式

2012-09-30 23:42:47

对于2440的时钟频率的配置过程,我们做了个小实验,不同频率下观察相同延时的LED亮灭快慢,显然,你会发现工作频率高的LED的闪烁速度明显快的多。
 
#include "2440addr.h"

 void delay(void)
{
 int i,j;
 for(i=0;i<0x1000;i++)
  for(j=0;j<0x200;j++);
}
void led_test(int count)
{
 rGPBCON &=~(0xff<<10);
 rGPBCON |=(0x55<<10);
 rGPBUP |=(0xf<<5);
 rGPBDAT |=(0xf<<5);
 while(count)
 {
  rGPBDAT &=~(0xf<<5);
  delay();
  rGPBDAT |=(0xf<<5);
  delay();
  count--;
 }
}
void Mpll_init(int flag)
{
 if(flag==48)
 {
  //LOCKTIME
  rLOCKTIME = 0xffffffff;
  //MPLLCON[19:12]=56;[9:4]=2;[1:0]=2
  rMPLLCON= (56<<12)|(2<<4)|(2<<0);
  //CLKDIVN[2:1]=3;[0]=1  => 1:3:6
  //CAMDIVN[8]=0
   rCLKDIVN = (1<<0)|(0x11<<1);
   rCAMDIVN &=~(1<<8);  
 }
 else if(flag==405)
 {
  //LOCKTIME
  rLOCKTIME = 0xffffffff;
  //MPLLCON[19:12]=127;[9:4]=2;[1:0]=1
  rMPLLCON = (127<<12)|(2<<4)|(1<<0);
  rCLKDIVN = (1<<0)|(0x11<<1);
  rCAMDIVN &=~(1<<8);
  //CLKDIVN[2:1]=3;[0]=1  => 1:3:6
  //CAMDIVN[8]=0
 }
}
void xmain(void)
{
 while(1)
 {
// Mpll_init(48);
// led_test(5);   //在这里通过选择48M和405M的不同工作频率可以观察LED的变化情况
 Mpll_init(405);
 led_test(5);
 }
 
}
 
其配置过程可以分为3个步骤:
1、LOCKTIME寄存器的配置 :用于设置“LOCK TIME”的长度,2440的默认值:0Xfffffffff;此可以缺省
2、MULLCON寄存器:用于设置FCLK与Fin的倍数。
   对于2440,MPLL(FCLK) = (2 * m *Fin)/(p *2^s)
   其中m = MDIV + 8,p = PDIV + 2, s = SDIV.
  FCLK = (2 * ( MDIV + 8) *Fin)/(PDIV + 2 *2^SDIV)
3、CLKDIVN寄存器:用于设置FCLK,HCLK ,PCLK三者的关系。
   2440 还需要设置CAMDIVN的位9,位8
 
 

 
阅读(284) | 评论(0) | 转发(0) |
0

上一篇:FIQ中断控制LED

下一篇:没有了

给主人留下些什么吧!~~