Chinaunix首页 | 论坛 | 博客
  • 博客访问: 75616
  • 博文数量: 33
  • 博客积分: 1422
  • 博客等级: 上尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 21:11
个人简介

学无止境

文章存档

2011年(13)

2010年(20)

我的朋友

分类: 嵌入式

2010-08-02 01:33:13

    时钟控制逻辑单元能够产生2440需要的时钟信号。包括:CPU使用的主频FCLK,AHB总线使用的HCLK。AHB总线上的设备:内存控制,中断控制,LCD控制,DMA以及USB主模块。APB总线设备上使用的PCLK。APB总线的设备:WTD,IIS,IIC,PWM,MMC,ADC,UART,GPIO,RTC,SPI。

    FCLK的启动过程(参考2410完全开发手册)

1、上电几毫秒后,晶振输出稳定,FCLK=晶振频率,

nRESET恢复高电平信号后,CPU开始执行指令。

2、在程序的开头启动MPLL,在设置MPLL的几个寄存器后需要等待一段时间(lock time),MPLL的输出才稳定。在这段(lock time)内,FCLK停振,CPU停止工作。Lock Time的长短由LOCKTIME设定。

3、Lock Time之后,MPLL输出正常。

注意:数据手册有这样的一句话虽然MPLL在reset以后就开始工作,但是MPLL输出(Mpll)没有作为系统时钟来使用,知道软件对MPLLCON寄存器写入有效设置。有效设置前或外部时钟源的时钟直接当作系统时钟来使用。就算是用户不想改变MPLLCON的默认值,用户应该再重新写入NPLLCON寄存器一次相同的值。

寄存器设置:

1、LOCKTIME设置为默认值0xffffffff

2、Mpll(FCLK)=(2*m*Fin)/(p*2^s)

m=(MDIV+8),p=(PDIV+2),s=SDIV

我们设置输出频率FCLK=400M 查数据手册当FCLK=405M时,MPLLCON=0x7f021。

3、CLKDIVN=0x5 //1:4:8

PCLK=50M,HCLK=100,FCLK=400

4、数据手册中有一段这样的描述:如果HDIVN不为0,根据如下指令,CPU总线模式从Fast Bus Mode变为Asynchronous(异步总线模式)

参考vivi代码设置如下:

 mrc p15, 0, r1, c1, c0, 0 @ read ctrl register
 orr r1, r1, #0xc0000000 @ Asynchronous
 mcr p15, 0, r1, c1, c0, 0 @ write ctrl register

 

head.s代码如下:

.text
.global _start
_start:
            ldr        sp,    =1024*4    @设置堆栈
            @初始化时钟
            ldr r1,=0x4c000000 @设置LOCKTIME
            mov r2,#0xffffffff
            str r2,[r1]
            
        
            ldr r1,=0x4c000014 @设置CLKDIVN
            mov r2,#0x5
            str r2,[r1]
            
            @CPU总线模式从Fast Bus Mode变为Asynchronous
            mrc p15, 0, r1, c1, c0,
            orr r1, r1, #0xc0000000 
            mcr p15, 0, r1, c1, c0,
             
            ldr r1,=0x4c000004 @设置MPLLCON
            ldr r2,=0x7f021
            str r2,[r1]
            
            @@@@@@时钟初始化结束    
     
            bl        main
halt_loop:
            b        halt_loop

 

c代码和流水灯的一样,编译下载到开发板流水灯流水速度明显加快。

阅读(458) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~