|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。. P& S4 x& t. u1 q; A
可惜读取不到正确值。一直读的是FEh......
; @5 L+ p. D) V希望各位大神能帮忙看看,指点一二。小弟先谢过了。
* D$ F0 \ c9 k, I
n1 k1 g! F+ ?" H$ @- M$ ~代码如下(masm5编译链接通过,DOS下运行):4 W7 v" L" P3 F
3 c4 ~( m% H. O/ J
assume cs:code,ds:data
) Q$ q4 N1 @4 m* \
4 ?) X% J/ U) a2 N2 }! E% Qdata segment & z* q1 f: t; q0 B4 P
EC_CMD_PORT equ 66h ;地址端口 3 _1 s4 v8 d' E& ]% s9 x3 v' F
EC_DATA_PORT equ 62h ;数据端口
3 o9 r( U2 S# J( q) U( M$ z CMD_READ_EC equ 80h ;读寄存器命令
$ b" Q: W7 T1 }; r- k% j" |6 W' Q* c POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
3 A+ }1 T3 u: @0 {7 tdata ends
$ [! F( b3 {9 j* ~ X & V. Y+ J! n" y p$ j8 u
code segment
( N* O+ ]6 H9 e' m. z+ N) x4 Pstart: " g ?; y$ @: G+ _9 _3 m
mov al,CMD_READ_EC - \6 c8 T3 A: Z2 s. E
call write_ec_cmd ;写80h到0x66h端口- v4 L: d5 i% `$ l% u
mov ax,POLLING_DATA & x* a4 E5 h" G K3 J. I5 t6 O
call write_ec_data ;写ECRAM地址到0x62h端口: P$ d6 O P1 z. W" N0 z
call read_ec_data ;从0x62h读数据+ Q0 |$ U' W# O) L, e4 {
+ l. C' s- ~. T) N+ R
mov ax,4c00h
/ {5 e S2 y/ S+ z) ]* K int 21h
; |$ E6 }! b7 V4 X
6 O5 i# i: i% F- Qwrite_ec_cmd:" ]2 u; T9 R" D& [' Z
mov ah,al
# W" P! R9 b5 {6 ] call pmuWait4IBE9 |8 n7 p! |- B5 M7 f% M- N
mov al,ah6 H9 J2 b& V( Z5 w6 Y+ e
out EC_CMD_PORT,al1 ]- C- o5 N8 x2 L. N" {3 s l4 [' ]
ret
% X4 y' B& }' f% h0 ^8 I0 b- v: i0 N, W
write_ec_data:. c1 G# Y: Q# L, s/ K
mov ah,al
4 T0 N+ Z- ~9 u8 I j! ] call pmuWait4IBE
- G$ M0 L. i- ? x9 Q. L5 f P, ? mov al,ah/ a W0 V- T' j7 [4 C* g
out EC_DATA_PORT,al
$ v. i4 `, z$ H& j ret
' j7 x; d8 y- W5 v3 t* Q# z+ ], S k! l+ J1 j. ]) ]6 c# `
read_ec_data:
) l' ^5 R/ n! l call pmuWait4OBF
9 [' N O* q _0 |3 L! S% E! E jcxz $+2( U2 Z) p% d2 F1 O; Q K
jcxz $+2% N l$ s- y: A
in al,EC_DATA_PORT0 i' F# t7 C; F" d' X. L
ret) R7 F* I6 Z: K! z# D, |7 g! t
1 Z9 T+ \. j5 |. E0 F/ g
pmuWait4IBE:
! I/ w' X7 B8 Z5 k- F/ X' h JCXZ $+2" N8 i% |( D7 I" E4 h5 Y
JCXZ $+2
9 C; ?7 }6 g) I( D: V: b IN AL,EC_CMD_PORT ;Read PMU status
2 f9 n) B$ X1 K TEST AL,2 ;Is Input Buffer Empty?
9 [/ O$ v: K& s2 u5 M JNZ pmuWait4IBE ;Jmp if no
5 Z3 ^. ^7 s8 ~$ X, i ret* K$ C! F+ d7 b( F
, P! h; j5 `; S Q5 V6 x5 w% u2 R/ `pmuWait4OBF:$ {' M5 k7 p) Z$ u( Z5 \
JCXZ $+2
/ z& [ ]( k0 O8 e2 f JCXZ $+2 ; }2 y: x! x: S0 K0 P, A
IN AL,EC_CMD_PORT ;Read PMU status
( G& w) O* y- B3 A- T1 w, p TEST AL,1 ;Is Output Buffer Full? 6 H9 |% ^) }0 w; \
JZ pmuWait4OBF ;Jmp if no
* K$ A) S9 |/ R- T6 W ret
" G3 ] i9 l# a2 A% W1 |& \
2 O9 B- E# x% C3 Q* Lcode ends 0 D8 ~. l6 t& n* y; `
end start2 i; Y0 @5 ^1 l, X0 \
, v8 k9 d* J; ?
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。) }0 [( B. f8 t+ a3 M) S! ?4 `
0 Y, g! j5 k( S8 @[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|