Chinaunix首页 | 论坛 | 博客
  • 博客访问: 394985
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1620
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-10 16:55
个人简介

当你比别人优秀一点点,别人会嫉妒你。当你比别人优秀很多,别人会羡慕你。

文章分类

全部博文(138)

文章存档

2016年(2)

2015年(2)

2014年(15)

2013年(119)

我的朋友

分类: 嵌入式

2013-04-08 10:35:02

开发板按道理来说有三个等级。
1)CPU核:我们这里是arm920t
2)CPU:   我们这里是s3c2440
3)开发板:我们这里是QQ2440

=================================================================================================
系统的启动过程,也是按照上面三个等级来的。

CPU核初始化-->CPU初始化-->开发板初始化(开发板初始化也就是各种外设的初始化)

1)        相同的CPU核,可以组合很多CPU。但是相同的CPU核的初始化等应该是相同的。所以, CPU(核)的初始化就放在cpu这个目录中,也是情理之中的,因为系统上电后,当然先初始化CPU。

 2)       board这目录,下面,放置 了不同的CPU初始化目录。 s3c2400 s3c2410 smdk2400 smdk2410等等。当我们需要添加一个s3c2440的时候,我们就需要新建一个目录。

        PS:自我认为,前面介绍的两个目录,CPU应该叫做CPU核, board应该叫做CPU,但是没办法,人家取得名字。

3)        然后启动就到了开发板外设的初始化,虽然初始化仍然是操作CPU的各种各样的寄存器(说白了,任何操作都是在操作CPU),但这个阶段已经属于外设的初始化。比如串口等等。
    这部分代码放在 lib_arm/board.c目录下。
    
系统从u-boot-1.1.6/cpu/arm920t/start.S 开始,从CPU核开始初始化。期间会调用u-boot-1.1.6/board/s3c2440进行CPU的初始化。
然后就会蹦到u-boot-1.1.6/lib_arm/board.c这个文件进行外设的初始化,初始化完成,就会进入main loop。


这里解释了为什么要创建board目录下的对应目录

===================================================================================================
下面解释下头文件部分。

我们使用一个芯片,就是要配置这个芯片对应的控制器的SFR,我们汇编代码中一般是直接使用”向一个内存地址赋值”来做的,这里C语言的做法是这样的.

因为一个控制器的多个SFR地址是挨着的,那么我们就可以定义一个结构体来表示这一堆SFR

typedef struct {

S3C24X0_REG32 NFCONF;

S3C24X0_REG32 NFCMD;

S3C24X0_REG32 NFADDR;

S3C24X0_REG32 NFDATA;

S3C24X0_REG32 NFSTAT;

S3C24X0_REG32 NFECC;

} S3C2410_NAND;

像这样,我们就可以用这个结构体来表示NAND的所有SFR

然后再这样:

#define S3C2410_NAND_BASE 0x4E000000

static inline S3C2410_NAND * const S3C2410_GetBase_NAND(void)

{

    return (S3C2410_NAND * const)S3C2410_NAND_BASE;

}

这里这个宏定义是用来指定Nand 的一堆SFR的起始地址.

这个函数是用来返回这个地址,而且返回的时候强制类型转换了一下,这里设计到指针类型,我就不罗嗦了.

所以,C语言中,一般会使用这么三部分的接合来使用一个控制器的SFR:
从本质上说,这三部分肯定是可以放在一个头文件中,然后使用的。
然后因为s3c2400 s3c2410 s3c2440这个系列的CPU比较类似,大部分SFR的结构都一样,但是起始地址可能不同。所以呢,就吧结构的定义放在一个通用的头文件s3c24x0.h 这么个头文件中。 而把获得起始地址的两部分放在CPU相关的一个头文件中。类似的有s3c2400.h s3c2410.h我们这里添加一个s3c2440,应该入相随俗,也使用这个公共的s3c24x0.h,同时创建一个自己的s3c2440.h
u-boot-1.1.6/include/s3c24x0.h
u-boot-1.1.6/include/s3c2410.h



阅读(986) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~