根据bsp_howto手册,时钟驱动的框架主要在 c/src/lib/libbsp/shared/Clockdrv_shell.h 文件中实现

时钟初始化

时钟驱动初始化函数为 Clock_initialize(),这个函数在哪里被调用了呢?

cpukit/include/rtems/clockdrv.h 中定义了 CLOCK_DRIVER_TABLE_ENTRY

#define CLOCK_DRIVER_TABLE_ENTRY \
{ Clock_initialize, NULL, NULL, NULL, NULL, NULL }

然后将 CLOCK_DRIVER_TABLE_ENTRY 放到了IO驱动列表中,在初始化的时候应该就会被调用了。

Clock_initialize() 函数定义在 c/src/lib/libbsp/shared/Clockdrv_shell.h 中,调用了BSP提供的2个函数:
Clock_driver_support_install_isr() => 安装中断处理函数 Clock_isr
Clock_driver_support_initialize_hardware() => 初始化硬件
 
再看Clock_isr(),在中断处理的结束位置调用了 Clock_driver_support_at_tick() ,这个函数可以用来通知硬件中断响应已经完成。
c_user手册中说明的 Clock_isr() 应该调用的 rtems_clock_tick() 函数,这是在 Clock_isr()=>Clock_driver_timecounter_tick()中完成的, 不过,现在调用更新版本的rtems_timecounter_tick(),更现代的时钟驱动需要一个精准的时钟,每个tick中断时, 去读这个精准的时钟,这样就可以提高定时的精度了。
 
Clock_exit() 函数中调用的 Clock_driver_support_shutdown_hardware() 也是BSP可以提供的函数,用于停止时钟运行。

beagle

再看beagle BSP的代码,在 c/src/lib/libbsp/arm/beagle/Clock.c 中,直接到结束位置看就行了

#define Clock_driver_support_at_tick() beagle_clock_at_tick()
#define Clock_driver_support_initialize_hardware() beagle_clock_initialize()
#define Clock_driver_support_install_isr(isr, old_isr) \
do { \
beagle_clock_handler_install(isr); \
old_isr = NULL; \
} while () #define Clock_driver_support_shutdown_hardware() beagle_clock_cleanup() /* Include shared source clock driver code */
#include "../../shared/clockdrv_shell.h"

beagle_clock_initialize() 中使用了两个时钟,一个不停的跑,用作精准时钟(以最高频率运行),另一个仅用于产生tick中断。注意beagle_clock_initialize()函数中调用了rtems_configuration_get_microseconds_per_tick(),这个是从配置表中获取,由应用程序编写人员通过宏定义配置tick时间。

rtems 4.11 时钟驱动(arm, beagle)的更多相关文章

  1. rtems 4.11 IRQ (arm,beagle)

    arm IRQ入口在 cpukit/score/arm/arm_exec_interrupt.S 中,其中BSP最关心就是 bl bsp_interrupt_dispatch 这句,看看beagle ...

  2. rtems 4.11 RTC驱动 (arm, beagle)

    RTC驱动的框架在 c/src/lib/libbsp/shared/tod.c 中,大部分功能都已经实现了,入口函数是 rtc_initialize(),BSP要实现的东西非常少. beagle的实现 ...

  3. rtems 4.11 console驱动 (arm, beagle)

    console驱动框架主要文件是 c/src/lib/libbsp/shared/console.c,驱动的入口是 console_initialize()主要作用是初始化BSP提供的全局变量 Con ...

  4. rtems 4.11 启动流程(arm, beagle)

    请参照官方的 bsp_howto 文档,对arm来说,首先执行的文件是start.S start.S c/src/lib/libbsp/arm/shared/start/start.S 1.从 _st ...

  5. RTC实时时钟驱动

    RTC(Real-Time Clock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去. RTC通过STRB/LDRB这两个ARM指令向CP ...

  6. rtems 4.11 部分m4文件分析

    本来想把configure.ac和各种m4文件分析明白,发现有点困难,不过好在也能理解一些. 基本教程 首先要明白m4,参见这个教程,写得不错,不论怎么样m4替换来替换去的,还真是不那么容易懂,好在我 ...

  7. rtems 4.11 工具链

    4年前,曾经把rtems4.10移植到atmel 9263上,要不是当时移植的git仓库还在的话,真是不相信自己居然还干过这事.所以这次再捡起的时候,要记录一下.还是从编译器开始. 首先打开 http ...

  8. S3C2440上RTC时钟驱动开发实例讲解(转载)

    嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 共享资源,欢迎转载:http:/ ...

  9. X230 安装 EI Capitan 10.11.5 驱动篇

    /* 键盘又换回了 美蓓亚键盘 缩写nmb    虽然比群光软 但是手感真的出色,貌似x宝没有这个代工厂的键盘(全新,非拆机,而且是标准us阵列,背光版) 有人肯定会问,博主这么纠结键盘干嘛?     ...

随机推荐

  1. 【BZOJ1413】取石子游戏(博弈,区间DP)

    题意:在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中 ...

  2. 【转】C#获取客户端及服务器端主机信息及其获取IP地址

    原文发布时间为:2009-10-28 -- 来源于本人的百度文章 [由搬家工具导入] 小结: 1、REMOTE_ADDR 不可被修改,但是可能会获得代理服务器的IP,而不是实际客户端的IP。 2、通过 ...

  3. linux mmap 详解【转】

    转自:http://blog.chinaunix.net/uid-20321537-id-3483405.html 一.前言mmap的具体实现以前在学习内核时学习过,但是对于其中的很多函数是一知半解的 ...

  4. 安装python 2.7

    安装包下载地址 windows:https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi linux: https://www. ...

  5. Python学习杂记_10_三元运算符

    常用三元运算符来简化分支和循环的代码: 分支简化: a = 1b = 2c = a if a > 1 else bprint(c) # 以上几行等同于 a = 1b = 2if a >1: ...

  6. LeetCode OJ-- Valid Sudoku

    https://oj.leetcode.com/problems/valid-sudoku/ 给出数独的一部分来,验证给出的这一部分是否为 valid 行上无重复的,且是从 ‘1’ 到‘9’ 列上无重 ...

  7. 如何配置tomcat环境变量

    首先下载tomcat,并且解压到目录: 注意:2,3步的变量值要到下图这一步 即,bin的上一级目录不包含bin 1.第一步鼠标右键计算机->属性->高级系统设置,进去之后,点击环境变量, ...

  8. UITextView只能显示两行问题

    需求:UITextView只能显示两行 UITextView * textView = [[UITextView alloc]init]; textView.frame = CGRectMake(20 ...

  9. Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)

    在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...

  10. centos7.3 开放端口 防火墙端口

    1. 查看已打开的端口 # netstat -anp 2. 查看想开的端口是否已开 # firewall-cmd --query-port=666/tcp 若此提示 FirewallD is not ...