S3C2440如何设置系统时钟

电子说

1.2w人已加入

描述

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的时钟系统架构和设置方法是非常重要的。
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分