S3C2440⑤ | S3C2440时钟体系架构及实验

发布时间:2024-07-15  

1.时钟架构

简化一下如图所示:

1.1.时钟源的选择

S3C2440的时钟源来源有两种:

  • 外部晶振(OSC)

  • 外部时钟信号(EXTCLK)

选择哪一路作为S3C2440的时钟源由模式控制引脚OM3和OM2引脚(的电平)决定,如何选择见下图:

以JZ2440开发板为例,其使用的是12Mhz外部晶振, 硬件电路如下:

其OM3和OM2选择引脚设置如下,选择第一种方式:

1.2.MPLL改变主时钟FCLK的控制时序(上电复位时序)


2.实验 —— LED闪烁(为了后续对比)

2.1.实验目的

使用C语言控制LED闪烁。


2.2.实验代码

启动文件与之前相同;

C程序添加延时函数delay修改后如下:


代码语言:javascript

复制

void delay(unsigned int xms)

{

    while(xms--);

}


int main(void)

{


    /* 设置GPFCON寄存器,配置GPF4引脚为输出模式 */

    *(unsigned int *)0x56000050 &= ~(3<<(2*4));

    *(unsigned int *)0x56000050 |= 1<<(2*4);


    /* 程序循环闪烁LED */

    while(1)

    {

        /* 设置GPFDAT寄存器,GPF4输出低电平,点亮LED */

        *(unsigned int *)0x56000054 &= ~(1<<4);

        delay(100000);


        /* 设置GPFDAT寄存器,GPF4输出高电平,熄灭LED */

        *(unsigned int *)0x56000054 |= (1<<4);

        delay(100000);

    }

}

编译的makefile也和之前相同;


2.3.运行结果

第一个LED先亮起,1s后熄灭,1s后再次点亮,如此循环。

3.实验 —— 设置芯片时钟运行频率

3.1.实验目的

设置芯片的时钟工作频率最高,如下:

  • FCLK  = 400Mhz

  • HCLK = 100Mhz

  • PCLK  = 50Mhz

与实验2对比观察效果。

注:芯片手册中给出的最高时钟频率:

3.2.实验步骤

  1. 设置PLL更改之后的锁定时间(默认即可)

  1. 设置分频系数(UCLK=UPLL(默认值)、HCLK = FCLK/4(100M)、PCLK=HCLK/2(50M))

  1. HDIVN不为0,设置CPU为异步模式 注:其中#R1_nF:OR:R1_iA的值为0xc0000000。

  1. 设置MPLL倍频,产生FCLK=400Mhz:

注:MPLLCON寄存器的值可以由公式自己推算,但芯片手册中推荐直接查找推荐表获得:


3.3.实验代码

时钟修改应该在上电后修改,所以在启动文件中关闭看门狗之后添加:


代码语言:javascript


@ brief:    S3C2440启动文件

@ author:    mculover666

@ note:

@            1.关闭看门狗

@            2.设置栈顶指针SP(从Nand启动)

@            3.设置时钟:FCLK=400Mhz,HCLK=100Mhz,PCLK=50Mhz

@            4.调用main函数,保存返回地址,转入C程序


.text

.global    _start


_start:

    @ 关闭看门狗

    LDR R0,=0x53000000

    MOV R1,#0

    STR R1,[R0]


    @ 设置栈顶指针SP(从Nand启动)

    LDR SP,=4096


    @ 设置时钟:FCLK=400Mhz,HCLK=100Mhz,PCLK=50Mhz

    @ 设置PLL更改之后的锁定时间(默认值)

    LDR R0,=0x4c000000

    LDR R1,=0xFFFFFFFF

    STR R1,[R0]


    @ 设置分频系数

    LDR R0,=0x4c000014

    LDR R1,=0x04

    STR R1,[R0]


    @ HDIVN不为0,设置CPU为异步模式(来源芯片手册)

    mrc p15,0,r0,c1,c0,0

    orr r0,r0,#0xc0000000  @#R1_nF:OR:R1_iA

    mcr p15,0,r0,c1,c0,0


    @ 设置MPLL,输出FCLK=400Mhz

    LDR R0,=0x4c000004

    LDR R1,=(92<<12)|(1<<4)|(1<<0)

    STR R1,[R0] 


    @ 设置MPLL之后锁定一段时间,然后系统变为设置的频率


    @ 调用main函数,保存返回地址,转入C程序

    BL  main


    @ main函数返回,程序暂停

halt:

    B   halt

为了方便对比,C程序与实验2的相同;

编译的makefile和之前的也相同;


3.4.实验结果

程序编译下载后,可以观察到,LED闪烁速度与之前相比快了非常多。


3.5.实验总结

通过本节的两个实验,


从直观的的现象来看:同样的C语言程序(都是delay(100000)),但是在第二个实验中因为CPU时钟FCLK提高到最高运行频率400Mhz,所以LED的闪烁速度与之前相比快了好几倍;

深入到S3C2440芯片的结构:掌握了S3C2440的时钟体系架构和上电复位时序,其时钟源有两个:外部晶振或者外部时钟,通过OM[3:2]硬件选择,其内部主要调整频率的PLL有两个:MPLL(产生FCLK)和UPLL(产生UCLK),其主要的时钟频率有三个(FCLK->CPU使用,HCLK->AHB总线高速外设使用,PCLK->APB总线低速外设使用),其中HCLK和PCLK由FCLK分频而来;

在芯片操作上:掌握了如何编程设置寄存器控制S3C2440的时钟频率(比如本节设置FCLK=400Mhz,HCLK=100Mhz,PCLK=50Mhz)。



文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>