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



我在C和汇编中编写一个先发制的内核。我一直在寻找并设置计时器在坑和图片中中断,但我完全无法找到答案。

我们已经启动了8254芯片,以在模式2中计数计数器0。之后,我们在图片上启用IR0,并按预期工作。

但是,在某些条件下,我们想通过将其喂养一个新值来改变坑射击的时间。或者只是重新启动柜台中标。

芯片的英特尔手册在门上有一些细节,并使用它通过在门上获得上升的边缘来重新启动计数器。

手册还说,如果我们给计数器一个新值,除非当前计数序列完成后,否则不会重置计数器,除非触发(登机上的上升边缘)在计数结束之前发生。p>手册还说,将新的CW发送到芯片将重置柜台,但是我不认为这是重新启动或更改计数器的最佳方法。

所以问题是,这将如何在C或组件中完成?(只要我们需要,我们就会获得完整的写入访问权限)。

不要没有解决问题,而且我有点答案,我会自己回答。

据我了解,芯片有3个计数器,但只有2个计数器(我们开始计数为0)已连接登机销(并且这是与扬声器连接的)。结果计数器0是真正的计时器计数器,门上没有连接,这意味着我们在向其发送新值后不会引起扳机。

这意味着向其发送一个值,然后在不发送新的ICW的情况下将其重新启动之前,然后将其重新启动。

以防万一我们想从8259芯片引起的中断时重置计时器,而该芯片在处理该中断的末尾连接到8254在实际中断期间运行)我们最好将模式更改为模式0,该模式不会在终端计数上重新启动计时器,然后每次我们要结束和结束时都需要使用它的时间来重新启动它中断。

相关内容

最新更新