文档章节

友善之臂最新版mini2440学习笔记——u-boot 1.1.6移植(四)

zhaowei09
 zhaowei09
发布于 2016/06/20 21:37
字数 1563
阅读 7
收藏 0

前段时间去韩国开会,一直没时间更新,现在继续。前面三个部分已将u-boot启动第一阶段的内容讲述完毕,现在进入启动的第二阶段。由于第二阶段采用C语言编写,在此之前首先介绍以下头文件的更改。

  1. include/s3c24x0.h
  2. include/s3c2440.h(新文件,以s3c2410.h为基础移植)
  3. include/configs/mini2440.h(新文件,以smdk2410.h为基础移植)

本篇仅涉及include/s3c24x0.h,其余两个文件将在后续博文中介绍。


  • 中断控制寄存器结构体:添加对S3C2440的支持

源代码:

/* INTERRUPT (see manual chapter 14) */
typedef struct {
	S3C24X0_REG32	SRCPND;
	S3C24X0_REG32	INTMOD;
	S3C24X0_REG32	INTMSK;
	S3C24X0_REG32	PRIORITY;
	S3C24X0_REG32	INTPND;
	S3C24X0_REG32	INTOFFSET;
#ifdef CONFIG_S3C2410
	S3C24X0_REG32	SUBSRCPND;
	S3C24X0_REG32	INTSUBMSK;
#endif
} /*__attribute__((__packed__))*/ S3C24X0_INTERRUPT;

更改为:

/* INTERRUPT (see manual chapter 14) */
typedef struct {
	S3C24X0_REG32	SRCPND;
	S3C24X0_REG32	INTMOD;
	S3C24X0_REG32	INTMSK;
	S3C24X0_REG32	PRIORITY;
	S3C24X0_REG32	INTPND;
	S3C24X0_REG32	INTOFFSET;
#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
	S3C24X0_REG32	SUBSRCPND;
	S3C24X0_REG32	INTSUBMSK;
#endif
} /*__attribute__((__packed__))*/ S3C24X0_INTERRUPT;

源代码:

/* DMAS (see manual chapter 8) */
typedef struct {
	S3C24X0_REG32	DISRC;
#ifdef CONFIG_S3C2410
	S3C24X0_REG32	DISRCC;
#endif
	S3C24X0_REG32	DIDST;
#ifdef CONFIG_S3C2410
	S3C24X0_REG32	DIDSTC;
#endif
	S3C24X0_REG32	DCON;
	S3C24X0_REG32	DSTAT;
	S3C24X0_REG32	DCSRC;
	S3C24X0_REG32	DCDST;
	S3C24X0_REG32	DMASKTRIG;
#ifdef CONFIG_S3C2400
	S3C24X0_REG32	res[1];
#endif
#ifdef CONFIG_S3C2410
	S3C24X0_REG32	res[7];
#endif
} /*__attribute__((__packed__))*/ S3C24X0_DMA;

更改为:

/* DMAS (see manual chapter 8) */
typedef struct {
	S3C24X0_REG32	DISRC;
#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
	S3C24X0_REG32	DISRCC;
#endif
	S3C24X0_REG32	DIDST;
#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
	S3C24X0_REG32	DIDSTC;
#endif
	S3C24X0_REG32	DCON;
	S3C24X0_REG32	DSTAT;
	S3C24X0_REG32	DCSRC;
	S3C24X0_REG32	DCDST;
	S3C24X0_REG32	DMASKTRIG;
#ifdef CONFIG_S3C2400
	S3C24X0_REG32	res[1];
#endif
#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
	S3C24X0_REG32	res[7];
#endif
} /*__attribute__((__packed__))*/ S3C24X0_DMA;

源代码:

typedef struct {
	S3C24X0_REG32	LOCKTIME;
	S3C24X0_REG32	MPLLCON;
	S3C24X0_REG32	UPLLCON;
	S3C24X0_REG32	CLKCON;
	S3C24X0_REG32	CLKSLOW;
	S3C24X0_REG32	CLKDIVN;
} /*__attribute__((__packed__))*/ S3C24X0_CLOCK_POWER;

更改为:

typedef struct {
	S3C24X0_REG32	LOCKTIME;
	S3C24X0_REG32	MPLLCON;
	S3C24X0_REG32	UPLLCON;
	S3C24X0_REG32	CLKCON;
	S3C24X0_REG32	CLKSLOW;
	S3C24X0_REG32	CLKDIVN;
#ifdef CONFIG_S3C2440
	S3C24X0_REG32	CAMDIVN;
#endif
} /*__attribute__((__packed__))*/ S3C24X0_CLOCK_POWER;

源代码:

/* LCD CONTROLLER (see manual chapter 15) */
typedef struct {
	S3C24X0_REG32	LCDCON1;
	S3C24X0_REG32	LCDCON2;
	S3C24X0_REG32	LCDCON3;
	S3C24X0_REG32	LCDCON4;
	S3C24X0_REG32	LCDCON5;
	S3C24X0_REG32	LCDSADDR1;
	S3C24X0_REG32	LCDSADDR2;
	S3C24X0_REG32	LCDSADDR3;
	S3C24X0_REG32	REDLUT;
	S3C24X0_REG32	GREENLUT;
	S3C24X0_REG32	BLUELUT;
	S3C24X0_REG32	res[8];
	S3C24X0_REG32	DITHMODE;
	S3C24X0_REG32	TPAL;
#ifdef CONFIG_S3C2410
	S3C24X0_REG32	LCDINTPND;
	S3C24X0_REG32	LCDSRCPND;
	S3C24X0_REG32	LCDINTMSK;
	S3C24X0_REG32	LPCSEL;
#endif
} /*__attribute__((__packed__))*/ S3C24X0_LCD;

更改后:

/* LCD CONTROLLER (see manual chapter 15) */
typedef struct {
	S3C24X0_REG32	LCDCON1;
	S3C24X0_REG32	LCDCON2;
	S3C24X0_REG32	LCDCON3;
	S3C24X0_REG32	LCDCON4;
	S3C24X0_REG32	LCDCON5;
	S3C24X0_REG32	LCDSADDR1;
	S3C24X0_REG32	LCDSADDR2;
	S3C24X0_REG32	LCDSADDR3;
	S3C24X0_REG32	REDLUT;
	S3C24X0_REG32	GREENLUT;
	S3C24X0_REG32	BLUELUT;
	S3C24X0_REG32	res[8];
	S3C24X0_REG32	DITHMODE;
	S3C24X0_REG32	TPAL;
#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
	S3C24X0_REG32	LCDINTPND;
	S3C24X0_REG32	LCDSRCPND;
	S3C24X0_REG32	LCDINTMSK;
	S3C24X0_REG32	LPCSEL;
#endif
} /*__attribute__((__packed__))*/ S3C24X0_LCD;

S3C2440的NAND Flash寄存器与S3C2410相差较大,这里重新编写如下:

typedef struct {
	S3C24X0_REG32	NFCONF;
	S3C24X0_REG32	NFCONT;
	S3C24X0_REG32	NFCMD;
	S3C24X0_REG32	NFADDR;
	S3C24X0_REG32	NFDATA;
	S3C24X0_REG32	NFMECCD0;
	S3C24X0_REG32	NFMECCD1;
	S3C24X0_REG32	NFSECCD;
	S3C24X0_REG32	NFSTAT;
	S3C24X0_REG32	NFESTAT0;
	S3C24X0_REG32	NFESTAT1;
	S3C24X0_REG32	NFMECC0;
	S3C24X0_REG32	NFMECC1;
	S3C24X0_REG32	NFSECC;
	S3C24X0_REG32	NFSBLK;
	S3C24X0_REG32	NFEBLK;
} /*__attribute__((__packed__))*/ S3C2440_NAND;

CMOS摄像头控制器是S3C2440新增的,因此需要增加如下代码:

/* Camera (see s3c2440 manual chapter 23) */
typedef struct{
	S3C24X0_REG32	CISRCFMT;
	S3C24X0_REG32	CIWDOFST;
	S3C24X0_REG32	CIGCTRL;
	S3C24X0_REG32	res0[3];
	S3C24X0_REG32	CICOYSA[4];
	S3C24X0_REG32	CICOCBSA[4];
	S3C24X0_REG32	CICOCRSA[4];
	S3C24X0_REG32	CICOTRGFMT;
	S3C24X0_REG32	CICOCTRL;
	S3C24X0_REG32	CICOSCPRERATIO;
	S3C24X0_REG32	CICOSCPREDST;
	S3C24X0_REG32	CICOSCCTRL;
	S3C24X0_REG32	CICOTAREA;
	S3C24X0_REG32	res1;
	S3C24X0_REG32	CICOSTATUS;
	S3C24X0_REG32	res2;
	S3C24X0_REG32	CIPRCLRSA[4];
	S3C24X0_REG32	CIPRTRGFMT;
	S3C24X0_REG32	CIPRCTRL;
	S3C24X0_REG32	CIPRSCPRERATIO;
	S3C24X0_REG32	CIPRSCPREDST;
	S3C24X0_REG32	CIPRSCCTRL;
	S3C24X0_REG32	CIPRTAREA;
	S3C24X0_REG32	res3;
	S3C24X0_REG32	CIPRSTATUS;
	S3C24X0_REG32	res4;
	S3C24X0_REG32	CIIMGCPT;
}/*__attribute__((__packed__))*/ S3C2440_CAM;

源代码:

/* IIC (see manual chapter 20) */
typedef struct {
	S3C24X0_REG32	IICCON;
	S3C24X0_REG32	IICSTAT;
	S3C24X0_REG32	IICADD;
	S3C24X0_REG32	IICDS;
} /*__attribute__((__packed__))*/ S3C24X0_I2C;

修改后:

/* IIC (see manual chapter 20) */
typedef struct {
	S3C24X0_REG32	IICCON;
	S3C24X0_REG32	IICSTAT;
	S3C24X0_REG32	IICADD;
	S3C24X0_REG32	IICDS;
#ifdef CONFIG_S3C2440
	S3C24X0_REG32	IICLC;
#endif
} /*__attribute__((__packed__))*/ S3C24X0_I2C;

S3C2440的I/O寄存器与S3C2410基本相同,由于多出一些引脚,因此I/O控制寄存器也多出一些。因此在S3C24X0_GPIO结构中新增如下代码:

#ifdef CONFIG_S3C2440
	S3C24X0_REG32	GPACON;
	S3C24X0_REG32	GPADAT;
	S3C24X0_REG32	res1[2];
	S3C24X0_REG32	GPBCON;
	S3C24X0_REG32	GPBDAT;
	S3C24X0_REG32	GPBUP;
	S3C24X0_REG32	res2;
	S3C24X0_REG32	GPCCON;
	S3C24X0_REG32	GPCDAT;
	S3C24X0_REG32	GPCUP;
	S3C24X0_REG32	res3;
	S3C24X0_REG32	GPDCON;
	S3C24X0_REG32	GPDDAT;
	S3C24X0_REG32	GPDUP;
	S3C24X0_REG32	res4;
	S3C24X0_REG32	GPECON;
	S3C24X0_REG32	GPEDAT;
	S3C24X0_REG32	GPEUP;
	S3C24X0_REG32	res5;
	S3C24X0_REG32	GPFCON;
	S3C24X0_REG32	GPFDAT;
	S3C24X0_REG32	GPFUP;
	S3C24X0_REG32	res6;
	S3C24X0_REG32	GPGCON;
	S3C24X0_REG32	GPGDAT;
	S3C24X0_REG32	GPGUP;
	S3C24X0_REG32	res7;
	S3C24X0_REG32	GPHCON;
	S3C24X0_REG32	GPHDAT;
	S3C24X0_REG32	GPHUP;
	S3C24X0_REG32	res8;
	S3C24X0_REG32	MISCCR;
	S3C24X0_REG32	DCLKCON;
	S3C24X0_REG32	EXTINT0;
	S3C24X0_REG32	EXTINT1;
	S3C24X0_REG32	EXTINT2;
	S3C24X0_REG32	EINTFLT0;
	S3C24X0_REG32	EINTFLT1;
	S3C24X0_REG32	EINTFLT2;
	S3C24X0_REG32	EINTFLT3;
	S3C24X0_REG32	EINTMASK;
	S3C24X0_REG32	EINTPEND;
	S3C24X0_REG32	GSTATUS0;
	S3C24X0_REG32	GSTATUS1;
	S3C24X0_REG32	GSTATUS2;
	S3C24X0_REG32	GSTATUS3;
	S3C24X0_REG32	GSTATUS4;
	S3C24X0_REG32	res9[3];
	S3C24X0_REG32	MSLCON;
	S3C24X0_REG32	GPJCON;
	S3C24X0_REG32	GPJDAT;
	S3C24X0_REG32	GPJUP;
#endif
typedef struct{
	S3C24X0_REG32	ADCCON;
	S3C24X0_REG32	ADCTSC;
	S3C24X0_REG32	ADCDLY;
	S3C24X0_REG32	ADCDAT0;
	S3C24X0_REG32	ADCDAT1;
	S3C24X0_REG32	ADCUPDN;
} /*__attribute__((__packed__))*/ S3C2440_ADC;

S3C2440中SD卡控制寄存器为新增部分,需要添加如下代码:

* SD INTERFACE (see S3C2440 manual chapter 19) */
typedef struct {
	S3C24X0_REG32	SDICON;
	S3C24X0_REG32	SDIPRE;
	S3C24X0_REG32	SDICARG;
	S3C24X0_REG32	SDICCON;
	S3C24X0_REG32	SDICSTA;
	S3C24X0_REG32	SDIRSP0;
	S3C24X0_REG32	SDIRSP1;
	S3C24X0_REG32	SDIRSP2;
	S3C24X0_REG32	SDIRSP3;
	S3C24X0_REG32	SDIDTIMER;
	S3C24X0_REG32	SDIBSIZE;
	S3C24X0_REG32	SDIDCON;
	S3C24X0_REG32	SDIDCNT;
	S3C24X0_REG32	SDIDSTA;
	S3C24X0_REG32	SDIFSTA;
	S3C24X0_REG32	SDIIMSK;
#ifdef __BIG_ENDIAN
	S3C24X0_REG8	res[3];
	S3C24X0_REG8	SDIDAT;
#else
	S3C24X0_REG8	SDIDAT;
	S3C24X0_REG8	res[3];
#endif
} /*__attribute__((__packed__))*/ S3C2440_SDI;

AC97控制寄存器为S3C2440新增部分,需添加如下代码:

/* AC97 (see S3C2440 manual chapter 24) */
typedef struct{
	S3C24X0_REG32	AC_GLBCTRL;
	S3C24X0_REG32	AC_GLBSTAT;
	S3C24X0_REG32	AC_CODEC_CMD;
	S3C24X0_REG32	AC_CODEC_STAT;
	S3C24X0_REG32	AC_PCMADDR;
	S3C24X0_REG32	AC_MICADDR;
	S3C24X0_REG32	AC_PCMDATA;
	S3C24X0_REG32	AC_MICDATA;
} /*__attribute__((__packed__))*/ S3C2440_AC97;

至此,s3c24x0.h文件的移植工作已经全部结束。可以看出s3c24x0.h文件主要用于定义片上控制寄存器的结构体,掌握这一原则后,移植工作也就变得很容易。只需将S3C2440相对于初始代码中未定义的部分添加上即可。为保证移植后代码的通用性,建议如本文一样采用条件编译宏进行控制。保证移植后依然对S3C24x0其余SOC的支持,养成良好的软件设计习惯。

  1. include/s3c24x0.h
    • 中断寄存器结构体:增加对S3C2440的支持,寄存器与S3C2410一致
    • DMA寄存器结构体:增加对S3C2440的支持,寄存器与S3C2410一致
    • 时钟与能量管理寄存器结构体:增加对S3C2440的支持。
    • LCD控制寄存器结构体:增加对S3C2440的支持,寄存器与S3C2410一致
    • 增加S3C2440的NAND Flash控制寄存器结构体
    • 增加CMOS摄像头控制寄存器的支持
    • IIC控制寄存器结构体:增加对S3C2440的支持
    • I/O寄存器结构体:增加对S3C2440的支持
    • ADC寄存器结构体:增加S3C2440的支持
    • 增加对SD卡控制器的支持
    • 增加AC97控制寄存器结构体
    • 小结
  2.  

 

 

 

© 著作权归作者所有

共有 人打赏支持
zhaowei09
粉丝 0
博文 7
码字总数 45754
作品 0
长沙
程序员
Mini2440上的第一个程序——点亮Led

手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习。 我使用的是友善之臂的Mini2440开发板、韦东山的《嵌入式Linux应用开发完成手册》及其视频教程。所以,本篇...

icuic
07/15
0
0
自己编译的QT4.6.3可以用,为什么QT4.7.1会出现段错误?

我使用的是友善之臂mini2440的开发板,移植qte时自己编译的QT4.6.3移植到开发板可以运行(友善之臂给的文件系统里就是QT4.6.3),但是又自己编译了QT4.7.1,移植到开发板上时却出现segmentatio...

tom_riddle
2014/02/16
231
0
mini2440基于uboot的TFTP下载教程

由于mini2440在WIN7上下载,USB驱动无法兼容,总是出现蓝屏重启的现象,导致不得不想其他方式来下载,首先就考虑了使用U-Boot来下载,因为它支持多种下载方式: 1. 使用串口下载,它支持ker...

FGQ
2013/01/12
0
0
嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 共享资源,欢迎转载:http:...

nothingfinal
2012/06/19
0
0
对mini2440LED灯驱动开发

一直在学习友善之臂的MINI2440开发板,今天完成了,led的实验在此总结一下 1.编写驱动程序(led1.c) #include include include include include include include include...

长平狐
2012/08/28
363
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

go语言学习总结

一、描述 go语言是直接将源码编译成二进制机器码的语言;它支持面向对象、也支持函数式编程;支持并发很容易; 二、基本语法学习路径 https://studygolang.com/subject/2...

盼望明天
16分钟前
1
0
JSP 九大内置对象及其作用域

JSP 中一共预先定义了 9 个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception ,下面就简单介绍下。 1、request 对象 request 对象...

几个栗子
28分钟前
0
0
Java中的坑之方括号

Java中的坑之方括号 这一段时间,在做项目的时候,发现了一个坑,这个坑说大不大,说小不小,不知道的足够喝一壶,知道的就可以轻松解决。 问题描述 在做数据统计的时候,遇见了如下形式的数...

星汉
38分钟前
1
0
[雪峰磁针石博客]python机器学习、web开发等书籍汇总

Building Machine Learning Systems with Python Third Edition - 2018.pdf 下载地址 Get more from your data by creating practical machine learning systems with Python Key Features ......

python测试开发人工智能安全
49分钟前
1
0
文件的压缩与解压(linux)

Linux下*.tar.gz文件解压缩命令 1.压缩命令:   命令格式:tar -zcvf 压缩后文件名.tar.gz 被压缩文件名 可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。 2.解压缩命令: ...

qimh
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部