|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。& u& S+ b8 Z" M* Z
可惜读取不到正确值。一直读的是FEh......
5 S4 o# [; }3 k# w7 C希望各位大神能帮忙看看,指点一二。小弟先谢过了。
7 M8 x' o3 x- ]. t2 d' i/ |) ]3 |) H; v) C: f Z
代码如下(masm5编译链接通过,DOS下运行):
: J4 [( S; ?/ J$ I+ z; L( R2 u
4 S3 P; a: h; Cassume cs:code,ds:data
4 `" M+ T" B4 C6 ^4 M V! M( v" g- W( S: d- Q* Y( t/ U
data segment ! H& h1 v, q& K' `0 b6 B. l& P+ ^
EC_CMD_PORT equ 66h ;地址端口 3 B0 M1 ^; Q6 k5 ~/ R$ i% {
EC_DATA_PORT equ 62h ;数据端口
6 m# Y% R+ W m7 N: n8 i CMD_READ_EC equ 80h ;读寄存器命令
% n/ r( ?' Q2 ~; |( t' b9 @ POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 - B7 I$ Z6 ]: s9 J3 ?2 S
data ends
! n8 ] F7 b _
% \! O( ?- Y6 u6 ycode segment
* u; c6 u* c; V& H, r; R) W3 Estart: ; y' V" I. ~" F! ?
mov al,CMD_READ_EC
# C! @$ O: V, N* Y call write_ec_cmd ;写80h到0x66h端口
# [9 h+ c) A! M1 P" o mov ax,POLLING_DATA
4 h; M" R4 N: }( | call write_ec_data ;写ECRAM地址到0x62h端口; v, G+ z% s9 \6 }$ f2 C' U) ~
call read_ec_data ;从0x62h读数据
( O2 N* G' ?8 m- [9 b O. a, B1 G* i4 j, }7 W; ~
mov ax,4c00h
# k3 y" v% `* E5 J! S int 21h' L" z5 f; z: e& s
' b) K' M8 P% Uwrite_ec_cmd:1 j3 c- Y4 [2 u8 U4 _! q# I
mov ah,al
+ M* ~: H( C$ R+ O) a call pmuWait4IBE9 m. C1 O( }1 F1 f" \: f& c+ a
mov al,ah
/ E. n* K: I* ?5 x out EC_CMD_PORT,al
* Z6 k; S: P# I* w ret, G0 Z( z8 U$ m4 g% D& V
0 \3 o5 @1 T( {
write_ec_data:, T \; D3 \. }9 T8 n
mov ah,al
5 a" e8 ?5 d7 @) \/ n& x: o. o! W& @ call pmuWait4IBE7 ^8 ^6 ]; `* W; f' A
mov al,ah
, ` R$ y5 D8 g* Z8 ^! v0 p out EC_DATA_PORT,al
2 @8 q5 p2 y. t+ U ret
) z$ x, W5 `$ \; t% W$ O. ^
# T0 k1 E+ e8 t& _read_ec_data:' y: \. x7 P4 I4 [8 p
call pmuWait4OBF
/ w4 n- M% N8 B jcxz $+2
- \8 W! J2 f$ I/ B" t. t( u. K jcxz $+2
' [5 }6 I0 {+ ~6 h8 G in al,EC_DATA_PORT) b# _9 y ~, y. E3 L) S
ret
6 n. |8 o! i" w# T3 ^: X3 Z& W 6 T, I9 _7 ]5 _0 `6 e
pmuWait4IBE:! W3 x! Q0 \+ x* y# e
JCXZ $+2
4 r( x& G/ t& `! f# b JCXZ $+2 2 z6 h9 P7 h/ h7 c, S; \6 j
IN AL,EC_CMD_PORT ;Read PMU status 5 A' c+ \) U1 ~- a
TEST AL,2 ;Is Input Buffer Empty?
) X+ `& _, w7 |( d8 g+ ~ JNZ pmuWait4IBE ;Jmp if no & g$ u$ ?- q2 z5 A2 _# m2 U
ret
7 J3 z5 p5 v4 @8 Q$ O; x8 b5 d0 B# \% y7 v
pmuWait4OBF:$ A$ u; f. `( N4 Q9 t$ E5 D
JCXZ $+23 p( M4 {$ e4 ]
JCXZ $+2
S" _! I! U `6 \$ p8 | IN AL,EC_CMD_PORT ;Read PMU status : Z/ h% H2 o* r3 x+ j+ e
TEST AL,1 ;Is Output Buffer Full? 6 ^) b1 |7 V- m# O4 h, G9 X
JZ pmuWait4OBF ;Jmp if no
/ L3 c! u2 G5 V; M) Y5 f. X ret6 s% N9 M( \8 e k
; f& L% C% f1 J- v3 Gcode ends : r, e, F1 x' C4 r, h) f& O
end start0 P B: Z: f0 s0 W5 Q
, t( h) K% C+ d9 y/ |' E* v3 ^: v
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
) b! d0 `) r( K' Z+ r1 L# x* e; G1 h) q: {/ v1 [
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|