|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
# f. K( ?& h S% ?可惜读取不到正确值。一直读的是FEh......7 F% M/ I5 S8 b3 o2 r4 T+ t9 D
希望各位大神能帮忙看看,指点一二。小弟先谢过了。0 c3 M% h* x0 D
- D9 a) ?0 ~- N# ^( e( q" v代码如下(masm5编译链接通过,DOS下运行):7 S' V/ v2 ?$ s2 m$ L7 }$ [
; D- P g+ r s3 n1 U$ y
assume cs:code,ds:data" \6 J7 R+ {" w9 y+ m
2 a# j7 L" s5 {3 C" ^- g2 idata segment : g, ^/ h+ r; z [. t$ E& h. d5 _
EC_CMD_PORT equ 66h ;地址端口
: k# h" O8 c. m$ T6 V: a EC_DATA_PORT equ 62h ;数据端口 2 Q% X4 x" Q4 e
CMD_READ_EC equ 80h ;读寄存器命令
# U4 M* ?2 ~* |1 Z) l S" J1 \ POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 ; e1 n ?* D& O# C# E
data ends. H2 X2 P3 s) |: _4 M" m! m3 J
& _2 a) T6 l. y: N. E( i; X+ _9 W
code segment
. i% z% l- l; e/ [$ ?' ~0 f+ Cstart: ( e0 q. Y1 K; Q6 U T% u2 F9 m
mov al,CMD_READ_EC 4 {( W7 d( ]) \2 F3 e, S' {! V
call write_ec_cmd ;写80h到0x66h端口
t& \( m: C0 R mov ax,POLLING_DATA ; K9 ~% O! w0 Z. v; M' ]4 g! o6 L
call write_ec_data ;写ECRAM地址到0x62h端口
. q7 R4 z; ?# a# k call read_ec_data ;从0x62h读数据
7 z+ S4 v* Q. m8 X: Y( P0 _3 }! x
mov ax,4c00h
$ W' ?+ Y- n+ c1 @. D* L! r7 s int 21h: I: L! R% h8 [5 r% Z4 i# o" ^
( Y+ a" y/ a- owrite_ec_cmd:
1 |: W9 Y% d/ C( U* z mov ah,al
. c. f- d/ Y$ b7 K. P" K call pmuWait4IBE2 c; S8 H2 y( [2 |
mov al,ah' I% J! D& z B
out EC_CMD_PORT,al( P8 |. \, s {
ret& H4 j O) q; R; J
- u' f0 C3 \/ \& X% u. |; K Ywrite_ec_data:3 ?7 C) Z! r+ C
mov ah,al
j, q" q2 m7 z% u. B" f2 Y- t) B0 w call pmuWait4IBE1 ]2 ~0 Q7 v* ~2 c
mov al,ah. }4 Z! v( G; }( Z% @: z/ h3 C
out EC_DATA_PORT,al
* u( C, K) V( A Y. I/ s% | ret6 }2 z% L' z5 |. h
) F, K8 F" b- y% {4 iread_ec_data:* X2 q2 V* d' H; W3 M
call pmuWait4OBF
7 T& C% c1 [" b W! z jcxz $+2
# c, v h# I C) P6 c jcxz $+2
# V1 T Z% A) }- s, B, c in al,EC_DATA_PORT& L- g+ b2 @- P1 j# A0 ~9 Y" w% ]1 z
ret0 e3 }) M& Y' z8 m: N
; t( B' u) z w* H2 Q2 G. z& E, A( m7 [
pmuWait4IBE:! }% |8 n7 {+ v! G7 x; c- d
JCXZ $+2
' _9 w- n* o! q JCXZ $+2
6 v* ^4 [9 n% G1 A6 @) D& z& n IN AL,EC_CMD_PORT ;Read PMU status 0 B* X5 @# Y5 D0 I3 y( Z* \: S
TEST AL,2 ;Is Input Buffer Empty?
# U2 Q3 ^- ^9 l% M ]& M JNZ pmuWait4IBE ;Jmp if no
! k o( O6 e$ f ret
: g8 X% d8 g6 Y" ?' K
) V1 `9 c5 ?+ U3 ^6 w3 npmuWait4OBF:
2 Z2 w% j3 d- d. i, e JCXZ $+2) X V& V' O( d9 {: Z' y1 N
JCXZ $+2 & Z/ x7 Q& G$ P; {+ X4 a
IN AL,EC_CMD_PORT ;Read PMU status
, E' a8 w3 f5 {2 x3 Q TEST AL,1 ;Is Output Buffer Full? 6 q6 t8 t* y2 a3 ~ D; U
JZ pmuWait4OBF ;Jmp if no 6 z. p7 ?% q: S) Z
ret
5 S9 O u2 ?$ ^( B 8 B4 p) z1 r$ X3 N( T3 n
code ends
& L: K5 n3 N. P2 \' zend start
7 S7 `$ T2 {" M8 y
: E2 b! M- x3 n9 [2 Z/ U+ Z还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。2 Q- h$ Z# H0 j& Y( W5 y5 n
, J4 J) W. ?/ u) @* K3 y% C( ], w6 q[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|