|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
+ X( N% t# Q2 Q6 ]$ u可惜读取不到正确值。一直读的是FEh......
, a- b. @* t# t" \7 w0 E7 ?希望各位大神能帮忙看看,指点一二。小弟先谢过了。
% D: t- T. _& {- P. G2 h/ y
' N5 f) g0 f# ]! U! _1 R代码如下(masm5编译链接通过,DOS下运行):1 \5 P7 W& j) u4 L
* i- }8 b- V4 oassume cs:code,ds:data' V' e" A5 \+ I! g' ~
' S; ?4 u4 F& W6 D
data segment & p4 [7 i$ @, w! z
EC_CMD_PORT equ 66h ;地址端口
& w' c! j4 I. y3 E EC_DATA_PORT equ 62h ;数据端口 ; u9 F. q' n. w Q- o5 }$ d
CMD_READ_EC equ 80h ;读寄存器命令 + Y( Z9 N! o, B
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
, |* O7 {% z2 M9 o6 w- \3 rdata ends) X/ Z" f" V) q! _, S
c; e4 T7 N8 d6 k6 i' y
code segment - L( v# T0 Q8 Q4 `. Y
start: ' ~: M* r9 b$ ?- b' G" ]
mov al,CMD_READ_EC ' |) T% `' ?9 D+ a: i) w
call write_ec_cmd ;写80h到0x66h端口* f3 ]7 P, ~6 D3 n/ y/ q
mov ax,POLLING_DATA 2 O9 t; u: m1 }- k: D; E7 b" |0 f
call write_ec_data ;写ECRAM地址到0x62h端口
" t( |: E9 k, x' @, F+ I call read_ec_data ;从0x62h读数据/ m* H y$ G0 p2 n0 h
+ B( u9 G3 c0 N3 H/ j; s mov ax,4c00h : n* E! B& R1 K# n( j
int 21h; a' z' ^6 S8 [/ U3 m
* F2 X5 h5 h8 w: v
write_ec_cmd:/ M# N7 M$ M/ X e1 }
mov ah,al
% P( J: k6 j: D$ F2 L8 B call pmuWait4IBE
% m; C/ q, h0 A0 b G mov al,ah7 D% f5 R) E0 T/ m
out EC_CMD_PORT,al* p. n, N$ L' @# @
ret/ R' c/ _0 V7 p4 a% f5 V" h
) R6 o5 d+ p; lwrite_ec_data:
8 w5 V$ k# B2 y mov ah,al
f/ b( t) U v- L call pmuWait4IBE
0 b+ h8 C% B" m/ Q( a5 e mov al,ah: Y! ^2 B5 y1 h' m, I; N
out EC_DATA_PORT,al
6 M: I5 L4 p& K ret6 U# b, @4 F7 |; B
P# f" d" @ G: s' d; ] b0 Lread_ec_data:
% [; [* I: } Q5 c1 S | V call pmuWait4OBF
2 O, u- K) J5 ^+ w4 } R4 |7 Y jcxz $+21 R$ y" b' Q3 t0 s/ j" _$ a
jcxz $+2
6 Z3 U5 }9 K4 N0 W, D4 u( i in al,EC_DATA_PORT0 w y) Q! _$ N; _& f/ S8 D: z
ret2 w$ C' b; j! P" C" V, R" U$ n& V4 @
& c, c8 Q, D5 H; KpmuWait4IBE:% F& o7 G e2 w( m
JCXZ $+2
2 [. C# P4 Y/ f' c/ i/ h JCXZ $+2 5 [9 |0 D8 t" R6 g$ D
IN AL,EC_CMD_PORT ;Read PMU status # {. W! f. @/ e, e: J6 H7 p
TEST AL,2 ;Is Input Buffer Empty? 3 ^, Q/ }9 ~/ i! \7 Z* N
JNZ pmuWait4IBE ;Jmp if no
6 o; A3 L% @' w: K ret
9 Y+ W# v, S( ]; |+ j8 S5 E0 H; K
" U2 ?/ o+ @/ h1 X- mpmuWait4OBF:0 B* ?0 S7 [8 F( _" X9 v" ?: B
JCXZ $+2
* k/ \7 C0 o3 A4 n JCXZ $+2 / z# I4 @& c ]
IN AL,EC_CMD_PORT ;Read PMU status ! Q8 ` ~7 u' t) m L4 x1 g& C9 l
TEST AL,1 ;Is Output Buffer Full?
' M! C" ^# F/ F8 x8 B. W$ W JZ pmuWait4OBF ;Jmp if no 3 p7 D5 S5 H# K( u
ret$ m' L+ x# C k9 h( Z' w1 a# }
# f/ |' j" ^8 ?8 V9 u. ]code ends & Z; \9 r( }! l8 i/ r$ t, I
end start
0 q% H6 T( f8 j, Z! P$ r! |8 I, Q" U3 t+ \6 D* @0 E' Z6 S0 A! [$ ` O
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
+ E7 p0 P. a6 F: ?5 u& m ^$ V' W' S9 K7 l$ K e8 Y
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|