2

很多硬件都带有 Tx/Rx 状态 LED,但是如果您的硬件没有并且您想查看数据是否正在传输怎么办?如果您只是将 LED 设置为线的值,它可能会在您看到它之前打开和关闭(<1/100 秒)。

我的问题是,如何编写中断驱动函数来驱动 LED 状态?我在互联网上搜索过,一无所获,我可以使用带模数的计数器,但这似乎很笨重。还有其他想法吗?

PS - 我想在 Arduino 或 Mbed 中使用它,但我怀疑它对哪个问题有影响......

4

2 回答 2

6
void receive_or_transmit_interrupt()
{
     g_traffic = true;
     /* other stuff. */
}

void timer_that_fires_every_100_milliseconds()
{
     if ( led == ON)
     {
          led = OFF;
          g_traffic = false;
     }
     else if ( g_traffic )
     {
          led = ON;
     }
}

如果您不希望计时器在没有流量的情况下始终触发,您可以更改receive_or_transmit_interrupt启用计时器,并且计时器可以在关闭 LED 时自行禁用。

于 2013-02-25T23:30:39.260 回答
1

一种简单的方法是在 Tx/Rx 中断中打开 LED 并启动一个 200 毫秒的计时器(足够长以感知)。然后在定时器 ISR 中关闭 LED。

这样,指示器在最后一次tx/rx 活动后 200 毫秒熄灭。如果活动持续,指示灯将保持亮起。

如果 tx/rx 突发是间歇性的,间隔大于 200 毫秒,则指示灯将闪烁。因此,关闭、开启和闪烁的状态提供了数据活动的广泛指示。

于 2013-02-26T11:13:19.970 回答