|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。) r1 _. Q T p7 g
可惜读取不到正确值。一直读的是FEh......
" I B! \' q4 Z希望各位大神能帮忙看看,指点一二。小弟先谢过了。
0 g. _' g5 T7 W% T; X `6 z' |5 ~* o; _
代码如下(masm5编译链接通过,DOS下运行):
# k/ P' O; _% u( A7 }, }4 z& L4 P' @5 h7 K$ y0 a* K
assume cs:code,ds:data
7 i) Q% ~2 v/ T9 w2 \
4 u2 `& P) r% ^0 `9 g* ydata segment / N: W* {; Y+ ]% H/ k
EC_CMD_PORT equ 66h ;地址端口 , C7 b d. A! ~7 ^' Y @% R! U
EC_DATA_PORT equ 62h ;数据端口
0 {- `2 r! k4 x W CMD_READ_EC equ 80h ;读寄存器命令
) }& Y: T1 y& o* ]' i POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 # t' V# @+ ]: b5 y3 A* O. |
data ends
; U9 P0 ~5 ~8 f; q# W& t% D9 h
( x% c5 [, d8 x8 vcode segment
$ H0 Q5 B% Y$ ystart: ; u, Q R6 f: ^5 d+ s Z7 V+ ]
mov al,CMD_READ_EC
7 U/ L8 n# t6 M, X8 u- r# H call write_ec_cmd ;写80h到0x66h端口
) S1 M# ~* ^4 V$ m" T4 D4 {$ ? mov ax,POLLING_DATA ( y" t, }# p9 h1 W/ ~
call write_ec_data ;写ECRAM地址到0x62h端口$ b6 B/ W* m3 C9 P) k( o7 O" f
call read_ec_data ;从0x62h读数据- S- S8 T$ A) ?8 [
) q* J9 p/ e9 C3 v# w mov ax,4c00h . \) f" e8 f1 ]: h* ~
int 21h( n7 ~% r' y# F( \5 ~# v
* q8 O4 ^# ?+ Xwrite_ec_cmd:" l6 Y, \! }1 b% i; ], ~0 A
mov ah,al& D0 v9 g4 C4 m, K4 v! @0 S. U
call pmuWait4IBE
3 m3 W. J' ]5 V( `) m2 O0 n7 g( }6 h mov al,ah; n: h9 I" c& Y7 t
out EC_CMD_PORT,al
x+ J2 ^! M8 ^" n5 n1 p ret' b8 i: K; q& Y' X8 j
" _; ~) q5 \+ |4 H" z9 r0 A. B+ i4 Wwrite_ec_data:2 U: x/ R( m. d* Q
mov ah,al$ W$ r5 O+ {$ @+ y4 R1 b4 G
call pmuWait4IBE' K3 w8 Z* L" l7 j9 D* u
mov al,ah; }9 p- j2 w+ }) S, s9 _. M/ d
out EC_DATA_PORT,al# S5 Y( H1 X% c7 C7 L6 _/ {
ret
5 T3 U S; t e9 G
: j5 K" b' c, e* _/ x1 E3 p! d( \read_ec_data:4 c: H8 V3 V) f) M9 I4 o
call pmuWait4OBF( l* Z) {( H7 I$ n1 [
jcxz $+2
; G" A$ q8 z; W+ t( T+ |: M" o jcxz $+2
! y b# C5 l' B* o in al,EC_DATA_PORT8 P6 g6 V* J w" {! C! v+ Q
ret* V% r( L: T( N. P' ^
' j8 R) j$ b$ l) A( VpmuWait4IBE:
/ k6 b( s4 A5 E/ k/ G JCXZ $+2
3 o# i5 P d+ x" f JCXZ $+2
5 T2 X3 I8 ~/ l& E IN AL,EC_CMD_PORT ;Read PMU status
5 J. [6 C1 t+ C- v# ]& l7 j6 o3 I7 v TEST AL,2 ;Is Input Buffer Empty? $ @1 z; _- x6 k) ^1 U
JNZ pmuWait4IBE ;Jmp if no 8 v! d' L! m6 [5 |5 e5 j
ret
) B! K& t$ E4 v8 a, K; I
6 j7 P7 K* e& L, NpmuWait4OBF:2 U; V% N0 ]8 r, }. N; V
JCXZ $+2; h. J% ` \0 v. v1 b( g9 T
JCXZ $+2 ; }* P% S& q) I( H. c' z6 |/ I0 D
IN AL,EC_CMD_PORT ;Read PMU status
4 I5 x! z2 p3 F; X2 O TEST AL,1 ;Is Output Buffer Full? ) W9 I9 c- k `) w# O
JZ pmuWait4OBF ;Jmp if no
3 z+ J% o' G2 F' Z9 ^! n6 o3 _ ret
1 C$ P$ a3 x0 Z' w9 }: N) M
8 e, N& p7 J8 O+ Lcode ends / z2 h$ `- y. |$ Y; ]" |6 D2 F0 O
end start: C0 o! E9 U. ?1 _* {
. Z' ~' V' a6 e( D; y4 I- B还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。0 v R- G& R# P; N+ q1 e
+ f6 Y' ?) [7 y# f% R# u0 y
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|