|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
1 n* `( i. K* s, i" ~, k5 e6 d可惜读取不到正确值。一直读的是FEh......0 Q& q# {5 @* S) h* u
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
m8 h/ s' S' M/ B0 _# ^# {& S, `
, e* Z* n8 k0 b代码如下(masm5编译链接通过,DOS下运行):
6 }5 a1 u( L3 o4 | ?( @% h
) D+ x5 v( b6 F% b$ \7 r2 \assume cs:code,ds:data
; B7 G5 `$ P3 Y# F, z! D+ d
# o) O$ c& q4 b |data segment
: _) u! N/ P* A( }+ q EC_CMD_PORT equ 66h ;地址端口 ) t3 C3 {' W2 C( t' }2 s. N
EC_DATA_PORT equ 62h ;数据端口 8 E+ {; L* m9 m" F5 @
CMD_READ_EC equ 80h ;读寄存器命令 ; p* A" z2 O, j1 B; k* P
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 1 c9 _" N# f, n% s& m
data ends
: ~) D* E; ?$ R
* a$ `6 K( ^, U8 V% \" gcode segment 3 d. z- H5 L+ A! J
start: 2 m; E% L: H) N8 D
mov al,CMD_READ_EC 9 _, U) A3 x* d* {+ {& f1 d9 u
call write_ec_cmd ;写80h到0x66h端口
: [& {7 U5 M5 e) D$ C mov ax,POLLING_DATA
% H5 E+ A' h, z call write_ec_data ;写ECRAM地址到0x62h端口9 \6 Q* ?( q5 ]% n3 O* Y2 j+ U
call read_ec_data ;从0x62h读数据4 V2 |$ J+ ]) u
) z9 s' ]# v3 S- T3 ?) p: M mov ax,4c00h
( F, _: K: q% J! A" D# E- ~ int 21h
+ `! O) P/ G2 k- |# e- P$ i9 f" T# _6 w; h
write_ec_cmd:$ E$ E& e& |; `4 ]9 v, b! Y, c
mov ah,al
3 i7 `8 a' k* E8 E# e' D call pmuWait4IBE M3 B1 V: E3 B' Z0 D: U& O
mov al,ah9 o! R2 R0 m" e( y7 K
out EC_CMD_PORT,al
H# v$ h5 z% w. P. V' Y% a ret% p; z" c: E# c; i4 Y2 f2 s
+ p! s/ C2 Q, `+ C1 W2 D0 M$ c
write_ec_data:
5 _4 _% M8 T- o& |* k, ~ mov ah,al
) E( ?& T4 S( m call pmuWait4IBE
* N r( O0 m+ L) n mov al,ah) |6 r& T0 ?6 [9 M/ S
out EC_DATA_PORT,al% _- P) w, l1 l2 N, p
ret, ?) T, }) ]( `% \8 G
" o2 V4 e6 a/ N5 C3 A, [ Q+ Kread_ec_data:
$ H6 x/ u+ H) e) F7 t( F2 ?; z5 a call pmuWait4OBF
2 w4 m) K5 h" d0 t/ G" _+ X1 Q* w jcxz $+2
3 k% }+ p j+ X E jcxz $+2
8 M& _6 H* l: r3 \ in al,EC_DATA_PORT( \- ~1 M( q8 j
ret4 X5 R9 D$ p2 n+ J" k) u
- D3 F: d C9 O# gpmuWait4IBE:# p u Z( U0 H
JCXZ $+2
8 H" i9 ]) } Q/ T JCXZ $+2
' P1 I3 b8 F7 W: v! @7 b% f IN AL,EC_CMD_PORT ;Read PMU status
2 a: H; P& @$ _ j' ]6 k TEST AL,2 ;Is Input Buffer Empty?
+ B$ ?1 `; L3 D) y5 ]" o3 h JNZ pmuWait4IBE ;Jmp if no
; z9 P$ H q- C* r4 V! {2 ` Y, c w ret& S5 T# D' V c+ _( T8 x. X6 I
7 T1 r' `- P' }( {pmuWait4OBF:7 b$ e8 J. G3 N# V- U
JCXZ $+2* I) a" Y2 Y5 \& C1 v
JCXZ $+2 5 R, _3 k6 ]9 o4 f
IN AL,EC_CMD_PORT ;Read PMU status 5 D& s) r/ w% J" r4 F$ P) I
TEST AL,1 ;Is Output Buffer Full?
1 _8 R: m7 W) N: }: \9 d; P JZ pmuWait4OBF ;Jmp if no
- _, r6 @ v" G1 ?- E5 u( { ret; B3 T7 \; a6 y& J' T, z
, a! t- v( `2 O; m% m. Q- ucode ends 4 m9 a/ J2 X% c& a/ x
end start
% |; l" x/ h* R6 q2 _5 N
0 Y8 B, @% }+ ^6 x3 e还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
3 [: P- d8 m! N: ]% \" p/ u4 }( L2 A: \) O) _
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|