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的时钟系统架构和设置方法是非常重要的。
-
分频器
+关注
关注
43文章
447浏览量
49873 -
S3C2440
+关注
关注
4文章
132浏览量
38863 -
嵌入式处理器
+关注
关注
0文章
253浏览量
30737 -
倍频器
+关注
关注
8文章
76浏览量
35519 -
系统时钟
+关注
关注
1文章
30浏览量
9306
发布评论请先 登录
相关推荐
评论