读取EC RAM
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。可惜读取不到正确值。一直读的是FEh......
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
代码如下(masm5编译链接通过,DOS下运行):
assume cs:code,ds:data
data segment
EC_CMD_PORT equ 66h ;地址端口
EC_DATA_PORT equ 62h ;数据端口
CMD_READ_EC equ 80h ;读寄存器命令
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
data ends
code segment
start:
mov al,CMD_READ_EC
call write_ec_cmd ;写80h到0x66h端口
mov ax,POLLING_DATA
call write_ec_data ;写ECRAM地址到0x62h端口
call read_ec_data ;从0x62h读数据
mov ax,4c00h
int 21h
write_ec_cmd:
mov ah,al
call pmuWait4IBE
mov al,ah
out EC_CMD_PORT,al
ret
write_ec_data:
mov ah,al
call pmuWait4IBE
mov al,ah
out EC_DATA_PORT,al
ret
read_ec_data:
call pmuWait4OBF
jcxz $+2
jcxz $+2
in al,EC_DATA_PORT
ret
pmuWait4IBE:
JCXZ $+2
JCXZ $+2
IN AL,EC_CMD_PORT ;Read PMU status
TEST AL,2 ;Is Input Buffer Empty?
JNZ pmuWait4IBE ;Jmp if no
ret
pmuWait4OBF:
JCXZ $+2
JCXZ $+2
IN AL,EC_CMD_PORT ;Read PMU status
TEST AL,1 ;Is Output Buffer Full?
JZ pmuWait4OBF ;Jmp if no
ret
code ends
end start
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
回复 1# yejieku 的帖子
帮顶一下,同关注!~另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
同期待高人答疑吧。 我的应该也是超时退出的。 我也和你遇见一样的问题啊‘ 解决了么? 我也是啊,最近这个问题搞的头大啊,另外记得tool不使用这个端口的。。68、6c比较多。。
页:
[1]