|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。( `" ?9 R+ d7 k6 ?
可惜读取不到正确值。一直读的是FEh......
! @, E- j6 _: p% x4 N希望各位大神能帮忙看看,指点一二。小弟先谢过了。2 g4 V* u- s7 A$ A
! u( w6 ], T8 u/ M+ G代码如下(masm5编译链接通过,DOS下运行):
* x' T+ C6 o& T! A7 t8 \4 ?' C4 \$ p) U- g9 L8 z% L+ J
assume cs:code,ds:data
4 A0 A* a( U# r3 Q% _; g3 X
' ~9 i/ ]) T! ]$ _4 Sdata segment
2 @7 u) l. { k4 V EC_CMD_PORT equ 66h ;地址端口 % A" y6 J$ X" o7 }5 }/ X: L
EC_DATA_PORT equ 62h ;数据端口
& _* }) w* o! h& _3 i1 H3 ` CMD_READ_EC equ 80h ;读寄存器命令
8 W! {2 r7 A0 m; G7 c POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
9 ~8 C7 T- [7 G! Bdata ends9 b) I3 I& r0 w. w4 W
+ e( {8 v6 h6 ?& G1 [+ b$ R7 D3 rcode segment
$ a7 f9 f, P6 d" U0 f5 c! A; X# b+ Astart:
* l( K# m! N _) b/ ]5 i mov al,CMD_READ_EC * w8 H! V6 X, p1 a2 m4 A
call write_ec_cmd ;写80h到0x66h端口
! q6 x4 T- e; a9 ]: u mov ax,POLLING_DATA
8 s+ G$ S& i. n call write_ec_data ;写ECRAM地址到0x62h端口' m6 c) Y/ E" p. l- Y T: _6 l
call read_ec_data ;从0x62h读数据& I0 M/ V; w, X4 y* N& Z1 R
9 z" C6 }: H8 t/ b- |; T5 d% g mov ax,4c00h $ N8 y0 S4 }( H3 W
int 21h
8 U& v+ l; Q- p4 N3 T/ g( n
& m8 s( B' N: X% Q" {write_ec_cmd:: \# \3 ^# O& c3 a* p6 k
mov ah,al$ D4 r1 F$ X8 t8 y0 y$ J; w; E
call pmuWait4IBE
5 b' f/ D! `" V4 L mov al,ah
+ E( y$ f4 c, {' |) o out EC_CMD_PORT,al
& i* V% y" p% A) S4 l ret
F, {3 b2 i' }. V$ r0 T' J8 A S
+ g O8 l' Z$ Y& ?8 N7 R1 Twrite_ec_data:
0 t6 v. j5 b& b6 L4 } mov ah,al
* r% n1 z* [: D# q" @) \ call pmuWait4IBE/ E, [1 ^9 m) X# P" t7 b
mov al,ah/ @9 l% ~- A& V1 X" j
out EC_DATA_PORT,al
; m/ h6 Y$ b- P" j( f4 D ret2 h- T+ [. K! z6 W5 v* H
/ P! q/ B& I6 k; N0 `
read_ec_data:& N9 B1 S; w$ q9 T! r$ k* e
call pmuWait4OBF' L) U- B \/ Y/ O2 Y( ~: L
jcxz $+2
6 |6 L. _. e: M! A9 C9 R- e% b { jcxz $+2
6 x8 P. Y$ [0 ~) @1 r; { in al,EC_DATA_PORT. \& w+ A: g8 t V
ret
# `8 d2 |6 v) C4 J! ~3 m
0 n$ ?: `9 r+ u+ YpmuWait4IBE:) A, U; H- Q$ s3 ~( C& S# @" l3 E
JCXZ $+2$ H: ^$ i U% ?
JCXZ $+2 . P3 U+ T6 o5 |+ k* k$ Y) m( A2 b
IN AL,EC_CMD_PORT ;Read PMU status % `1 d; u$ j2 @8 V4 j
TEST AL,2 ;Is Input Buffer Empty?
, w9 f6 r, M" Y JNZ pmuWait4IBE ;Jmp if no
- w& P3 T; F- `( \/ `) [ ret; Z6 `3 F9 ^( e
$ S) N% P$ y9 U6 x8 E
pmuWait4OBF:( j5 Z' H+ D! k x
JCXZ $+2' d z% o8 a# k9 q% V' i
JCXZ $+2 / i4 @2 A( E7 I# h- E
IN AL,EC_CMD_PORT ;Read PMU status 9 C, ~, ~2 U2 l0 y0 ~+ k4 N
TEST AL,1 ;Is Output Buffer Full? 6 a. q3 {+ v' f1 L% } P* ]7 p
JZ pmuWait4OBF ;Jmp if no
, ]! o/ \) r- ^% D9 _$ [ ret* r' _- c* d% V2 X5 M3 W- i
8 o/ H; x4 `1 [code ends
2 ~/ }1 [9 W+ v) lend start
. }( R! I- Y0 N1 |
6 p* ]* a2 a' }+ i还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
9 q( Y8 l: x! o: V
/ O% _( d) U7 Z+ h# h6 P[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|