S3C2440 开发板实战(2):start.S初认识 + SDRAM配置 + 重定位

2440执行程序的第一件事请就是执行start.S文件,所以这里来学习下最基本的启动文件。

顺便说下,在U-boot里有专门对应各种芯片的start.S文件,在开发手册中的ARM章节可以看到S3X2440的ARM型号为ARM920,所以本文章讲解部分比较重要的启动程序(能够保证能够正常启动),在以后的博客中我会详细对他进行分析。

一个最简单的start.S文件因该包括看门狗部分、时钟初始化部分以及程序代码定位部分

目录

1、看门狗部分

2、时钟部分

3、代码重定位

3.1. SDRAM

3.2. 代码重定位


1、看门狗部分

废话不多说,直接开始配置,首先就是要关闭暂时不使用的看门狗,找到看门狗的寄存器:WTCON,将其第0位置0,即禁用看门狗,即:

# define pWTCON    0x53000000    //WTCON地址

ldr    r0,    =pWTCON
mov    r1,    #0x0
str    r1,    [r0]    //关闭看门狗

2、时钟部分

在S3C2440中有三种时钟频率,分别为FCLK, HCLK, PCLK,分别控制不同种类的外设,在时钟树中可以进行查找,这里不做过多赘述,在以后的博客中有应用。

从芯片手册中查找FCLK, HCLK, PCLK 的最高频率,在范围内我们选择设置FCLK = 400MHZ, HCLK = 100MHZ, PCLK = 50MHZ (TF : TH : TP = 1 : 4 : 8)为例进行设置初始化时钟,看芯片手册的时钟树如下图所示:

OSC可以理解为我们的晶振频率,从开发板的原理图上可以看出为12MHZ。

时钟信号通过OM[3 : 2]( 外接引脚 GND )进行时钟源选择,即设置OM[3, 2] = [0, 0],此时刚上电时FCLK频率等于晶振频率,然后进入lock time,此时,CPU暂停工作,在lock time (该段时间是为稳定输出新的FCLK)过后CPU继续工作,CPU时钟的主频率为设置的FCLK。

为保证CPU能够在启动后一定能发送设置的FCLK信号,所以将FCLK设置为最大值:

# define LOCKTIME    0x4C000000 

ldr    r0,    =LOCKTIME
ldr    r1,    =0xffffffff
str    r1,    [r0]

先不看控制USB部分(UPLL)直接看MPLL部分。时钟树中时间信号通过锁相环(PLL)生成400MHZ的FCLK。其中关于MPLL寄存器设置方法如下:

然后通过查找数值表(也可以手算,在手册中有公式),由Input Frequency = 12MHZ,Output Frequency  = 400MHZ得到MDIV, PDIV, SDIV的参数值,并写入寄存器中:

# define MPLLCON    0x4C000004    //MPLLCON地址

ldr    r0,    =MPLLCON
ldr    r1,    = ((92 << 12) | (1 << 4) | (1 << 0))    // MDIV = 92  PDIV =1  SDIV = 1
str    r1,    [r0]                //写入寄存器

时钟树通过参数HDIVN, PDIVN对FCLK进行分频操作得到可操作进行外设操作的时钟HCLK, PCLK,设置分频系数的寄存器为CLKDIVN: 

# define CLKDIVN    0x4C000014 
ldr    r0,    =CLKDIVN    
ldr    r1,    =((10 << 1) | (1 << 0))    // HCLK = FCLK / 4
                                         // PCLK = HCLK / 2

最后一步由于设置的HDIVN寄存器不等于0,所以需要设置CPU处于异步状态,这里涉及到协处理器的命令(我也不懂哈哈哈),就按照手册中的来编(chao)写就行了。

3、代码重定位

这里先要讲一讲,由于nor flash在运行程序时,是可读不可写的,所以如果程序中有变量储存在 .bin文件中时,该变量不可被改变,即使在程序中对其进行修改。所以我们需要对代码进行重定位到SDRAM中,然后才能对其全局变量进行修改。所以首先应该讲下关于SDRAM的初始化配置:

3.1. SDRAM

由于在start,S程序中只要对SDRAM进行初始化配置,这样就能够对代码进行重定位,所以本章节博客只对SDRANM的初始化程序进行编写以及一些基本操作。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值