yejieku 发表于 2010-5-22 16:46:03

读取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 编辑 ]

flyer 发表于 2010-5-24 16:18:33

回复 1# yejieku 的帖子

帮顶一下,同关注!~

另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
同期待高人答疑吧。

yejieku 发表于 2010-5-24 22:52:57

我的应该也是超时退出的。

archmd_duwei 发表于 2011-5-12 21:04:06

我也和你遇见一样的问题啊‘

bobdeg2007 发表于 2012-1-5 00:44:21

解决了么?

jijiangwang 发表于 2013-11-10 11:57:24

我也是啊,最近这个问题搞的头大啊,另外记得tool不使用这个端口的。。68、6c比较多。。
页: [1]
查看完整版本: 读取EC RAM