|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
( p; {! w' e( M+ t! i4 |可惜读取不到正确值。一直读的是FEh......
. U. e6 Z5 I0 j8 O$ z( D" Y% x0 @希望各位大神能帮忙看看,指点一二。小弟先谢过了。
# A1 w \& B+ L
2 G" x/ `8 ~+ ]; k6 s# V9 A+ P代码如下(masm5编译链接通过,DOS下运行):- X) U9 S, h5 [
( l* [% y# g" v4 }
assume cs:code,ds:data. u0 z6 F& D5 j' P1 ~
1 t6 h; l; t: V( Z, D
data segment P! {& t3 V5 |+ p) b2 F2 ^
EC_CMD_PORT equ 66h ;地址端口 ; E% T, p. q% ]7 k( n
EC_DATA_PORT equ 62h ;数据端口
- \: d/ o1 p8 u/ k( E0 o. z2 o8 d CMD_READ_EC equ 80h ;读寄存器命令
: p1 B3 K. o) m- A* i1 A POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 - o! j9 R1 h* W8 y$ C! d/ n
data ends2 F' d* _' W0 G/ i- m
( \) x8 } q* d! |" @( pcode segment 4 b8 B6 k4 A4 X6 z- D8 v
start: * z% k9 d8 {, b5 R4 W2 _6 O- ]
mov al,CMD_READ_EC , l: I) i2 M$ f* U$ s) i- Y* s
call write_ec_cmd ;写80h到0x66h端口
. M2 g1 j2 ~& D9 i" f/ D7 s. x mov ax,POLLING_DATA
2 e4 ?1 d' e; p/ R call write_ec_data ;写ECRAM地址到0x62h端口/ i9 V) P) w D6 d
call read_ec_data ;从0x62h读数据 y, P& o8 I( ? v$ X B
8 X) g7 d4 q' H' q9 t0 Q mov ax,4c00h . C8 l6 c0 c9 h, f g
int 21h+ O- ]4 G( H5 l1 T$ ]; a+ u
" Z1 @5 F3 P1 I5 v2 X8 @3 W
write_ec_cmd:
* C6 `5 ]) @) N( V mov ah,al. n5 Y S: P1 V* m$ y3 ?" w/ W% F
call pmuWait4IBE
8 A. K- O* ]8 R' m mov al,ah
# R/ ]! {" O7 t; Z4 J out EC_CMD_PORT,al* ^# K) k) c3 L& K/ k5 i* d8 \
ret9 H+ y7 z/ @; ]2 w
2 {* m! U5 b |2 d, dwrite_ec_data:
0 t; g, U2 f8 \, o$ R F% a6 R mov ah,al/ n$ O0 ^4 v* x1 [
call pmuWait4IBE( P& }, k* m! b* r! N6 C2 X
mov al,ah6 |- G" e/ P ]
out EC_DATA_PORT,al
9 @; v2 }0 D1 ^5 E A/ u ret
- Y! r; \3 k& q: p" u% w4 i; ^% H4 `; ?
read_ec_data:
6 Z7 ^7 c7 y' T, n call pmuWait4OBF* D# r' J( U3 c+ Q
jcxz $+29 M2 ?! F% s2 z, B. u% z
jcxz $+28 q" r6 |4 S8 b; W! b i+ K/ k
in al,EC_DATA_PORT
* e [2 r8 k2 B1 E ret) ~/ V$ A# @1 w) T3 y) `
! o- f' c. s: m/ O" OpmuWait4IBE:
$ M0 F3 s" l6 d# c+ C( m7 N+ Q% X1 C JCXZ $+2; t1 I+ l8 y* \" ]# b6 I5 r
JCXZ $+2 9 q' {! v# X9 W% Z
IN AL,EC_CMD_PORT ;Read PMU status Y) ~% y1 S, [7 c6 S7 C9 j7 U5 V
TEST AL,2 ;Is Input Buffer Empty? ; R, Q, ~, s+ K5 O8 C
JNZ pmuWait4IBE ;Jmp if no 4 o3 N: c- x% s" F" F8 a/ Z
ret* b7 Q3 y0 j; ~/ Y! O, u1 N
# W$ M2 G$ _& B4 e
pmuWait4OBF:& r% B7 t0 x; Q$ i/ Q% y* r
JCXZ $+2
- I& ]+ b. `$ } } JCXZ $+2 - W, p O8 t# [
IN AL,EC_CMD_PORT ;Read PMU status
% b/ k5 {5 m$ a/ j* r" R. @ TEST AL,1 ;Is Output Buffer Full?
: V" z& A1 E3 _ M9 M% M JZ pmuWait4OBF ;Jmp if no
. o; }! C* @( i ret! \% Q7 Q: D3 c% w+ X
4 c/ }- f+ N+ M# ~code ends 5 w7 O6 j! j& H! o( V% b. Z
end start
0 e% J5 b0 x2 E: ?% z
+ [8 d+ Y; C- {0 B) ~还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
/ J) X+ ]) h* D
. {+ f: u& j& ?$ }9 V[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|