2410下rtc驱动分析

S3C2410的RTC驱动分析 <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } H1 { margin-bottom: 0.21cm } H1.western { font-family: "Bitstream Vera Sans", sans-serif; font-size: 1 阅读详情

首先RTC设备是一种片上设备, 用platform_device来表示 该设备(即platform_device的RTC对象)在设备的初始化过程中就已经注册进了系统(可以参考2410下soc上的设备的驱动流程(RTC, watchdog等)), 因此我们在RTC驱动的初始化里把RTC驱动注册到系统后,系统会probe到这个RTC设备,最后调用我们RTC驱动的probe函数.

下面就重点分析2410的RTC驱动.

首先是初始化函数和退出函数:

static void __init s3c2410_rtc_init(void)

{

    printk(banner);

 

     /*

* 这就把这个RTC驱动注册进了系统,同时系统会查找匹配的RTC设备,并调用

* s3c2410_rtcdrv的probe函数.

*/

    return platform_driver_register(&s3c2410_rtcdrv);

}

Static void __exit s3c2410_rtc_exit(void)

{

    /*卸载这个RTC驱动, 之后RTC设备就无法使用了*/

    platform_driver_unregister(&s3c2410_rtcdrv); 

}

static struct platform_driver s3c2410_rtcdrv = {

      .probe    = s3c2410_rtc_probe,

      .remove   = s3c2410_rtc_remove,

      .suspend  = s3c2410_rtc_suspend,

      .resume   = s3c2410_rtc_resume,

      .driver    = {

           .name = “s3c2410-rtc”,  //这个字符串必须和RTC设备的定义一样,系统才会匹配正确.

           .owner = THIS_MODULE,

       },

};

当系统把RTC设备注册到系统后,它就开始查找相应总线上的所有设备, 并与这个驱动比较, 如果系统找到匹配的RTC设备就会调用RTC驱动的s3c2410_rtc_probe函数, 注意RTC设备实在系统初始化时就注册进了系统.

static int s3c2410_rtc_probe(struct platform_device *pdev /*rtc设备*/)

{

    struct resource *res;

       int ret;

 

       pr_debug("%s: probe=%p/n", __FUNCTION__, pdev);

 

       /*

* 获取设备的tick中断资源, 通过查看platform_get_irq可知,实际上通过查找pdev的资源获得的, * 而pdev的资源是在构建platform_device对象的时候就指定好的, 可到Devs.c中查看

*/

       s3c2410_rtc_tickno = platform_get_irq(pdev, 1);

       if (s3c2410_rtc_tickno < 0) {

              dev_err(&pdev->dev, "no irq for rtc tick/n");

              return -ENOENT;

       }

 

       /*

* 获取设备的rtc中断资源, 通过查看platform_get_irq可知,实际上通过查找pdev的资源获得的, * 而pdev的资源是在构建platform_device对象的时候就指定好的, 可到Devs.c中查看

*/

       s3c2410_rtc_alarmno = platform_get_irq(pdev, 0);

       if (s3c2410_rtc_alarmno < 0) {

              dev_err(&pdev->dev, "no irq for alarm/n");

              return -ENOENT;

       }

 

       pr_debug("s3c2410_rtc: tick irq %d, alarm irq %d/n",

               s3c2410_rtc_tickno, s3c2410_rtc_alarmno);

 

       /*

* 获取设备的memory资源, 通过查看platform_get_irq可知,实际上通过查找pdev的资源获得的, * 而pdev的资源是在构建platform_device对象的时候就指定好的, 可到Devs.c中查看

*/

       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

       if (res == NULL) {

              dev_err(&pdev->dev, "failed to get memory region resource/n");

              return -ENOENT;

       }

   

    /*

     * 查看指定的memory是否可以使用.

     */

       s3c2410_rtc_mem = request_mem_region(res->start, res->end-res->start+1,

                                 pdev->name);

 

       if (s3c2410_rtc_mem == NULL) {

              dev_err(&pdev->dev, "failed to reserve memory region/n");

              ret = -ENOENT;

              goto exit_err;

       }

   

    /*

* 重映射指定的内存区域,即把原来的物理地址映射到相应的虚拟地址, 这样以后就可以用这个* 虚拟地址直接访问原来的物理地址了, 这里是映射RTC的寄存器地址区间.

*/

       s3c2410_rtc_base = ioremap(res->start, res->end - res->start + 1);

       if (s3c2410_rtc_base == NULL) {

              dev_err(&pdev->dev, "failed ioremap()/n");

              ret = -EINVAL;

              goto exit_err;

       }

 

       s3c2410_rtc_mem = res;

       pr_debug("s3c2410_rtc_base=%p/n", s3c2410_rtc_base);

 

      pr_debug("s3c2410_rtc: RTCCON=%02x/n", readb(S3C2410_RTCCON));

 

       /*正确初始化RTC设备 */

       s3c2410_rtc_enable(pdev, 1);

 

      pr_debug("s3c2410_rtc: RTCCON=%02x/n", readb(S3C2410_RTCCON));

   

    /*设置好设备的频率*/

       s3c2410_rtc_setfreq(s3c2410_rtc_freq);

 

       /* 注册RTC设备的操作函数, 以后对该设备的访问将调用这些操作函数*/

       register_rtc(&s3c2410_rtcops);

       return 0;

 

 exit_err:

       dev_err(&pdev->dev, "error %d during initialisation/n", ret);

 

       return ret;

}

 

状态估计【卡尔曼滤波kalman】UKF、EKF、粒子滤波PF学习与研究(Matlab代码实现) 内容概要:本文围绕非线性状态估计中的三种经典滤波算法——无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)和粒子滤波(PF)展开系统性学习与研究,重点在于通过Matlab编程实现这些算法的核心流程,并将其应用于实际系统的状态估计问题中。文档不仅详细阐述了各算法的数学原理、适用条件与性能差异,还提供了完整的仿真代码与案例分析,帮助读者深入理解其在非线性、非高斯环境下的表现特性。同时,资源拓展至EKF与神经网络融合训练、多源数据融合等高级应用场景,展现了其在智能控制、无人机导航、电力系统状态估计、目标跟踪等领域的广泛应用价值。; 适合人群:具备一定信号处理、控制理论或状态估计基础的研究生、科研人员及工程技术人员,尤其适用于从事自动化、机器人、导航、电力电子与智能系统等相关方向的研究与开发工作者;; 使用场景及目标:① 掌握UKF、EKF与PF在非线性系统中的建模思路与Matlab实现方法,理解其优缺点与适用边界;② 提升科研仿真能力,能够独立构建状态估计模型并进行算法对比验证;③ 将所学方法应用于如电池SOC估算、无人机姿态估计、传感器融合、故障诊断等实际工程问题中;; 阅读建议:建议结合Matlab动手实践,逐行解读并调试所提供的代码,深入理解算法实现细节;同时可延伸学习文中提及的数据融合、神经网络与滤波器结合等进阶主题,以构建完整的状态估计技术知识体系。 立即下载

相关推荐

三、使用HM进行简单的视频隐写demo

三、使用HM进行简单的视频隐写前言一、实验环境二、实验思路三、实验过程3.1 提取原始载体3.2 使用LSB隐写算法进行隐写3.3 放回含密载体3.4 提取含密载体3.5 使用LSB提取算法进行比对四、碰到的问题以及解决思路4.1 块的结构体发生变化4.1.1 产生的原因4.1.2 解决方法4.2 一个有趣的现象4.2.1 产生的原因4.3 视频产生较大失真4.3.1 产生的原因4.3.2 解决方法五、总结 前言 在前两篇博客中介绍了基于HEVC/H.265视频编解码器的视频隐写的基本思路,本文将详细记录

杨酬勤的博客 1792

s3c2410 RTC驱动框架linux内核源码分析

 懒了很长时间了,以导致最近变本加厉,现在得到了惩罚,这个月快要结卡时竟然欠了13.5个小时的工作时间,mY god...连续3天了,晚上不得不在公司加班补时间,该看的电影都看完了,在公司也不能上网打游戏虐人,实在无聊中就将原来的一些东西整理了一下,自己是个记性不好的人,隔断时间整理自己,同时也希望可以方便他人。-----------------------------------------

虫子专栏 3675

facebook协议

支持同时登录多个Facebook账号,按照关键词采集小组地址,群发小组,批量添加推荐人,群发推 荐人消息,采集个人Facebook用户,群发用户私信,群发主页评论。通过客服台管理功能,和粉丝互动聊天,通过话术快捷回复,自动翻译聊天记录。通过FaceBook小组采集小组成员id,或者通过FaceBook个人主页,采集主页上粉丝批量操作已FaceBook账号添加推荐热,可以指定添加某个国家的推荐人,可以设置每个账号添加推荐人个数去重模式:所有的FaceBook账号不添加重复的推荐人。

2503_90751938的博客 957

RTC实时时钟驱动

linux中的RTC驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c.c 30.Linux-RTC驱动分析及使用 - 诺谦 - 博客园 1.进入./drivers/rtc/rtc-s3c.c 还是首先进入入口函数,如下图所示: 这里注册了一个“s3c2410-rtc”名称的平台设备驱动 而“s3c2410-rtc”的平台设备,在./arch/arm/plat-s3c24xx/dev.c里定义了,但在这没有注

赶紧十八丶 1692

LPDDR5时序精调:深入解析Read Gate Training的两种模式

本文深入解析了LPDDR5内存中关键的Read Gate Training技术,详细对比了RDQS Toggle Mode(翻转模式)与Enhanced RDQS Mode(增强模式)的工作原理、时序参数及适用场景。文章阐述了在高速数据传输下精准校准时序的必要性,并提供了两种模式的实战选型指南与系统级调试思路,帮助工程师优化内存性能与稳定性。

weixin_29219189的博客 368

移植Google Gemini Nano到RK3588 NPU,实现高效边缘推理

在嵌入式 AI 开发中,大家常常会遇到模型在硬件平台上运行时出现性能瓶颈的问题,比如推理速度慢、功耗过高,这严重影响了应用的实时性和稳定性 ,导致性能瓶颈,无法满足如智能安防、工业检测等场景的实时性需求。为了解决这些问题,我们可以将轻量模型移植到具有强大算力的硬件平台上。本文将手把手教你将 Google Gemini Nano(或类似轻量模型)移植到 RK3588 NPU,充分发挥 RK3588 NPU 的 6Tops 算力,实现高效的模型推理,提升嵌入式系统的 AI 处理能力。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 295

Linux驱动修炼之道-RTC子系统框架与源码分析

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处 http://blog.youkuaiyun.com/woshixingaaa/archive/2011/05/21/6436215.aspx RTC(实时时钟)是一种典型的字符设备,作为一种字符设备驱动,RTC需要有file_operations中接口函数的实现,如open(),release(),read(),...

tomhibolu 128

【Matlab】如何使用Simulink进行电池建模和SOC预估

“通过Simulink电池建模进行SOC预估,其实挺容易!” 1 声明 本文只描述一般性电池建模方法,文中出现的电池相关数据来自一些论文或者外文文献,对数据的真实性不做任何保证。 本文参考了不少国内高校的硕士论文和外文文献,所以本篇文章只作为学术性交流,未经...

wanff1204的博客 2万+

Linux下的RTC子系统

转自:http://blog.youkuaiyun.com/weiqing1981127/article/details/8484268 实时时钟的作用主要是为操作系统提供一个可靠的时间,并在断电下,RTC时钟也可以通过电池供电一直运行下去。实时时钟驱动也有一个子系统,叫做RTC子系统,其源代码目录是/driver/rtc/,在这个目录下有一个rtc核心代码区,主要是Rtc-dev.c、Rt...

weixin_30750335的博客 80

学 Simulink—— 基于高频方波电压注入的表贴式永磁电机无感控制仿真

本文手把手教授基于Simulink的高频方波电压注入法实现表贴式永磁同步电机(SPMSM)无传感器控制。针对表贴式电机微弱凸极特性(Lq/Ld≈1.05-1.15),详解方波注入相比正弦注入的优势:通过5kHz方波(PWM频率半值)集中能量提升信噪比,并采用相邻周期电流直接相减的零延迟分离技术。系统架构包含高频注入器、无滤波器信号分离模块、锁相环观测器和磁饱和极性辨识等关键环节,提供参数设置经验(如注入幅值10-15%Vdc)和典型性能指标(位置误差<0.2rad)。特别强调工程实现要点:PWM同步时

xiaoheshang_123的博客 167

linux 设备驱动编程 i o,Linux设备驱动访问外设I/O端口

Linux设备驱动究竟怎样访问外设的I/O端口(寄存器)几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:(1)I/O映射方式(I/O-mapped)典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU...

weixin_28756005的博客 359

【第1章>第9节】基于FPGA的图像开运算处理算法的Verilog实现

本文介绍了基于FPGA的开运算图像处理实现方法。主要内容包括:1)输入图像二值化处理,通过阈值将灰度图像转换为二值图像;2)数据缓存与窗口提取,使用寄存器数组缓存5行图像数据并构建5×5处理窗口;3)腐蚀运算逻辑,判断窗口内是否全为白色像素;4)膨胀运算逻辑,检测窗口内是否存在白色像素。最后给出了Verilog实现方案,通过级联腐蚀和膨胀模块完成开运算处理。该方法可用于FPGA图像处理算法开发。

MATLAB,verilog,python,opencv,tensorflow,caffe,C,C++ 314

2410,2440RTC无法保存时间

 WINCE时间如此保存WINCE的时间无法保存,是由于冷驱动,WINCE会初始化RTC,把下面的代码注释掉就可以了!case IOCTL_HAL_INIT_RTC: // The kernel has detected a cold-boot. We probably need to reset our Real Time Clock if( nInBufSi

1056

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Linux内核中ioremap映射的透彻理解

Linux内核中ioremap映射的透彻理解 分类: Linux/Kernel2014-03-04 16:01 5389人阅读 评论(1) 收藏 举报 linux内核存储内存数据 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:

raidtest的专栏 273

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: TCPMP源代码分析
下一篇: rtc驱动
vrix
博客等级 码龄24年 673粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值