曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7007|回复: 0
打印 上一主题 下一主题

PC_SetTickRate

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-4-14 01:38:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、功能
这个函数通过设置 PC 上的 8254 芯片,以产生所需要的溢出频率。
二、代码如下:
void PC_SetTickRate (INT16U freq)
{
#if OS_CRITICAL_METHOD == 3                     
    OS_CPU_SR  cpu_sr;
#endif  
    INT16U     count;


    if (freq == 18) {                            /*PC 中默认的时钟节拍默认为18HZ,即8254从0计数直到溢出*/
        count = 0;
    } else if (freq > 0) {                      
                                                 /* 需要计算出装载进 8254 的值*/
                                                 /* 需要进行四舍五入的补偿*/
        count = (INT16U)(((INT32U)2386360L / freq + 1) >> 1);
    } else {
        count = 0;
    }
    OS_ENTER_CRITICAL();
    outp(TICK_T0_8254_CWR,  TICK_T0_8254_CTR0_MODE3); /*设置模式 */
    outp(TICK_T0_8254_CTR0, count & 0xFF);            /*装低字节*/
    outp(TICK_T0_8254_CTR0, (count >> 8) & 0xFF);     /*装高字节*/
    OS_EXIT_CRITICAL();
}
三、说明:
1、装载计数值计算公式:
                             1193180.0 Hz
                     count = ------------ + 0.5
                                     freq
因为装载进计数器的是整数,为了取得最接近的整数值,所以进行四舍五入补偿,故需加上 0.5。
2、函数 outp:
nt _inp( unsigned short port );
int _outp( unsigned short port, int databyte );
_inp原型为:

int _inp(unsigned short port);

port参数为指定的输入端口号。调用后,它从port参数指定的端口读入并返回一个字节,输入值可以是在0—255范围内的任意无符号整数值。

_outp原型为:

int _outp(unsigned short port, int databyte );
port 参数为指定的输出端口号,databyte 参数为输出的值。调用后,它将databyte参数指定的值输出到port 参数指定的端口并返回该值。databyte 可以是0—255范围内的任何整数值。
这两个函数都没有错误值返回。
所在库为bios.h
在Win98下可以直接用, 但在NT下必须要挂driver
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 08:28 , Processed in 0.063615 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表