wince(s3c2410)中RTC的问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 这部分问题多多。

 

1.如何关机保持时间

 

1. 保证提供给RTC的3V电池有电;比较好就是挂个充电电池。也可以采用别的方案,我们公司就没有使用充电电池。不过个人认为还是使用充电电池好。
2. 更改2410的BSP,具体为:
在文件Platform/SMDK2410/kernel/hal/oemioctl.c中将

  1.     case IOCTL_HAL_INIT_RTC:
  2.      // The kernel has detected a cold-boot.   
  3.         if(nInBufSize >= sizeof(SYSTEMTIME)) 
  4.             return OEMSetRealTime((LPSYSTEMTIME)lpInBuf);
  5.         else
  6.             return FALSE;
  7.         break;

改为:

  1.      case IOCTL_HAL_INIT_RTC:
  2.      // The kernel has detected a cold-boot.   
  3.         if(nInBufSize >= sizeof(SYSTEMTIME)) 
  4.             return TRUE; //改这里 
  5.         else
  6.             return FALSE;
  7.         break;

这个是我遇到的第一个问题。

 

2.如何保证开机时间不会跑飞,避免USB同步无法使用。

由于没有采用充电电池,在中间调试阶段又出现新问题了。我们的方案断电比较久的话就无法保持时间,实际上在开发阶段是不会带电池的,所以第二天工作都要重新校准系统的时间,不然USB无法同步上。为了解决这个问题,研究了内核这部分代码。发现有一些BUG。做了修正。
修改timer.c中的OEMSetRealTime(LPSYSTEMTIME lpst) 函数

 

  1.  if ( firsttime == 0 )
  2.  {
  3.      OEMGetRealTime(lpst);
  4.      if (lpst->wYear >2100 || lpst->wYear <2000)
  5.      {
  6.          lpst->wYear = 2008; 
  7.          lpst->wMonth = 9; 
  8.          lpst->wDay = 1;
  9.       }
  10.       firsttime = 1;
  11.  }

主要是在第一次上电获取一下时间,并判断时间是否跑飞了。是的话给他初始化一个值。只要时间正常那么都能同步上PC。在S3C2410中rBCDYEAR虽然是uint型,但是根据CPU资料说明,他只能表示00-99这个范围的值。那么系统的时间也就只能是2000年至2099年了。改了这个,那么自然也就要把oemioctl.c中修改的代码还原,不然开机就不执行了。

 

3.修改年份超过2009年后时间获取的一个BUG。


研究过程中发现rBCDYEAR只最后一个字节有效,并且高4位表示年的十位数,低4位表示年的各位数。而在OEMGetRealTime函数中有这么一段代码

  1. if ( lpst->wSecond == 0 )
  2.  {
  3.    lpst->wSecond    = FROM_BCD(s2410RTC->rBCDSEC & 0x7f);
  4.    lpst->wMinute  = FROM_BCD(s2410RTC->rBCDMIN & 0x7f);
  5.    lpst->wHour  = FROM_BCD(s2410RTC->rBCDHOUR& 0x3f);
  6.    lpst->wDayOfWeek = (s2410RTC->rBCDDATE - 1);
  7.    lpst->wDay  = FROM_BCD(s2410RTC->rBCDDAY & 0x3f);
  8.    lpst->wMonth  = FROM_BCD(s2410RTC->rBCDMON & 0x1f);
  9.    lpst->wYear      = (2000 + s2410RTC->rBCDYEAR); 
  10.  }

其中lpst->wYear  = (2000 + s2410RTC->rBCDYEAR); 让我是在很纳闷,怎么这里就不一样了。我还记得我开始在wince平台上编程时使用GetLocalTime函数的BUG(http://blog.csdn.net/constantine/archive/2007/09/21/1794368.aspx),这个BUG就是在wSecond为0时发生的,我想问题应该出在这里了。修改一下

  1. if ( lpst->wSecond == 0 )
  2.  {
  3.   .........
  4.   lpst->wYear      = 2000 + FROM_BCD(s2410RTC->rBCDYEAR); //修改这里 
  5.  }

果然问题没有了。
关于RTC设计的问题网上并不少,但是看过之后都是一个毛病。也不知道是谁错起头的,接着大家就跟着一起犯错。或者说还有我没看清除的情况,见鬼了。

当然,现在还不到2010年,估计没多少人注意到这个问题。
 

linux uvcvideo linux下万能摄像头驱动,linux下万能摄像头驱动,linux下万能摄像头驱动, 立即下载

相关推荐

RTC(S3C2410)学习记录

<br />RTC提供可靠的系统时间,在系统关机情况下也能正常工作(使用后备电池);它需要一个32.768HZ的晶振,并且可以执行报警功能。<br />RTC应用:电子日历、手持数码产品、电子计量仪表、家用电器等。<br />特性:<br />——BCD数据,包括秒、分、小时、日期、星期、月和年<br />——闰年产生器<br />——报警功能<br />——解决了千年虫问题<br />——独立电源引脚RTCVDD<br />——支持ms中断作为RTOS内核时钟<br />——循环复位功能<br /> <b

better_yin的专栏 797

v4l2报错------uvcvideo: Non-zero status (-71) in video completion handler.

v4l2报错:uvcvideo: Non-zero status (-71) in video completion handler.  (未解决,求大神指点) arm CPU型号AM3354,Linux版本3.2.0,普通的UVC摄像头; 移植了mjpg-streamer的程序后,刚开始还没问题,调试过程中反复的打开、关闭,运行时间长了,慢慢的随机报如上错误,时间长了后一帧画面都采不到,一打

沉西乐恩的博客 6584

linux内核对S3C2410睡眠模式的支持

 一、S3C2410支持4种供电模式(1)NORMAL MODE耗电最大、可以通过关闭具体控制器的时钟来节电(2)SLOW MODE在此模式下可以没有内部PLL,耗电情况依赖于外部时钟的频率(3)IDLE MODEFCLK被关断,主要由于CPU core节电。可以任何通过外部中断唤醒(4)Power_OFF MODE除了处理器唤醒逻辑单元外,处理器不损耗任何

华清远见 | 程序员的学习天堂 1600

20240718解决开发板接USB3.0接口的红外相机出错uvcvideo: Non-zero status (-71) in video completion handler.

移植了mjpg-streamer的程序后,刚开始还没问题,调试过程中反复的打开、关闭,运行时间长了,慢慢的随机报如上错误,时间长了后一帧画面都采不到,一打开就报如上错误!确实是硬件的原因,USB的供电电压不稳定会导致这个错误出现,换个电源模块,还有USB电路中,在CPU附近好像有几个限流电阻,换成10欧的,这个可能具体情况不一样电阻大小也不一样,硬件不太懂.......2、如果你使用的是USB2.0,低速情况下仍然有,那就恭喜你,你的电源可能不太稳定。type C 2 type C / CC线直连即可。

南岭笑笑生之家 1790

WinCE-IIC调试助手(S3C2410)

转自:http://www.cnblogs.com/we-hjb/archive/2008/10/19/1314562.html 这两天在调试一款新的硬件平台,它采用的MCU依然是S3C2410。该平台新增了一个RTC模块,采用的芯片是DS1337。这是一个IIC接口的时钟芯片。在开始调试时碰到了一些问题,MCU始终无法与DS1337通讯,走了些弯路,浪费了不少时间。后来发现是IIC的SD

Carlward 的专栏 2085

s3c2410/2440 WINCERTC实现

由于三星的评估板并没有用rtc电池,所以提供的bsp是不能保存时间的,即使你在板子上加了rtc电池,不过修改起来也非常简单,修改smdk2410\KERNEL\HAL\ARM下的timer.c,我把修改过的oemsetrealtime函数贴在下面,这样改绝对没有问题。 BOOL OEMSetRealTime(LPSYSTEMTIME lpst) { volatile RT...

weixin_34199335的博客 138

基于s3c2440 的解决方案

S3C2440解决方案说明文档V1.0  TE2440解决方案套件硬件资源: 中央处理器◆ CPU: 三星S3C2440A,主频400MHz;外部存储器◆ 内存:64M字节;◆ NOR Flash:2M字节(SST39VF1601);(选配)◆ NAND Flash:64M字节(K9F1208,用户可自己更换为16M、32M或128M的NandFlash)

牛牛猛嵌入式的专栏 1669

板子终于拿到

板子终于拿到 2410 -II型开发板是针对S3C2410集实用性、时尚性于一体的高性能开发平台,主要面向广大中高级ARM爱好者、企业和高校用户。该开发平台接口丰富、功 能强大,可用于个人学习研究,也适合用来开发高性能手持式以及便携式智能设备或终端。选配带有触摸屏的3.5’和8’SHAPR TFT真彩液 晶。 一、核心板技术参数1、 S3C2410:16

kvew的专栏 1397

wince S3c2410/2440/2443的Eboot流程介绍

对于嵌入式系统来说,一般都需要一个bootloader来下载和引导操作系统,常用的bootloader有eboot,uboot以及vivi等,对于windows ce来说最理想的bootloader当然是eboot(我也做了利用uboot下载和引导ce,以后我会介绍)。下面我就把自己开发eboot的过程和大家分享。eboot的流程可以如下图所示: 1)eboot和nk公用一段起始代码fw.s,

GT_Andy的专栏 579

S3c2410/2440的Eboot流程介绍

对于嵌入式系统来说,一般都需要一个bootloader来下载和引导操作系统,常用的bootloader有eboot,uboot以及vivi等,对于windows ce来说最理想的bootloader当然是eboot(我也做了利用uboot下载和引导ce,以后我会介绍)。下面我就把自己开发eboot的过程和大家分享。eboot的流程可以如下图所示:自己开发eboot的过程和大家分享。

menuconfig的专栏 1073

S3c2410/2440/2443的Eboot流程介绍

对于嵌入式系统来说,一般都需要一个bootloader来下载和引导操作系统,常用的bootloader有eboot,uboot以及vivi等,对于windows ce来说最理想的bootloader当然是eboot(我也做了利用uboot下载和引导ce,以后我会介绍)。下面我就把自己开发eboot的过程和大家分享。eboot的流程可以如下图所示: 1)eboot和nk公用一段起始代码fw.

GT-Andy 363

ARM-WinCE5.0-寄存器读写工具

   “谁动了我的GPIO”,我想很多做嵌入式开发的同行可能也碰到过类似的问题:硬件没有按照设计的程序工作,好像是相关的寄存器在别处被改了。遇到这种情况,一般有两种处理方法,一是通过JTAG仿真器进行调试,单步跟踪,确认相关的寄存器就是我们要设的值。而这在调试WinCE驱动或者应用程序时是不方便实现的,一般在WinCE中通过添加打印信息来确认。前面曾讲过基于KITL调试WinCE的方法,这种方法固...

weixin_34009794的博客 171

wince 触摸屏 学习

前段时间移植 6.0 BSP,目前已移植到触摸屏部分了. 移植过程中学到了不少东西. 由其是关于触摸屏这部分, 掌握了很多以前不会的东西. 觉得有必要把这些知识点整理一下.  一 硬件部分 硬件上的原理不是本文的重点,只讲一下大概的原理(主要是我也只知道大概的原理, 毕竟咱不是搞硬件的. 嘻嘻!) 我移植用的这个屏是320*240 的TFT屏, 四线电阻式触屏. 这种

xingyuan1hao的专栏 1568

ARM-WinCE5.0-寄存器读写工具(转载 )

“谁动了我的GPIO”,我想很多做嵌入式开发的同行可能也碰到过类似的问题:硬件没有按照设计的程序工作,好像是相关的寄存器在别处被改了。遇到这种情况,一般有两种处理方法,一是通过JTAG仿真器进行调试,单步跟踪,确认相关的寄存器就是我们要设的值。而这在调试WinCE驱动或者应用程序

xqhrs232的专栏 1333
上一篇: 【转】WinCE驱动开发问题精华集锦
下一篇: 宽窄屏幕资源问题
constantine
博客等级 码龄23年 240粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值