Intel BIOS POST定时器1检测逻辑及高频CPU适配问题问询
Intel BIOS POST定时器1检测代码分析
检测汇编代码
; VERIFY THAT TIMER 1 FUNCTIONS OK MOV AL,54H ;SEL TIMER 1,LSB,MODE 2 OUT TIMER+3,AL SUB CX,CX ;初始化CX为0,LOOP会执行65536次 MOV BL,CL MOV AL,CL ;SET INITIAL TIMER CNT TO 0 OUT TIMER+1,AL C12: ; TIMER1_BITS_ON MOV AL,40H ;LATCH TIMER 1 COUNT OUT TIMER+3,AL CMP BL,0FFH ;检查是否所有位都已被采样到置1状态 JE C13 ; TIMER1_BITS_OFF IN AL,TIMER+1 ;READ TIMER 1 COUNT OR BL,AL ;将当前计数值的位累积到BL中 LOOP C12 ; TIMER1_BITS_ON JMP SHORT ERR01 ;TIMER 1 FAILURE, HALT SYS C13: ; TIMER1_BITS_OFF
问题1:该代码如何确保在定时器的每个位被置1的采样点完成采样?
这段代码靠两个核心逻辑实现全覆盖采样:
- 定时器1被配置为模式2(速率发生器),初始计数值设为0,会从0开始递减计数,溢出后自动重装0,持续循环遍历0到FFH的所有8位数值——这意味着定时器的每一位(0-7位)都会在某个计数节点被置1。
- CPU会执行65536次采样循环(CX初始为0,
LOOP指令会让CX从0递增到FFFFH,刚好65536次)。每次循环里,代码锁存并读取定时器当前计数值,通过OR BL,AL把计数值的位累积到BL中。只要定时器正常工作,65536次采样周期内必然能覆盖所有位的置1状态,最终BL会被累积为0FFH,此时判定采样完成;若循环结束BL未到0FFH,则判定定时器故障。
问题2:在高频CPU上运行时,该检测失败的概率是否会上升?
会上升。
定时器1的输入时钟是固定的1.19318MHz,而高频CPU的执行速度远快于这个时钟。当CPU速度足够高时,65536次采样循环可能在定时器1还没完成一个完整计数周期(甚至没遍历到所有位的置1状态)时就已执行完毕,此时BL还没累积到0FFH,代码会误判为定时器故障,导致检测失败概率上升。
内容的提问来源于stack exchange,提问作者sheldon5
相关产品推荐
相关产品推荐

