|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
7 R) b7 _2 b' H* H可惜读取不到正确值。一直读的是FEh......
# L# P8 ^+ ~; i) i+ T希望各位大神能帮忙看看,指点一二。小弟先谢过了。
0 t$ M+ c4 M# V+ d: I5 `' v; w8 D: Z) ]9 |
代码如下(masm5编译链接通过,DOS下运行):3 f' ~) H2 R% b2 Y( x, w, L" p7 g
' ?# {& x ^* H7 w' |% G/ l
assume cs:code,ds:data
4 G9 h6 p5 [, f( u& |, f. X! ], U
) p" K+ v; F5 c' adata segment 3 p8 o8 H9 q8 w3 M* a" I/ C! M
EC_CMD_PORT equ 66h ;地址端口
3 R) {+ c+ d: b* Y' o EC_DATA_PORT equ 62h ;数据端口
8 f8 j7 A# v4 \2 M& m! l" q CMD_READ_EC equ 80h ;读寄存器命令 9 N6 g9 d, Z, N9 d- u
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
' W* _# L! K1 A5 p, L3 w# }$ ndata ends
7 H& H3 H* b ~. x 4 A& K6 j- X, n1 ^
code segment
. s* Y: o5 X2 I* ^( astart:
3 L+ M2 d! `" ]# k4 H$ q, K mov al,CMD_READ_EC " S p* }) C) K5 R; H% _/ X4 o
call write_ec_cmd ;写80h到0x66h端口
; n7 R7 b' D8 E) g8 m% \ mov ax,POLLING_DATA
5 i6 O8 j- G1 X, x call write_ec_data ;写ECRAM地址到0x62h端口
5 X0 _, C$ c1 ~/ a- H* {1 \! H: w call read_ec_data ;从0x62h读数据6 ~1 L5 E4 N% F2 T
! H4 Y! W& h7 H V' O d7 `
mov ax,4c00h 4 i+ K# A( _: R% c( ]& T
int 21h
# x6 }' H& E9 `4 Y" w- K* }2 L: `, U+ ]0 G6 `9 ?
write_ec_cmd:2 h0 t P9 a1 x
mov ah,al' M5 |+ r2 i0 w3 d0 |
call pmuWait4IBE/ [8 G1 C H8 b
mov al,ah/ ~7 y% ?$ ?+ q M; f# h- D
out EC_CMD_PORT,al! z3 b" p. \( V. |% D' P- |; k
ret2 c$ ?: X; V* K8 Y
9 `9 Q" b" O5 O
write_ec_data:: i1 K# g, r1 }, \ P+ T
mov ah,al B; K, [ @7 w; w: k
call pmuWait4IBE4 x* l1 l2 z7 @5 y7 s
mov al,ah- f1 P! C& f/ ]3 G* Y8 F
out EC_DATA_PORT,al) V4 r& `; W2 k* w m9 A8 ]' R$ X+ W
ret& u# T! ?- {' l
; n, {8 T: s* d) i1 o! l7 {5 |
read_ec_data:
! h' b# A: j" _3 ]. d call pmuWait4OBF
3 v4 `9 Z9 y- o7 _& S7 \ jcxz $+2$ J: n/ E5 ]6 F0 {/ U% b7 }
jcxz $+2
& V9 x3 f* F/ j9 v7 m7 O in al,EC_DATA_PORT
$ v% S; K$ b- I z ret
9 e3 m @6 {) A$ S % s: k8 m; N) C5 Q
pmuWait4IBE:7 {4 u. G5 m. g8 V, y
JCXZ $+2, c1 l) }# |+ D/ V6 k) \$ q
JCXZ $+2
# F- q' M8 ?. Q- t IN AL,EC_CMD_PORT ;Read PMU status W( c4 N8 ^: m, n2 ~
TEST AL,2 ;Is Input Buffer Empty? + ~9 l; I9 j" D+ z, ^
JNZ pmuWait4IBE ;Jmp if no $ `7 ?$ l4 n5 d/ w* V# j/ J9 f- J
ret& R, C& c6 ?: t: I* ]( T" g
8 N+ X3 `" U2 E
pmuWait4OBF:5 `8 h0 G7 h* }8 }$ }7 ]
JCXZ $+20 [, i D& P8 ~
JCXZ $+2 - K* d/ b% [) B F/ Q
IN AL,EC_CMD_PORT ;Read PMU status 9 D) f+ d; k1 A ^5 n1 I
TEST AL,1 ;Is Output Buffer Full? ( }5 a0 L1 K7 Z; @
JZ pmuWait4OBF ;Jmp if no
7 a( ^, E3 n9 I. W5 q2 X2 P; B3 m1 G ret6 k7 @! V; o! L' V, i! O) G5 c
* O3 }, n2 m$ ecode ends
3 X+ g9 f1 I& F3 Q! yend start
: S7 z$ ]+ i8 Y% B( W! T {" X& |5 ?9 O7 W
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
4 R# C0 c/ U. Q" G
$ p3 J" x9 j& p* v[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|