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();
}
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |