关于读取PC机8253计数器0初始值的问题

StarsunYzL 2009-05-25 07:50:40
PC机里有个可编程的计数器,假设是8253(或许是更高的)

我想读取8253计数器0的计数初始值该怎么读?

我只能读取到当前的计数值,但是计数初始值怎么读取呢?

	WRITE_PORT_UCHAR((PUCHAR)0x43, 0x34);	//写入控制字,计数器0,工作方式2
WRITE_PORT_UCHAR((PUCHAR)0x40, 0xAD); //写LSB
WRITE_PORT_UCHAR((PUCHAR)0x40, 0x2E); //写MSB

WRITE_PORT_UCHAR((PUCHAR)0x43, 0x34); //读取计数器0
//WRITE_PORT_UCHAR((PUCHAR)0x43, 0x00); //锁存后再读取
UCHAR nLSB = READ_PORT_UCHAR((PUCHAR)0x40);
UCHAR nMSB = READ_PORT_UCHAR((PUCHAR)0x40);
DbgPrint("LSB: %02X, MSB: %02X\r\n", nLSB, nMSB);


如上面的程序,我先写入0xAD、0x2E,然后再读取,但是得到的值不是0xAD、0x2E,该怎么才能重新读取到0xAD、0x2E这两个值?谢谢!
...全文
292 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuchaotao 2009-06-03
  • 打赏
  • 举报
回复
应该没有其他办法了.这是硬件决定的.
StarsunYzL 2009-06-02
  • 打赏
  • 举报
回复
那不是要拦截中断?除了这么做没其它法了?
liuchaotao 2009-06-02
  • 打赏
  • 举报
回复
那么,你在计数器0溢出的下一个时钟到来时锁存计数器0后再读,这个时候读到的值一般就是初值,当然可能会有误差.
StarsunYzL 2009-06-01
  • 打赏
  • 举报
回复
先谢谢回答,发现硬件版人气好像不怎么旺

关键问题是初始值不是我写的,前面帖的代码只是为了方便说明问题

具体情况是这样的,有一个系统全局加速软件,它会更改8253计数器0的计数值来达到加速系统的目的,现在我想要通过检测计数器0的计数初值是否被更改,来确定是不是运行了加速软件
liuchaotao 2009-05-29
  • 打赏
  • 举报
回复
8253计数器的计数初始值寄存器只能写,不能读.读的是计数寄存器的值.这两个寄存器使用同一个口.
你自己写的初始值你自己应该知道啊,有必要去读吗?

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧