20080820---记录
s3c2510处理器uclinux环境下的iic驱动开发完毕,此驱动包括eeprom的驱动和RTC的驱动,应用程序可以通过打开i2c0,和i2c1分别访问这两个硬件驱动。
存在的问题RTC时间不够精确,是什么问题?可能是晶体的问题。
根据项目的需求需要采用B-IRIG码对时,要么采用秒脉冲对。B码通过单片机解析把时间信息保存到自己的片内ram中,arm定时去读它通过iic,并更新RTC时钟;若外部接秒脉冲则经过硬件电平处理,产生arm中断通知arm 1秒来了,每1分种去读rtc时钟更新arm内部的rtc结构体。
前面说的有点混乱现在里里---硬件上设计了B码对时、秒脉冲对时、RTC时钟,它们经过处理先产生arm中断,针对两种对时方法在硬件上是可通过跳线设置的,而且选其1工作,若是B码对时则rtc时钟为参考时钟,arm会周期的刷新RTC的值,若采用秒脉冲对时则RTC时钟为主时钟,arm只能读取它,当然用户可以设置更新RTC时间。
现在的问题是如何组织arm的驱动完成中断服务?
总的需求
arm需要一个毫秒定时器中断,外部B码或秒脉冲中断,iic总线(读单片机,和rtc时钟)。
驱动的应用层接口:write函数,用户可以设置rtc时钟,read函数用户可以随时读时钟(要么是RTC,要么是B码)
分析:驱动层需要建立rtc时钟副本,应用层执行read时,只需要从副本中获得即可,节省了read的时间。
毫秒定时器中断服务处理下面任务,更新毫秒计数器,计算并更新秒计数器到rtc副本结构中
20080902---记录
暂行处理方法:
arm内部全局变量rtc_time 保存rtc的时间,内部定时器产生毫秒中断,并进行计数,当大于1000ms时,秒
加;在初始化时就开启B码或秒脉冲中断,当中断产生时进行清毫秒,对时。每过11分钟,读一次rtc或者单片机,进行内部时间校准。因此内部时间建立完毕,应用层read不牵扯硬件操作,应用层写,直接更改rtc;
这种处理方法存在较多的问题,共享数据未进行互斥访问 ;例如对rtc_time数据结构访问;
在毫秒定时器中断服务程序和秒脉冲中断服务程序现在采用互相禁止对方中断,来消除中断嵌套时共同写共享数据。在进程间的访问准备使用互斥信号量来实现互斥访问。
阅读(1041) | 评论(0) | 转发(0) |