gpt4 book ai didi

c - 在可编程间隔计时器 (8254) 到期之前重新启动计数器

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:51 24 4
gpt4 key购买 nike

我正在用 C 语言和汇编编写抢占式内核。我一直在通过 PIT 和 PIC 查看并设置定时器中断,但有一件事我完全找不到答案。

我们已将 8254 芯片初始化为在模式 2 中对计数器 0 计数。我们将其设置为每 10 毫秒在 PIC 上的 IR0 上触发一次中断。之后,我们启用 PIC 上的 IR0,一切都按预期工作。

然而,假设在某些情况下,我们希望通过为 PIT 提供一个新值来改变它触发的时间。或者只是重新启动计数器 midcounting。

芯片的英特尔手册有一些关于门的详细信息,并使用它通过在门上获得上升沿来重新启动计数器。

手册还说,如果我们给计数器一个新值,它不会在当前计数序列完成之前重置计数器,除非在计数结束之前发生触发(门的上升沿)。

手册还说向芯片发送新的 CW 会重置计数器,但我认为这不是重启或更改计数器的最佳方式。

所以问题是,这将如何在 c 或汇编中完成? (我们可以随时获得完全的写入权限)。

最佳答案

为了不留下未回答的问题,因为我已经有了一些答案,所以我会自己回答。

据我所知,该芯片有 3 个计数器,但只有计数器 2(我们从 0 开始计数)连接了栅极引脚(而这个计数器连接到扬声器)。结果,计数器 0(真正的定时器计数器)在门上没有连接,这意味着我们无法在向它发送新值后触发它。

这意味着如果不向它发送新的 ICW,就不可能向它发送一个值,然后在计时器启动之前根据该值重新启动它。

如果我们想在处理该中断结束时摆脱由 8254 连接到的 8259 芯片引起的中断时重置计时器(即我们不希望时间在实际中断期间运行)我们最好将模式更改为模式 0,它不会在终端计数时重新启动计时器,然后每次我们即将结束时手动重新启动它,并使用我们想要使用的时间打断。

关于c - 在可编程间隔计时器 (8254) 到期之前重新启动计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22303446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com