根据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时间。

最新文章

  1. GROUP BY的扩展
  2. Android WebView的Js对象注入漏洞解决方案
  3. SQL SERVER With语法[转]
  4. 我的第一个Linux C 程序
  5. 5.5---整数A转成整数B(CC150)
  6. ACM Longest Repeated Sequence
  7. javascript模块化应用
  8. TListView Header重绘和高度设置
  9. TextBox 文本框水印文字
  10. http://jingyan.baidu.com/album/03b2f78c4cc0ad5ea337ae7d.html
  11. js中字符串,数字之间转换的常用方法
  12. metaq
  13. http 需要掌握的知识点(一)
  14. 亚洲最佳电影TOP100出炉 你看过几部?
  15. 写一个MyORM--利用反射的方法
  16. OC 数组
  17. mysql备份和还原
  18. Linux平台 Oracle 12cR2 RAC安装Part2:GI配置
  19. Android初级教程三个Dialog对话框小案例
  20. oracle sql语句实现累加、累减、累乘、累除

热门文章

  1. javascript草稿
  2. EOJ Monthly 2018.1 F 最小OR路径
  3. GDB 命令详细解释
  4. Scrapy学习-22-扩展开发
  5. bonds
  6. HDU 1241.Oil Deposits-求连通块DFS or BFS
  7. Educational Codeforces Round 35 A. Nearest Minimums【预处理】
  8. Java命令行的基本编译运行
  9. PHP message: PHP Fatal error: require(): Failed opening required
  10. 【svn】idea上svn 忽略文件不提交