|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
4 i) X2 M/ S( J/ H可惜读取不到正确值。一直读的是FEh......
" o: E7 R+ U( m9 B希望各位大神能帮忙看看,指点一二。小弟先谢过了。- B( B+ D) L" ?
2 c* U) f. }" e' {
代码如下(masm5编译链接通过,DOS下运行):
; L/ K" S5 j* H; [
6 n/ W/ {3 |; T+ Z7 n+ p Kassume cs:code,ds:data5 Q9 Z! h( ~ ~7 l2 J, J0 D" h4 Q
7 r6 V. w0 e h/ ]' `1 R) Ydata segment
: y. X7 t* c9 N' C) ?- g EC_CMD_PORT equ 66h ;地址端口 " \$ [: V: V3 D
EC_DATA_PORT equ 62h ;数据端口 0 p" q* S2 ]& d9 z
CMD_READ_EC equ 80h ;读寄存器命令
I t7 K' ?& E- n POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
; e- F+ b8 h5 m4 e; Edata ends" P- o' F& S8 i/ T
, `; ^0 k; q; q/ H+ X! ` ^
code segment 6 E9 K6 ^( P( y9 s7 y
start: , @7 H( f- t: G$ q# i
mov al,CMD_READ_EC
7 v2 j# e0 y. c' D3 k call write_ec_cmd ;写80h到0x66h端口
: H2 M7 Q' ~$ }9 E8 q+ H* @ mov ax,POLLING_DATA / Q0 a5 E; [, C7 D; ?5 R" v9 j" H) v
call write_ec_data ;写ECRAM地址到0x62h端口/ _! D5 ^+ \/ B* w E& k1 o1 q
call read_ec_data ;从0x62h读数据/ x) K- y8 r+ `0 z1 h5 F
. C8 z- e, Q- y1 j- ^
mov ax,4c00h 4 a- G# z3 W( k3 p1 j/ U
int 21h
4 f. G. Y, V. T9 q
1 z6 ?# R/ @ x7 H7 hwrite_ec_cmd:: e6 @- T& d. g# j) A3 K3 _
mov ah,al8 f, C: h4 K7 p
call pmuWait4IBE
7 A% e% n4 {% ^6 A6 T. y( b mov al,ah
+ {0 e; N6 \7 q# E6 v( Y8 B out EC_CMD_PORT,al
7 c% W% V2 g: S- E ret5 h+ _9 [3 ~. M/ m3 r. W3 }9 K7 q5 ~
* {, W2 c6 z# R4 ~" L* e: }& f/ t8 Cwrite_ec_data:
1 T& d) Z# z T mov ah,al% P0 o! W- c! i: C/ j/ G* t
call pmuWait4IBE
$ y0 ], d9 Z* Y; O! B3 k$ W7 Q2 A mov al,ah2 G: ?0 g6 j0 k- m( o
out EC_DATA_PORT,al+ ]9 A9 D8 F4 v7 x. m2 A
ret
( p! Z: a9 F) a# g* k0 t2 Z- d0 m: Y- k0 ?; Z, a8 J8 n* l
read_ec_data:
0 ^$ v0 J) ]3 u/ t. O+ ] call pmuWait4OBF; K+ l0 E( l1 C8 W2 U: z
jcxz $+2
|/ F' v% h0 U7 g jcxz $+2) j# F; i/ S- d; A7 E/ `
in al,EC_DATA_PORT8 r$ B8 y& d4 z
ret
1 n2 L; ^, l5 M. E; p8 f 6 d( X; U* d3 @- G7 |
pmuWait4IBE:
: j2 y2 D) g6 [1 R9 v6 I& P JCXZ $+2
% k5 `. Q5 G7 ~, _& ~9 h, F* O! e5 i JCXZ $+2
8 Y; Q# d% C4 n IN AL,EC_CMD_PORT ;Read PMU status
2 b! O/ X5 W' R* E* Z3 v TEST AL,2 ;Is Input Buffer Empty? 3 c8 `: V& H; g1 H
JNZ pmuWait4IBE ;Jmp if no
9 T" R9 F" V: G: S* t ret
2 Q! v8 C$ E8 z a% z& C$ q1 w4 S; |0 n P8 x
pmuWait4OBF:, m8 }( h! F4 ?9 g) b3 t
JCXZ $+2
. a: F$ o" K6 g3 C I1 }, m7 ~# ` JCXZ $+2 ( a' R$ C$ B- R: [/ J" J8 z$ c
IN AL,EC_CMD_PORT ;Read PMU status , L1 a7 n D, l4 F
TEST AL,1 ;Is Output Buffer Full? 9 j% v9 j; c/ x; w; O
JZ pmuWait4OBF ;Jmp if no 0 c. I u1 l. S( b
ret8 x8 l; n+ G$ v2 Y v- J3 ~7 G [' s" Y: g
3 J5 B% K5 X$ L& E8 R& p3 `0 a
code ends $ [& s3 Z: c% Z" }* M( n
end start
) c+ P% Y9 P7 D7 t% G
% ^& B( {+ R! ~: G还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
- F% I# A4 S& d4 |+ b! D2 y
6 H, ?2 c' @% c- O. D[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|