s3c2440如何设置系统时钟
s3c2440是一款嵌入式处理器,属于samsung公司的arm9系列。系统时钟是嵌入式系统中非常重要的一个参数,它决定了系统的计算速度和精度,是系统稳定性的关键因素之一。对于s3c2440来说,正确设置系统时钟是实现其高效稳定运行的前提条件之一。本文将详细介绍如何设置s3c2440的系统时钟。
一、 s3c2440的时钟系统架构
在了解如何设置s3c2440的系统时钟之前,我们需要先了解一下s3c2440的时钟系统架构。
我们可以看到s3c2440的时钟系统主要由一个pll锁相环和各种分频器组成。其中,pll锁相环是时钟系统的核心,它的作用是将输入的基准信号(xtal或osc)通过分频器进行分频,然后通过pll锁相环进行倍频,最终产生所需要的系统时钟。在s3c2440中,pll锁相环有两个,分别为pll0和pll1,它们的输出时钟可以通过寄存器控制。
二、 s3c2440的系统时钟设置流程
了解了s3c2440的时钟系统架构之后,接下来我们就可以开始设置s3c2440的系统时钟了,下面是系统时钟设置的详细步骤:
1、 确定系统时钟频率
在设置s3c2440的系统时钟之前,我们需要先明确所需要的时钟频率。根据实际需要,可以选择不同的时钟频率,如12mhz、13mhz、16mhz等。需要注意的是,时钟频率不能太高或太低,否则会影响系统的稳定性。
2、 设置pll0时钟
在确定系统时钟频率后,我们可以开始设置pll0时钟。pll0时钟的输出频率需要在50mhz~533mhz之间,可以通过设置pll0的分频器和倍频器来实现。具体的设置方法如下:
(1) 设置mpllcon寄存器
mpllcon寄存器用于设置pll0的参数,包括分频器和倍频器。具体的设置方法如下:
```c
#define fclk 50000000 // fclk时钟为50mhz
void pll0_init(void)
{
// 定义需要设置的pll0参数
unsigned int mdiv, pdiv, sdiv;
unsigned int pllcon, clksrc, clkdivn;
// 设置pll0的mpllcon寄存器
get_frequency(&mdiv, &pdiv, &sdiv, fclk, sclk);
pllcon = (mdiv << 12) | (pdiv << 4) | (sdiv << 0);
rmpllcon = pllcon;
// 设置系统时钟的源和分频器
clksrc = 0x3; // 旁路模式
clkdivn = 0x1; // fclk = hclk / 2
rclkdivn = (clksrc << 0) | (clkdivn << 4);
}
```
上面的代码中,我们首先定义了需要设置的pll0参数mdiv、pdiv和sdiv,然后通过get_frequency函数计算出具体的参数值,并将其写入mpllcon寄存器中。其中,mdiv和pdiv分别为pll0输入频率与pll0倍频系数的商和余数,sdiv为pll0输入频率与pll0分频系数的商。最后,我们通过设置clkdivn寄存器的值来设置系统时钟的源和分频器。
(2) 设置mpllcon寄存器
如果需要使用pll1时钟,我们可以按照同样的方法来设置pll1的参数并将其写入upllcon寄存器中,具体代码如下:
```c
void pll1_init(void)
{
// 定义需要设置的pll1参数
unsigned int plldivn;
unsigned int pllcon;
// 设置pll1的upllcon寄存器
plldivn = 0x1;
pllcon = (plldivn << 1);
rupllcon = pllcon;
}
```
3、 设置系统时钟
在设置好pll0/pll1之后,我们就可以根据实际需要来设置系统时钟了。系统时钟可以通过设置clkdivn寄存器来实现。具体的设置方法如下:
```c
void system_init(void)
{
// 设置pll0/pll1参数和系统时钟分频器
pll0_init();
pll1_init();
// 设置系统时钟分频器
rclkdivn = 0x5;
}
```
上面的代码中,我们首先调用了pll0_init()和pll1_init()函数来设置pll0和pll1的参数,然后设置了系统时钟分频器为0x5,表示系统时钟为pll0的输出频率除以5。需要注意的是,系统时钟的分频器值不能太小或太大,否则会影响系统的稳定性。
4、 配置外设时钟
在设置好系统时钟之后,我们还需要配置外设时钟才能使外设正常工作。在s3c2440中,外设时钟可以通过clkcon寄存器来配置。具体的设置方法如下:
```c
void peripheral_init(void)
{
// 设置sdram时钟和nand flash时钟
rclkcon = rclkcon & (~(1 << 0)) & (~(1 << 1));
// 设置uart0时钟
rclkcon = rclkcon & (~(1 << 9));
}
```
上面的代码中,我们首先关闭sdram时钟和nand flash时钟,并将clkcon寄存器的第0和第1位清零。然后,我们关闭uart0时钟,并将clkcon寄存器的第9位清零。根据实际需要,我们还可以配置其他外设的时钟。
三、 总结
本文详细介绍了如何设置s3c2440的系统时钟,包括设置pll0/pll1和系统时钟分频器,以及配置外设时钟。通过正确设置系统时钟,可以提高s3c2440的运行效率和稳定性,使其更好地适应不同的应用场景。作为嵌入式开发人员,了解和掌握s3c2440的时钟系统架构和设置方法是非常重要的。
电池修复技术—几个尽量的知识点说明
判断FinFET、FD-SOI与平面半导体制程的市场版图还早
C++调用API函数库接口实现手轮配置
小米改革序幕开启 雷军大刀指向营收目标与接班人
科教城产业基金投资AMR磁传感器领先企业微传科技
S3C2440如何设置系统时钟
温度传感器的主要类型
华为设立达芬奇计划,将AI渗入到所有产品和服务中
千元机性价比大比拼:魅蓝Note5 、360N5、华为畅享6,三款入门机型买谁?
vivo X9 Plus充电器拆解,做工用料俱佳
海思、比特大陆、寒武纪将采用台积电7nm_解密Arm中国
满足物联网低功耗设计的传感器融合
门罗币在隐私保护方面还存在着严重的缺陷
深入浅析Linux内核之内核线程(上)
2010年IIC-China春季展四大热点抢先看
MAX11120-MAX11128低功耗,逐次逼近寄存器串行ADC
5G时代 超高清电视将是十分重要的应用场景之一
MediaTek发布天玑8000系列轻旗舰5G移动平台
“昨夜冬风”后|文娱产业再逢春
从人工智能到超级大脑的进化历程浅析