处理辅助时钟中断

时间:2014-08-20 12:04:53

标签: c vxworks

我从嵌入式应用程序的大代码库中获得以下代码。我正在尝试理解代码并提出以下问题。

old_rate = sysAuxClkRateGet();
sysAuxClkRateSet(50);

sysAuxClkConnect ((FUNCPTR) scanDispatcher, 0);

/* Enable dispatcher */

sysAuxClkEnable ();

我的问题是

  1. 是否为每个滴答或50个滴答后调用scanDispatcher?

  2. 是sysAuxClkRateSet(50);意味着我们每秒有50个滴答?我的理解是对的。

1 个答案:

答案 0 :(得分:1)

辅助时钟ISR每次调用它时都会调用scanDispatcher(带参数0)来处理辅助时钟中断。

sysAuxClkRateSet(50)定义辅助时钟中断的频率。由于辅助时钟驱动程序ISR不执行除管理计时器设备和调用scanDispatcher例程之外的其他操作,因此您可以更改频率。

您可以使用的频率值有两种限制:

  1. 辅助时钟驱动程序(您正在使用的BSP的一部分)定义了驱动程序能够管理的绝对最小值和最大值
  2. 实际最大限制由scanDispatcher引入的系统负载及其执行时间定义;记住,无论如何,scanDispatcher是在中断时执行的,所以它的'执行时间应该总是很短。
  3. 最后提醒:辅助时钟不是VxWorks中的强制设备:大多数BSP支持辅助时钟设备,但(原则上)您可以找到不支持它的BSP。