|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。& A& H7 X% _* m& g7 O
可惜读取不到正确值。一直读的是FEh......
% C+ l0 ^" ^9 N5 x希望各位大神能帮忙看看,指点一二。小弟先谢过了。 S4 p; }9 ]# b e
5 S4 E, {* f0 @/ [代码如下(masm5编译链接通过,DOS下运行):) h( m& O. J& [( c& v6 w4 c
/ G- ?. f# U* R8 aassume cs:code,ds:data
3 G8 ?1 ~% s, X5 v
* ~2 x+ B! u6 Udata segment 9 B4 ]/ t+ E( T1 Z$ h# u
EC_CMD_PORT equ 66h ;地址端口
& Q& w: o+ Q! p" o EC_DATA_PORT equ 62h ;数据端口 9 e# x' I9 { Z6 N0 K( F0 R
CMD_READ_EC equ 80h ;读寄存器命令
4 z; K' _: s3 I+ J8 y$ P POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 2 R9 P! ]+ o8 W" l/ q
data ends
* S3 ]) K- }' \4 H0 d
0 U5 @1 W% B* ~; C! \" t" h' o4 Xcode segment 6 z( _: U8 @% j2 A8 c
start:
0 ]8 c5 v) m- Z7 B" g/ P$ o G mov al,CMD_READ_EC # r5 I" D g4 R4 g( P
call write_ec_cmd ;写80h到0x66h端口
( g4 U& U# d8 ~& |( `9 ^& K ? mov ax,POLLING_DATA , N5 R s+ n( G+ Q- c
call write_ec_data ;写ECRAM地址到0x62h端口
" ], k! \# d4 n7 \( {0 s+ R' w call read_ec_data ;从0x62h读数据
1 n- M* B p) j2 J. B% b+ Z
: g% `2 s' K3 U, u& t/ w mov ax,4c00h
/ I7 @2 I) D! t# _8 @# I int 21h2 N: q8 B' K) q" y/ O. ^
" A+ y' @9 k( w" ?, D8 G o
write_ec_cmd:
$ J8 w3 H( g, o, F7 B4 R mov ah,al; ~: \6 W( c [ C% V z. _
call pmuWait4IBE
. k8 T5 S( p9 V' T1 T6 X5 u9 | mov al,ah, N' E- G5 H T. x! o
out EC_CMD_PORT,al/ G+ s6 g; t& Q6 T* ]
ret: ~( A0 }& h4 {( e. B
: Q: d5 p( Y7 C2 f4 d
write_ec_data:
( C5 N+ ~- f0 z( f' P7 d' ^ mov ah,al/ M" l9 ?) T$ a
call pmuWait4IBE
0 Z9 G& U, C1 q. x- p. } mov al,ah3 k/ h7 \8 @0 T7 E
out EC_DATA_PORT,al' C% K2 A9 A1 J( Y
ret
) t0 Z5 y$ j, R1 {" k: M7 h n, b. H" V" V
read_ec_data:
2 J5 w+ d: g; `3 G call pmuWait4OBF8 S( t, l( O: g9 S, F% c2 r
jcxz $+2, E X- ]% ]" z; ?
jcxz $+2
3 V+ T$ |. g, f R, j( _5 }( c in al,EC_DATA_PORT$ g5 O* M- {, r7 k
ret
! _- W8 ]. t! a" }3 E9 Z 8 s8 A* p/ J- a E! h
pmuWait4IBE:
8 t2 J& e/ L1 @ N1 g JCXZ $+2- z% D* Y1 r# n6 A) w6 ?1 F
JCXZ $+2
- n h# C& ]' I P, x IN AL,EC_CMD_PORT ;Read PMU status 9 ^1 z* k n' l6 {
TEST AL,2 ;Is Input Buffer Empty?
6 M: q5 ^8 H$ O/ `- T JNZ pmuWait4IBE ;Jmp if no
$ x% ]' s$ A$ @8 }) o ret2 ]$ D- T* I {2 p
: F: F/ r3 ? k
pmuWait4OBF:
: V3 r2 E2 y, [1 U$ X0 n4 M# p8 k: F JCXZ $+2+ K' ~- C3 D5 [
JCXZ $+2 - {2 K5 Z% j H
IN AL,EC_CMD_PORT ;Read PMU status
9 H U2 F- o7 v; I4 K TEST AL,1 ;Is Output Buffer Full?
$ G6 @8 i/ i( r JZ pmuWait4OBF ;Jmp if no
5 r1 ^ i8 U" V! K; m ret3 n7 H2 @, E N7 S1 F
9 ?0 f+ e8 l- R. A6 `
code ends 5 s! ~" Y: A# V ~/ w+ c
end start9 M& N7 c0 r4 T) ~9 |
0 w# j }% l, A0 u0 |还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
" \3 f4 q/ d5 M( I0 p( a1 \- I' R) L7 w. j8 c
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|