×
单片机 > 单片机程序设计 > 详情

AT91RM9200+pcf8563在linux2.6.20下的调试心得

发布时间:2020-08-25 发布时间:
|

这两天调试了AT91RM9200+pcf8563在linux2.6.20下的驱动,记录一下我的调试过程以及调试心得,呵呵


在linux2.6.20/drivers/rtc目录下面已经有了pcf8563的驱动程序,通过make menuconfig配置一下就可以了。


问题出来了“This chip cannot be reliably autodetected”这是源码中的注释,不能自动检测,实际上确实如此,怎么解决这个问题呢?google.....


搜索很久终于看到有个牛人的解决方法:


static unsigned short normal_i2c[] = { I2C_CLIENT_END };

修改为

static unsigned short normal_i2c[] = { 0x51,I2C_CLIENT_END };

增加pcf8563的设备地址,编译运行,内核终于找到pcf8563了,:)


你可以顺便看一下其他rtc的驱动,确实这个地方有个设备地址的,不知道为什么当时pcf8563不加这个地址,还写了那么一个注释,奇怪啊。。暂时不关心。继续。。。。


接下来就是系统时钟和硬件时钟同步的问题了,date用来设置系统时钟,hwclock用来同步系统时钟和硬件时钟,比如:


>date 2008.5.24-13:16:25    设置系统时间

>hwclock -w         把设置的时间,保存到rtc中


刚开始我的系统中没有hwclock命令,可以重新编译一下busybox,重新生成。

 

还有一个小问题,hwclock所操作的设备名是RTC,而pcf8563自动挂载的是rtc0。如果不解决这个问题,hwclock是没办法读写pcf8563的。


这有两个解决方法:

方法一:修改busybox的源码,把rtc全部修改为rtc0

方法二:>mknod /dev/rtc c 254 0

        >mknod /dev/rtc0 c 254 0


建立两个设备rtc 和 rtc0

 

最后写一个小的测试程序吧,呵呵

 

#include

#include

#include

#include

#include

#include

#include

#include

#include

 

int main(int argc, char **argv)

{

 int ret, fd;

 struct rtc_time rtc_tm;

 

 fd = open("/dev/rtc0", O_RDWR);

 if (fd < 0) {

  printf( "Fail to open PCF8563!n" );

  exit(1);

 }

 

 ret=ioctl(fd, RTC_RD_TIME, &rtc_tm);

 if (ret < 0) {

  printf( "Fail to read_time!n" );

 }

 printf("nnRead PCF8563 time is %d-%d-%d, %02d:%02d:%02d.n",rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);


 close(fd);

 return 0;

}


关键字:AT91RM9200  pcf8563  linux2  6  20  调试心得

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向