S3C2440 rtc 平台设备驱动 卸载问题 oops

发布者:Haifeeng最新更新时间:2024-06-13 来源: elecfans关键字:S3C2440  rtc  oops 手机看文章 扫描二维码
随时随地手机看文章

(1)rtc平台设备驱动源码如下,gzliu_2440_rtc.c:

相关的函数及结构体参见:http://www.linuxidc.com/Linux/2011-08/41676p2.htm

  1. #include    

  2. #include    

  3. #include    

  4. #include    

  5. #include    

  6. #include    

  7. #include    

  8. #include    

  9. #include    

  10. #include    

  11. #include    

  12. #include    

  13. #include    

  14. #include    

  15. #include    

  16. #include    

  17. // 包含RTC_AF的声明   

  18. #include    

  19.   

  20. #undef S3C24XX_VA_RTC   

  21. #define S3C24XX_VA_RTC s3c2440_rtc_base   

  22.   

  23. static struct resource *s3c2440_rtc_mem = NULL;  

  24.   

  25. static void __iomem *s3c2440_rtc_base = NULL;  

  26. static int s3c2440_rtc_alarm_irq = NO_IRQ;  

  27. static int s3c2440_rtc_tick_irq  = NO_IRQ;  

  28. static int s3c2440_rtc_freq    = 1;                     // rtc tick中断频率   

  29.   

  30. static DEFINE_SPINLOCK(s3c2440_rtc_pie_lock);  

  31.   

  32. static int s3c2440_rtc_proc(char *buf)  

  33. {  

  34.     unsigned int rtcalm = readb(S3C2410_RTCALM);  

  35.     unsigned int ticnt = readb (S3C2410_TICNT);  

  36.     char *p = buf;  

  37. printk('@@@@@@@@@@@@@@@@@@@@@@ngzliu s3c2440_rtc_proc()n@@@@@@@@@@@@@@@@@@@@@@@@n');  

  38.   

  39.     p += sprintf(p, 'alarm_IRQt: %sn', (rtcalm & S3C2410_RTCALM_ALMEN) ? 'yes' : 'no' );  

  40.     p += sprintf(p, 'periodic_IRQt: %sn', (ticnt & S3C2410_TICNT_ENABLE) ? 'yes' : 'no' );  

  41.     p += sprintf(p, 'periodic_freqt: %dn', s3c2440_rtc_freq);  

  42.   

  43.     return p - buf;  

  44. }  

  45.   

  46. static int s3c2440_rtc_getalarm(struct rtc_wkalrm *alrm)  

  47. {  

  48.     struct rtc_time *alm_tm = &alrm->time;  

  49.     unsigned int alm_en;  

  50. printk('@@@@@@@@@@@@@@@@@@@@@@ngzliu s3c2440_rtc_getalarm()n@@@@@@@@@@@@@@@@@@@@@@@@n');  

  51.   

  52.     alm_tm->tm_sec  = readb(S3C2410_ALMSEC);  

  53.     alm_tm->tm_min  = readb(S3C2410_ALMMIN);  

  54.     alm_tm->tm_hour = readb(S3C2410_ALMHOUR);  

  55.     alm_tm->tm_mon  = readb(S3C2410_ALMMON);  

  56.     alm_tm->tm_mday = readb(S3C2410_ALMDATE);  

  57.     alm_tm->tm_year = readb(S3C2410_ALMYEAR);  

  58.   

  59.     alm_en = readb(S3C2410_RTCALM);  

  60.   

  61.     pr_debug('read alarm %02x %02x.%02x.%02x %02x/%02x/%02xn', alm_en, alm_tm->tm_year, alm_tm->tm_mon, alm_tm->tm_mday, alm_tm->tm_hour, alm_tm->tm_min, alm_tm->tm_sec);  

  62.   

  63.   

  64.     /* decode the alarm enable field */  

  65.   

  66.     if (alm_en & S3C2410_RTCALM_SECEN)  

  67.     {  

  68.         BCD_TO_BIN(alm_tm->tm_sec);  

  69.     }  

  70.     else  

  71.     {  

  72.         alm_tm->tm_sec = 0xff;  

  73.     }  

  74.   

  75.     if (alm_en & S3C2410_RTCALM_MINEN)  

  76.     {  

  77.         BCD_TO_BIN(alm_tm->tm_min);  

  78.     }  

  79.     else  

  80.     {  

  81.         alm_tm->tm_min = 0xff;  

  82.     }  

  83.   

  84.     if (alm_en & S3C2410_RTCALM_HOUREN)  

  85.     {  

  86.         BCD_TO_BIN(alm_tm->tm_hour);  

  87.     }  

  88.     else  

  89.     {  

  90.         alm_tm->tm_hour = 0xff;  

  91.     }  

  92.   

  93.     if (alm_en & S3C2410_RTCALM_DAYEN)  

  94.     {  

  95.         BCD_TO_BIN(alm_tm->tm_mday);  

  96.     }  

  97.     else  

  98.     {  

  99.         alm_tm->tm_mday = 0xff;  

  100.     }  

  101.   

  102.     if (alm_en & S3C2410_RTCALM_MONEN)  

  103.     {  

  104.         BCD_TO_BIN(alm_tm->tm_mon);  

  105.         alm_tm->tm_mon -= 1;  

  106.     }  

  107.     else  

  108.     {  

  109.         alm_tm->tm_mon = 0xff;  

  110.     }  

  111.   

  112.     if (alm_en & S3C2410_RTCALM_YEAREN)  

  113.     {  

  114.         BCD_TO_BIN(alm_tm->tm_year);  

  115.     }  

  116.     else  

  117.     {  

  118.         alm_tm->tm_year = 0xffff;  

  119.     }  

  120.   

  121.     /* todo - set alrm->enabled ? */  

  122.   

  123.     return 0;  

  124.       

  125. }/* s3c2440_rtc_getalarm(struct rtc_wkalrm *alrm) */  

  126.   

  127. static int s3c2440_rtc_setalarm(struct rtc_wkalrm *alrm)  

  128. {  

  129.     struct rtc_time *tm = &alrm->time;  

  130.     unsigned int alrm_en;  

  131. printk('@@@@@@@@@@@@@@@@@@@@@@ngzliu s3c2440_rtc_setalarm()n@@@@@@@@@@@@@@@@@@@@@@@@n');  

  132.   

  133.     pr_debug('s3c2410_rtc_setalarm: %d, %02x/%02x/%02x %02x.%02x.%02xn', alrm->enabled, tm->tm_mday & 0xff, tm->tm_mon & 0xff, tm->tm_year & 0xff, tm->tm_hour & 0xff, tm->tm_min & 0xff, tm->tm_sec);  

  134.   

  135.     if (alrm->enabled || 1)  

  136.     {  

  137.         alrm_en = readb(S3C2410_RTCALM) & S3C2410_RTCALM_ALMEN;  

  138.         writeb(0x00, S3C2410_RTCALM);  

  139.   

  140.         if (tm->tm_sec < 60 && tm->tm_sec >= 0)  

  141.         {  

  142.             alrm_en |= S3C2410_RTCALM_SECEN;  

  143.             writeb(BIN2BCD(tm->tm_sec), S3C2410_ALMSEC);  

  144.         }  

  145.   

  146.         if (tm->tm_min < 60 && tm->tm_min >= 0)  

  147.         {  

  148.             alrm_en |= S3C2410_RTCALM_MINEN;  

  149.             writeb(BIN2BCD(tm->tm_min), S3C2410_ALMMIN);  

  150.         }  

  151.   

  152.         if (tm->tm_hour < 24 && tm->tm_hour >= 0)  

  153.         {  

[1] [2] [3] [4] [5] [6] [7] [8] [9]
关键字:S3C2440  rtc  oops 引用地址:S3C2440 rtc 平台设备驱动 卸载问题 oops

上一篇:S3C2440 触摸屏驱动(针对Android版)
下一篇:S3C2440 Linux 触摸屏驱动

推荐阅读最新更新时间:2024-11-05 21:25

【JZ2440】【记录】【如何学习一个新的芯片:S3C2440
1、基础介绍 : 虽然以前学过51和430单片机,但是,总结的少,也很盲目,随便看看书和视频后就开始读代码,写代码。虽然最开始读51的例程代码确实让我对单片机编程有了一个入门级的理解,作用还是很大。但是,毕竟是C语言写的,后续也没有继续的学习芯片的资源,所以对51、430内部结构、资源、操作方式完全不了解,只会对已经看过的程序做最基本的照葫芦画瓢式编程。现在学习S3C2440,用JZ2440开发板,希望把这些东西都梳理一遍。 2、对嵌入式系统性的认识: 做了很长时间地准备工作了,总算把一些基本的东西弄明白:嵌入式是什么、ARM指令集架构、ARM家族、S3C2440芯片和ARM920T指令集架构的区别、操作系统的结构(boot
[单片机]
基于S3C2440的车载跟踪监控系统研究与实现
0 引言     随着交通系统的不断发展和完善,定位导航系统的应用范围和领域也越来越广泛,基于GPS,GPRS/GSM,GIS等的车辆跟踪与监控系统正在受到人们越来越多的青睐,显示出强大的发展潜力。GPS(Global Position System,全球定位系统)是美国从20世纪70年代开始的研制。19 93年正式投入运行,它能够全球、全天候、连续实时地为用户提供高精度的三维坐标、三维速度和时间信息。GPS的出现从根本上改变了人们获取空间信息的方式,特别是在交通工具导航、监控、跟踪等领域具有很大的应用价值和发展潜力。     本文在ARM9的硬件平台基础上,利用嵌入式Linux操作系统强大的管理平台的内核与外设的功能,开发了具有导
[嵌入式]
S3C2440硬件IIC详解
S3C2440A RISC微处理器可以支持一个多主控IIC 总线串行接口。一条专用串行数据线(SDA)和一条专用串行时钟线(SCL)传递连接到IIC总线的总线主控和外设之间的信息。SDA和SCL线都为双向的 图上可见,IIC时钟从PCLK产生,并同时受到IICSTAT控制,IIC数据实际上是由一个移位寄存器送出,当IIC处于从机状态的时候,有一个地址比较器来检测IIC总线,使用IIC总线主要有以下寄存器需要设置 1. 设置相应的端口复用为IIC端口,启用IIC时钟,连接IIC的中断,自然还需要设置IIC相应的中断,这些在上一节已经描述过,现在不赘述 2. 设置控制寄存器 设置应答使能IIC时钟,IIC发送时钟,IIC中断等
[单片机]
<font color='red'>S3C2440</font>硬件IIC详解
S3C2440片上总线(AMBA)的一点理解
最近一直在深入的了解S3c2440的AMBA总线,进展缓慢,大部分时间花在了论文开题上,只能挤出一点时间来搞嵌入式。用了一年的钥匙串坏了,挂钩断了,买了一个新的钥匙串。下午在换钥匙串时,一些小钥匙由于孔太小而钥匙环太粗,无法挂上去;指甲剪也也因为孔太小挂不上去;较大的钥匙倒是没有问题。只把把这些小钥匙和指甲钳挂在旧的钥匙环上,然后旧的钥匙环挂在新的钥匙环上。 说了这么多,这和S3C2440的的AMBA总线有什么关系啊??? 先简单介绍一下AMBA总线规范。ARM公司定义了AMBA(Advanced Microcontroller Bus Architecture)总线规范,它是一组针对基于ARM核的、片上系
[单片机]
对<font color='red'>S3C2440</font>片上总线(AMBA)的一点理解
S3C2440之LCD驱动代码模板(RealView MDK)
好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 LCD控制初始化代码。使用友善MINI2440开发板,LCD为320*240,开发环境为RealView MDK 4.22。 该源码结构简单明了,原始工程下载地址: 点击打开链接 寄存器宏定义: #define rGPCCON (*(volatile unsigned long *)0x56000020) #define rGPCUP (*(volatile unsigned long *)0x56000028) #define rGPDCON (*(volatile unsigned long *)0x56000030)
[单片机]
S3C2440的UART详解
1、UART原理简介 在介绍2440的UART控制器之前,我们首先来了解一下UART的原理 UART:Universal Asynchronous Receiver/Transmitter(通用异步收发送器),用来传输串行数据,发送数据时,CPU将并行数据写入UART,UART按照一定格式在TxD线上串行发出;接收数据时,UART检测到RxD线上的信号,将串行收集放到缓冲区中,CPU即可读取UART获得的这些数据。 UART最精简的连线形式只有3根线,TXD用于发送,RXD用于接收,GND用于提供参考电平。UART之间以帧作为数据传输单位,帧由具有完整意义的若干位组成,它包含开始位、数据位、校验位和停止位。发送数据之前,互相通信
[单片机]
<font color='red'>S3C2440</font>的UART详解
纠结的STM32 RTC时钟源LSE
一开始,所有实验都是在神舟板上去完成,根本就没有发现RTC的问题。直到我们自己画板来后调试时,才发现STM32 RTC的外部时钟源存在问题。 这也算是STM32的一个鸡肋,对于LSE外部晶振太过于苛刻,手册上要求使用6pf,这个规格的晶振市场上太少,鱼龙混杂,中招的高手菜鸟不在少数。我们自己的板也是如此,几经波折,反反复复尝试使用不同的规格的晶振,替换外部的电容,电阻都没有能让这个32.768K的LSE起振。但是又需要有RTC来提供时间,考虑的方法主要有2种,第一采用外部RTC时钟芯片,如DS1302。第二是使用内部其它的时钟源来提供RTC时钟。毫无疑问,目前板已经制好,添加时钟芯片肯定造成板上布局更改,还得重新打板,这里采用
[单片机]
纠结的STM32 <font color='red'>RTC</font>时钟源LSE
S3C2440-RTC
实时时钟(RTC)的主要功能是在系统掉电的情况下,利用后备电源使时钟继续运行,从而不会丢失时间信息。 s3c2440内部集成了RTC模块,而且用起来也十分简单。其内部的寄存器BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON和BCDYEAR分别存储了当前的秒,分,小时,星期,日,月和年,表示时间的数值都是BCD码。这些寄存器的内容可读可写,并且只有在寄存器RTCCON的第0位为1时才能进行读写操作。为了防止误操作,当不进行读写时,要把该位清零。当读取这些寄存器时,能够获知当前的时间;当写入这些寄存器时,能够改变当前的时间。另外需要注意的是,因为有所谓的 一秒误差 ,因此当读取到的秒为0时,需要
[单片机]
S3C2440-<font color='red'>RTC</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved