uboot中可能会有需求提供rtc的支持目的达到uboot启动也能够进行墙上时间的显示和后面推断。大部分rtc支持的一个必要条件就是已经有i2c的支持。由于非常多的rtc是i2c接口控制的。uboot中i2c的移植在前一篇中已经提过。这里就仅仅做rtc的移植。这里选择了经常使用的一款rtc芯片pcf8653来分析。

第一步 开启支持的选项,

uboot/include/configs/mpc5200-common.h这个配置文件里开启了8653这个芯片的支持。

/*

* RTC configuration

*/

define CONFIG_RTC_PCF8563

define CONFIG_SYS_I2C_RTC_ADDR 0x51

这里定义了8653的开启配置和他的i2c的device id

第二步:uboot/drivers/rtc/Makefile

COBJS-$(CONFIG_RTC_PCF8563) += pcf8563.o

确定有这么一条,假设移植里面不存在的你就要自己加入了。

第三步 实现pcf8563.c 这个文件,这个就相当于新建立一个命令。可是这个命令还是uboot做了统一的。这样就能够方便使用者了。

/*

* (C) Copyright 2001

* Wolfgang Denk, DENX Software Engineering, wd@denx.de.

*

* See file CREDITS for list of people who contributed to this

* project.

*

* This program is free software; you can redistribute it and/or

* modify it under the terms of the GNU General Public License as

* published by the Free Software Foundation; either version 2 of

* the License, or (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program; if not, write to the Free Software

* Foundation, Inc., 59 Temple Place, Suite 330, Boston,

* MA 02111-1307 USA

*/

/*

* Date & Time support for Philips PCF8563 RTC

*/

/* #define DEBUG */

include

include

include

include

if defined(CONFIG_CMD_DATE)

static uchar rtc_read (uchar reg);

static void rtc_write (uchar reg, uchar val);

/* ————————————————————————- */

int rtc_get (struct rtc_time *tmp)

{

int rel = 0;

uchar sec, min, hour, mday, wday, mon_cent, year;

sec = rtc_read (0x02)-0x80;
min = rtc_read (0x03);
hour = rtc_read (0x04);
mday = rtc_read (0x05);
wday = rtc_read (0x06);
mon_cent= rtc_read (0x07);
year = rtc_read (0x08); debug ( "Get RTC year: %02x mon/cent: %02x mday: %02x wday: %02x "
"hr: %02x min: %02x sec: %02x\n",
year, mon_cent, mday, wday,
hour, min, sec );
debug( "Alarms: wday: %02x day: %02x hour: %02x min: %02x\n",
rtc_read (0x0C),
rtc_read (0x0B),
rtc_read (0x0A),
rtc_read (0x09) );

/*

if (sec & 0x80) {

puts (“xu Warning: RTC Low Voltage - date/time not reliable\n”);

rel = -1;

}

*/

tmp->tm_sec = bcd2bin (sec & 0x7F);

tmp->tm_min = bcd2bin (min & 0x7F);

tmp->tm_hour = bcd2bin (hour & 0x3F);

tmp->tm_mday = bcd2bin (mday & 0x3F);

tmp->tm_mon = bcd2bin (mon_cent & 0x1F);

tmp->tm_year = bcd2bin (year) + ((mon_cent & 0x80) ?

2000 : 1900);

tmp->tm_wday = bcd2bin (wday & 0x07);

tmp->tm_yday = 0;

tmp->tm_isdst= 0;

debug( "Get DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
tmp->tm_hour, tmp->tm_min, tmp->tm_sec); return rel;

}

int rtc_set (struct rtc_time *tmp)

{

uchar century;

debug ( "Set DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
tmp->tm_hour, tmp->tm_min, tmp->tm_sec); rtc_write (0x08, bin2bcd(tmp->tm_year % 100)); century = (tmp->tm_year >= 2000) ? 0x80 : 0;
rtc_write (0x07, bin2bcd(tmp->tm_mon) | century); rtc_write (0x06, bin2bcd(tmp->tm_wday));
rtc_write (0x05, bin2bcd(tmp->tm_mday));
rtc_write (0x04, bin2bcd(tmp->tm_hour));
rtc_write (0x03, bin2bcd(tmp->tm_min ));
rtc_write (0x02, bin2bcd(tmp->tm_sec )); return 0;

}

void rtc_reset (void)

{

/* clear all control & status registers */
rtc_write (0x00, 0x00);
rtc_write (0x01, 0x00);
rtc_write (0x0D, 0x00); /* clear Voltage Low bit */
rtc_write (0x02, rtc_read (0x02) & 0x7F); /* reset all alarms */
rtc_write (0x09, 0x00);
rtc_write (0x0A, 0x00);
rtc_write (0x0B, 0x00);
rtc_write (0x0C, 0x00);

}

/* ————————————————————————- */

static uchar rtc_read (uchar reg)

{

return (i2c_reg_read (CONFIG_SYS_I2C_RTC_ADDR, reg));

}

static void rtc_write (uchar reg, uchar val)

{

i2c_reg_write (CONFIG_SYS_I2C_RTC_ADDR, reg, val);

}

endif

这俩能够看到

开启CONFIG_CMD_DATE 这个配置

在uboot/include/rtc.h中也是相同对rtc定义了几个标准函数:

int rtc_get (struct rtc_time *);

int rtc_set (struct rtc_time *);

void rtc_reset (void);

void GregorianDay (struct rtc_time *);

void to_tm (int, struct rtc_time *);

unsigned long mktime (unsigned int, unsigned int, unsigned int,

unsigned int, unsigned int, unsigned int);

我们上面的8563文件里也是相应的实现这几个函数。依照标准的參数配置回应标准的数据或者配置。

这里还要关心一个date.c的文件 这个文件实现了date命令unsigned long mktime (unsigned int, unsigned int, unsigned int,

unsigned int, unsigned int, unsigned int);

uboot移植rtc的更多相关文章

  1. u-boot移植 II

    下面是韦老师的uboot移植攻略: A. 开发板的相关拷贝与修改 1. 在board文件夹下面, 将原来的smdk2410复制为100ask24x0目录, 并将smdk2410.c改名为100ask2 ...

  2. 基于mini2440的uboot移植(一)

    一.移植环境 虚拟机:ubuntu12.04 uboot源码:u-boot-2008.10.tar.bz2 交叉编译:arm-linux-gcc-4.4.3 简单的记录下编译uboot的过程,要想具体 ...

  3. 【转】uboot移植(一)BootLoader基本概念

    原文网址:http://blog.chinaunix.net/uid-25445243-id-3869348.html 一.BootLoader简介1.1.嵌入式Linux软件结构与分布 在一般情况下 ...

  4. [学习资料] Tiny210(S5PV210) u-boot移植

    Tiny210(S5PV210) u-boot移植http://www.microoh.com/bbs/forum.php?mod=viewthread&tid=254&fromuid ...

  5. u-boot移植总结(四)u-boot-2010.09框架分析

    (一)本次移植是基于FL2440,板子的基本硬件: CPU 型号为S3C2440,基于ARM920T,指令集ARMV4,时钟主频400MHz SDRAM H57V2562GTR-75C 2片*32MB ...

  6. U-BOOT 移植到友善之臂mini2440

    U-BOOT 移植到友善之臂mini2440 开发环境:ubuntu 10.10 编译器:友善之臂mini2440光盘自带arm-linux-gcc 4.4.3 一. 在denx官网下载源码,我所用版 ...

  7. X-007 FriendlyARM tiny4412 u-boot移植之内存初始化

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  8. X-004 FriendlyARM tiny4412 uboot移植之点亮指路灯

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  9. X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件

    X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件 <<<<<<<<<<<<<< ...

随机推荐

  1. C#,一种简单的方式实现滚动鼠标缩放图片,平移

    1.缩放 private void ImageShow_Load(object sender, EventArgs e) { pictureBox1.Load(@"E:\SQ1.jpg&qu ...

  2. 让python和C/C++联姻【转】

    python不在孤单,轻易而举的为python写C/C++第三方库. 我们都知道python很慢,特别是处理大数据的时候,简直慢到极致,如果在知道代码的瓶颈的时候,可以将需要大量计算的数据块放在C/C ...

  3. 洛谷 P 2756 飞行员配对方案问题

    题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ...

  4. NKOI 1469 通向自由的钥匙

    P1469通向自由的钥匙 时间限制 : 10000 MS   空间限制 : 65536 KB 问题描述 通向自由的钥匙被放n个房间里,这n个房间由n-1条走廊连接.但是每个房间里都有特别的保护魔法,在 ...

  5. 【CF1015E】Stars Drawing(贪心)

    题意:给定一个n×m大小的字符矩阵,仅由‘.’和‘*’组成,询问这个图可否划分为一些由‘*’组成的十字形状,这些十字之间可以有重叠, 如果存在方案则输出每个十字中心坐标与边长度,无解输出-1 n,m& ...

  6. jQuery重要插件!

    原文发布时间为:2009-08-05 -- 来源于本人的百度文章 [由搬家工具导入] 强烈推荐:240多个jQuery插件 概述 jQuery 是继 prototype 之后又一个优秀的 Javasc ...

  7. 【Visual Studio】无法打开包括文件:“SDKDDKVer.h”

    解决办法是在头文件的搜索目录中添加$(WindowsSDK_IncludePath);,同时在库文件的搜索目录中添加$(WindowsSDK_LibraryPath_x86);

  8. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---42

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  9. arduino ide的串口权限解决

    刚刚到手一个Arduino uno R3的板子,windows下arduino IDE的串口正常使用,linux下却出现权限问题,解决方案如下:(以下操作使用超级用户) 1.查看设备所在的组ls -l ...

  10. Swift Perfect 基础项目

    brew install mysql@5.7 && brew link mysql@5.7 --force Package.swift import PackageDescriptio ...