|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
7 T5 s* m2 {6 o6 X, _0 k可惜读取不到正确值。一直读的是FEh......3 V' N' y3 Y+ ?( F: Y4 W6 S2 V ?+ ^
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
( m, a5 k/ P$ R, p: N7 v9 D+ b
. Q0 B) }; E- S5 y代码如下(masm5编译链接通过,DOS下运行):. \! @4 F$ n: r, G: f/ D
6 ^+ O, i* M) @9 S, Kassume cs:code,ds:data r4 u+ m4 [( S: v6 O& ~: e
& f, V' Y7 w+ @% y2 S/ jdata segment . s8 T+ k8 I1 G/ b) V# U' ]& o
EC_CMD_PORT equ 66h ;地址端口 - L5 ~; G# w) N! w6 i0 T; _
EC_DATA_PORT equ 62h ;数据端口 0 D8 k0 @+ P7 g _+ N
CMD_READ_EC equ 80h ;读寄存器命令
6 Y* y) I+ o! @& e5 B3 o/ S POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
% \5 y! L. O5 cdata ends \+ {4 P, W! h/ n2 @- s* j- A9 M
: o2 q! S! @0 J3 h/ I
code segment 8 L7 h8 m( J! P! `7 K( W5 k) G
start:
& q6 e3 W N6 f G/ z mov al,CMD_READ_EC 5 P7 Y5 A! b( a* l3 S
call write_ec_cmd ;写80h到0x66h端口
7 h, o5 b* n3 k6 _9 f$ W0 S mov ax,POLLING_DATA $ G! y& I8 g6 S1 G: r) G
call write_ec_data ;写ECRAM地址到0x62h端口, t& Z# U) S0 N: q( v
call read_ec_data ;从0x62h读数据. P7 L! W7 X# M
4 U, H V5 }- F3 \% O, S/ B! W' ~7 I
mov ax,4c00h
" c2 I6 q& ]) a7 w" E int 21h3 l0 L% _6 }! D# a5 d. B7 L1 }5 J
' N0 d, }) \6 T& @, U& t
write_ec_cmd:
7 |, ^1 h) R: A5 L mov ah,al2 v& [9 q) I% P& i& F+ D
call pmuWait4IBE
# y5 X e0 {1 L$ ?9 \9 V7 a mov al,ah
$ V' G! M+ k* P out EC_CMD_PORT,al1 H0 @9 V9 C- C- o
ret; z9 r' f8 U! ?7 Q( C
& X; A) A& e ~0 O2 H5 L
write_ec_data:! X4 a \; Z; @5 K
mov ah,al
R& Y/ B8 E) a% ~ call pmuWait4IBE
+ ]' q! D3 u5 L5 F8 g mov al,ah
) u" ~. |# u+ u2 k/ m; ? out EC_DATA_PORT,al
9 Z8 n P( D" R3 A ret
/ n$ z7 d, T, ]$ @4 l) Z% m! C% y+ R# b0 q2 O
read_ec_data:/ Y* I. H9 D2 ^: g$ _" A# ~
call pmuWait4OBF
# Q" R0 ]+ g1 a6 {/ N jcxz $+2
R6 m6 @& | D! Y' u/ ~7 s1 _ jcxz $+28 u! ~( s% R( ?) U0 o& W. n: ~6 L
in al,EC_DATA_PORT
* j+ { e6 A5 j$ q% O" t) p ret
( j: ?4 r8 k, r8 n2 F 0 K. D" l, k" }* z
pmuWait4IBE:
) O' p( O T$ }3 v JCXZ $+2
2 J; M4 {: z3 F. } JCXZ $+2 |) }' n7 z' v! N/ h( h
IN AL,EC_CMD_PORT ;Read PMU status 0 v( m9 f: x% h0 Z8 j
TEST AL,2 ;Is Input Buffer Empty? 7 [5 q" x5 ]" u
JNZ pmuWait4IBE ;Jmp if no
4 G7 f @( p0 | ret; f$ k/ s5 T$ |. \- D
' r. H- |" Z; `
pmuWait4OBF:% l# O0 ~. y# c& F7 N
JCXZ $+29 R! \* j; x! p( y( A$ _
JCXZ $+2
1 r+ ~( g, ~+ \9 ` IN AL,EC_CMD_PORT ;Read PMU status
5 R7 |4 e' B2 w! f TEST AL,1 ;Is Output Buffer Full? $ I& x( h+ ~0 E, k5 c" H
JZ pmuWait4OBF ;Jmp if no 9 @7 T( V! F7 x8 @6 y; R
ret
9 S: j+ n% I0 F
1 r+ N6 q6 H: L' ]code ends
/ w( h5 z* D' b- E8 p. y/ y% y$ ?6 Bend start
- L( f {$ z) c7 s4 z+ U
' I1 K2 A% r; m2 b3 b. B6 [1 F还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
( _5 u' x6 p4 S6 j$ D% ]% J" L
* v2 o' ]! y" {' O# I" P( b+ f[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|