首页 文章

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

提问于
浏览
1

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

我们已经启动8254芯片在模式2中对计数器0进行计数 . 我们将其设置为每10 ms在PIC上的IR0上发出一个中断 . 之后,我们在PIC上启用IR0,事情按预期工作 .

但是,假设在某些条件下,我们想要通过为它提供一个新值来改变PIT触发的时间 . 或者只是重启计数器midcounting .

芯片的intel手册在门上有一些细节,并通过在门上获得上升沿来重新启动计数器 .

手册还说,如果我们给计数器一个新值,它就不会复位计数器,直到当前计数序列结束后,除非在计数结束之前发生触发(门上的上升沿) .

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

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

1 回答

  • 0

    不要回答一个问题,因为我有点回答,我会自己回答 .

    据我所知,该芯片有3个计数器,但只有计数器2(我们从0开始计数)连接了门引脚(这个连接到扬声器) . 结果,作为实时定时器计数器的计数器0在门上没有连接,这意味着在发送新值之后我们不能在其上引起触发 .

    这意味着在没有发送新ICW的情况下,向定时器启动之前向其发送值然后重新启动它是不可能的 .

    如果我们想要在我们退出8259芯片引起的中断时重置定时器,8254芯片是在处理该中断时结束的(即我们不希望时间在该中断期间运行)实际中断)我们最好将模式更改为模式0,它不会在终端计数上重新启动计时器,然后只需手动重新启动它,我们每次要结束和中断时都要使用它 .

相关问题