LPC2478时钟模块详解


时钟框图如上图,系统时钟来源分别是内部4M的RC振荡器和外置晶振,RTC模块在某些情况下也可以作为主时钟,经过系统时钟选择s\de时钟需要经过PLL倍频(或者不倍频),处理过的PLL输出USB时钟分频器和CPU时钟分频器,成为FCCLK 和FUSBCLK,FCCLK供给系统内核,以太网模块,以及各式AHB外设,APB外设的时钟来自于PLLCLK,经过外设时钟发生器,分频出各个时钟供给外设使用,同时,时钟模块也能切断外设模块的时钟

另外,看门狗定时器有多重时钟可以选择,系统实时时钟也有多个模式的时钟源可以选择

使用时钟模块时,主要有以下注意事项

1.      切换时钟源的时候PLL必须被断开,否则无法切换成功

2.      PLL输入时钟最大50M,产生的时钟最小275M

3.      PLL配置寄存器的写入需要解锁,写入PLL数据之后必须要解锁写入的数据才能生效,如下


4.      PLL设置过程如下

 

 

         代码如下

 

 

#include "clock.h"

u32 SystemCoreClock;

void ClockSet(u8 clockSel)
{
	if((PLLSTAT&(1<<25)))//如果PLL连接
	{
		PLLCON &= ~(1<<1);//断开PLL连接
		PLLFEED  = 0xAA;//发送馈送序列
		PLLFEED  = 0x55;
		while((PLLSTAT&(1<<25)));//等待PLL断开连接
	}
	PLLCON &= ~(1<<0);//禁用PLL
	PLLFEED  = 0xAA;//发送馈送序列
	PLLFEED  = 0x55;
	while((PLLSTAT&(1<<24)));//等待PLL禁止
	if(clockSel == CLOCK_HSE)	//选择外部时钟
	{
		SCS &= ~(1<<4);//主振荡器频率选择1-20M
		SCS |= (1<<5);//主振荡器使能
		while((SCS&(1<<6)) == 0);//等待主振荡器准备好
		
		CLKSRCSEL = 0x01;//选择主时钟源为PLL时钟
		SystemCoreClock = 100000000;
		
	}
	else if(clockSel == CLOCK_HSI)//选择内部时钟
	{
		CLKSRCSEL = 0x00;//选择内部RC振荡器为系统时钟源
		SystemCoreClock = 100000000;
	}
	PLLCFG = 0x00050063;    // 选择PLL倍频     N 6 M 100 12M 2*100*4/2 = 400M
	PLLFEED  = 0xAA;//发送馈送序列
	PLLFEED  = 0x55;
	
	PLLCON   |= 0x01;             /* 使能PLL                */
	PLLFEED  = 0xAA;
	PLLFEED  = 0x55;
	while (!(PLLSTAT & (1<<24)));/* 等待PLL0使能  */
//	while (!(PLLSTAT & (1<<26)));/* 等待PLL0锁定  */
	
	//修改cpu分频数值
	CCLKCFG = 0x03;//四分频 400/4 = 100M
	
	PLLCON   |= (1<<1);             /* 连接PLL                */
	PLLFEED  = 0xAA;
	PLLFEED  = 0x55;
	while (!(PLLSTAT & (1<<25)));/* 等待PLL连接  */
	
	//此时,PLL时钟就OK了,接下来需要设置外设的分频数
	PCLKSEL0 = 0x00000040;//外设时钟均为25M
	PCLKSEL1 = 0x00000000;
	
	PCONP = 0x00000000;//禁用全部外设时钟
}


#ifndef __CLOCK_H_
#define __CLOCK_H_

#include "lpc24xx.h"
#include "common.h"

#define CLOCK_HSE	1
#define CLOCK_HSI	2

void ClockSet(u8 clockSel);


extern u32 SystemCoreClock;

#endif






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值