|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
2 R: A& U; U, P) J可惜读取不到正确值。一直读的是FEh......8 \9 o7 w1 [! d
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
: |# X& t4 i) m0 W- O' o/ Q A4 x( y
. n# t$ C$ n# x9 [' f代码如下(masm5编译链接通过,DOS下运行):
# J. A- ~8 O7 O& N. M) [6 Y3 D, {2 C1 Y
assume cs:code,ds:data
+ H$ I+ N; U5 ]& b7 O G
# \) _/ W0 B7 h" ]! o- pdata segment 4 ^( w2 c) N- ~. P5 V
EC_CMD_PORT equ 66h ;地址端口 3 a* H) H: |& ~
EC_DATA_PORT equ 62h ;数据端口 , k- ]1 s2 R V1 R! K; t: M
CMD_READ_EC equ 80h ;读寄存器命令
0 J! r8 D8 S% Q' |% i+ Q, U POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
! d4 p% S! Y/ r# k8 O' Ldata ends
4 x) m# _ T, v* @* T1 C7 D 9 `* ^+ L: E: Q( h% Z% i
code segment
3 w/ G% `0 X$ @6 ?! Jstart: $ a4 } Q: Z0 t1 m+ D
mov al,CMD_READ_EC
) W' m3 V5 u' | call write_ec_cmd ;写80h到0x66h端口' x$ L/ Q) K9 Q( m3 V
mov ax,POLLING_DATA 4 ?) E( [7 j5 k+ g7 |6 |
call write_ec_data ;写ECRAM地址到0x62h端口
% B4 w" Z1 O5 z7 k$ l call read_ec_data ;从0x62h读数据
- m: H C8 h6 T4 ?' \0 U
3 ?/ r3 i) c% \; {$ G/ }8 u/ B; | mov ax,4c00h 2 ~- ~7 a/ v3 w3 G
int 21h
. t* G" r9 Z# e$ R
% |4 C p! ^/ [* j, h$ @write_ec_cmd:
$ f9 k2 n7 |, V `6 ]2 ~ mov ah,al: w. O# [ F# i* [8 b
call pmuWait4IBE, x/ N2 q& w4 W3 _0 s
mov al,ah
! N5 g8 g' ]; a) @ out EC_CMD_PORT,al
. j$ N: a; C. q: Q* K& H ret8 X5 |/ k: ^) y4 K# A& J G0 k
1 H, y! y, i. A% w
write_ec_data:' Y8 w6 G' Q: l2 @$ M; p/ w
mov ah,al
' z, _4 O9 N3 L; d b call pmuWait4IBE
$ i/ G' n' F. k5 Q* Q mov al,ah+ R7 @2 o# n: n3 o
out EC_DATA_PORT,al" K2 a {5 L1 z$ P S
ret' ]/ V8 h6 ?1 Q6 e1 J
0 T$ ^ \5 v2 @ Nread_ec_data:6 ] d6 v6 n- ]& _$ W- |% y |
call pmuWait4OBF6 I) `% J8 v: f1 T
jcxz $+2
2 C+ H8 `* t" z4 ]2 K, h+ N jcxz $+2* Z! x& q. }! Z2 H% f" U
in al,EC_DATA_PORT6 n4 J; Y# g; z. G5 t
ret
- }* U, w0 r: g/ r
) N6 W& {" T. |. B8 s$ l( E) |! mpmuWait4IBE:
) z- ~& [) w5 A( H; o JCXZ $+2
) D" O4 ^% G$ m6 z) S9 k JCXZ $+2
: {4 X8 M7 `% c, ?( [; C x& v- L IN AL,EC_CMD_PORT ;Read PMU status ( y! n2 A4 d& A0 h
TEST AL,2 ;Is Input Buffer Empty?
; o$ p8 M$ j7 F JNZ pmuWait4IBE ;Jmp if no
( z9 l$ e1 X4 c ret
) O! p. S; U7 ]
3 T- A- j! p9 E) R upmuWait4OBF:+ \: m5 z8 P, E
JCXZ $+2
- u/ H+ Z! ~# N, A* O7 T9 n1 l6 T JCXZ $+2
) B# h2 r: E o; p IN AL,EC_CMD_PORT ;Read PMU status % M; n h# C3 ~6 A/ M
TEST AL,1 ;Is Output Buffer Full? 7 J, [6 ]9 `) P {; I; ?9 T
JZ pmuWait4OBF ;Jmp if no
+ }8 Y, `6 v6 H7 }: s ret
, S! h/ Z' _9 O. S
* D9 s+ _% |/ D- n n: Ocode ends
, D- l( N4 K5 L( r( E; t ~end start
2 @# c3 s9 K- V# }9 S
0 M* B% B( g8 G. Q/ g3 |& P还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
& \. k+ u0 J) D& l
e' H( u1 j$ |, o O[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|