|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
' g( ?8 b" c8 j X可惜读取不到正确值。一直读的是FEh......( U* V( x( h9 }
希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 J, \* Y3 R3 |. ^' E6 n% |
" r S7 O5 C {0 L) z! ^代码如下(masm5编译链接通过,DOS下运行):
) }& o# h% w/ T+ e `1 f8 a5 y5 M" a, P* `, Y
assume cs:code,ds:data
& T0 i* D9 u; T6 ?$ u6 N: f! u6 S9 p4 e
data segment 3 F! W7 {& z0 ~
EC_CMD_PORT equ 66h ;地址端口
# L4 `" N/ _2 e" C3 E EC_DATA_PORT equ 62h ;数据端口
! C# E; m" G( k+ c5 e+ u& U CMD_READ_EC equ 80h ;读寄存器命令 % S6 N5 i0 @0 V+ ?1 Y N. p4 H
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 1 d$ }3 p% h4 Q
data ends
5 k" w! |4 P( t2 F3 R7 X" B# |0 ]# T 8 g7 b9 [- d: ~/ h3 @& p
code segment
* \" c& }0 t+ k4 Astart:
/ c. _( W2 [: o4 t mov al,CMD_READ_EC
+ x& A) |) U$ Y) n& W call write_ec_cmd ;写80h到0x66h端口% C$ H) u. w% k4 I& E/ k6 C! _
mov ax,POLLING_DATA
' w. V8 B1 o) E2 W$ z% K call write_ec_data ;写ECRAM地址到0x62h端口
: O5 }! j; J6 z2 p call read_ec_data ;从0x62h读数据
% x9 e4 `6 `$ _% `, `! Y8 [8 x4 Z( A6 v, N5 A
mov ax,4c00h
$ r8 D; i( L+ ?7 W. ]+ U* C( y( j int 21h! e$ ]. n% t# D7 a* c+ V) h
! E! n/ O) V: Y2 Q, xwrite_ec_cmd: m+ T7 x% ?3 P3 O
mov ah,al8 w4 }/ L1 Q+ X# Q: ~
call pmuWait4IBE# c B% S B* L
mov al,ah
% {" I. r0 C, E4 }' i9 Q' m out EC_CMD_PORT,al' ~8 m, ~/ u9 \* \3 g
ret
1 p- U% r( S" x6 O$ Y
& o4 q7 K8 Q* Kwrite_ec_data:, w$ r4 H" y4 n! R
mov ah,al% H' m- q+ u' w$ j
call pmuWait4IBE( B1 o0 `8 V' ?! o) ^7 w1 ]) X
mov al,ah
+ c5 q* G3 H3 H( X& V' r out EC_DATA_PORT,al: D9 _0 T" I$ Z) u7 a1 _) \9 F
ret
: H! ^6 k- Q; D1 G7 C4 g: m8 U. |( {! T9 [" C2 _
read_ec_data:- f' Q! B. d0 }* z, L& H
call pmuWait4OBF
5 U* h! G* q& T4 c+ y% s, w jcxz $+2
% |/ t/ k8 a3 @% F jcxz $+2
6 |& b4 E1 O0 K- Q: ~ in al,EC_DATA_PORT; T. ^2 D: O8 N; W( U- f( H
ret
' i3 X7 R7 r s. Q; B8 ~ / v3 X0 [% v* U% L# m! E
pmuWait4IBE:' p# B6 Y3 W! o1 t+ B
JCXZ $+2- e' {7 } |- h
JCXZ $+2 & A: a! ^* K0 {, c; n! N
IN AL,EC_CMD_PORT ;Read PMU status ) G* p; ^3 d0 o9 p8 w8 N
TEST AL,2 ;Is Input Buffer Empty? ) `; l6 F5 ]4 `+ Q9 q
JNZ pmuWait4IBE ;Jmp if no " l8 f& I- J4 t6 E$ E, x
ret2 E; k5 t( z# i6 o6 _9 S
/ k7 y. h3 f2 n* g) { A
pmuWait4OBF:
+ `4 f( R8 c' \- \' |0 L4 R JCXZ $+2: Z* V. B$ w/ c7 A
JCXZ $+2
X3 V. u7 ]& B4 o IN AL,EC_CMD_PORT ;Read PMU status
* C8 c, }/ V3 t$ Z TEST AL,1 ;Is Output Buffer Full?
- J* [0 t, {7 {5 M' J; ~, w2 p JZ pmuWait4OBF ;Jmp if no
, Y3 J) }& q7 w8 d, U [. | ret6 R! {& K: P8 k7 T* c% T, ^8 x: T
; U4 F8 \: c9 L
code ends , m; |9 r4 I0 z+ s# B( f
end start4 O/ V' \0 m5 A: a+ }
' r/ e* c1 x% {8 F
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。8 [; A" e3 b- o" l7 m
^* P) j, y5 C[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|