|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。6 O+ E/ t' }' z/ V
可惜读取不到正确值。一直读的是FEh......
, ^, j: i3 i) q希望各位大神能帮忙看看,指点一二。小弟先谢过了。
7 u. g4 w9 g% ^! x" t U
/ i' q2 v, w4 R代码如下(masm5编译链接通过,DOS下运行): L& C8 s# q6 z* F" r
" ~7 i4 W+ O, _2 h, bassume cs:code,ds:data
( n) A' `( n; C. l" `. s+ x& Q! O. p5 m+ L2 |8 E
data segment
) h) \4 a$ `5 R) S8 B$ y) s EC_CMD_PORT equ 66h ;地址端口 0 ^0 O$ q! S& t n, v2 O6 A" C a
EC_DATA_PORT equ 62h ;数据端口 + W7 g; G/ N; X3 w) P
CMD_READ_EC equ 80h ;读寄存器命令
7 J% q. F8 e' s( Z/ `0 k, Q, x' \0 p POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
. x( @ c# X: Jdata ends- z' }& s" u0 h
/ l( J5 p4 f% \% H
code segment ' C- W5 E3 E6 e: S* _
start:
: c! m5 e4 U% ~ mov al,CMD_READ_EC
& p1 z5 O6 y. B( }+ Y call write_ec_cmd ;写80h到0x66h端口5 N% v# }! h7 {$ ~
mov ax,POLLING_DATA 7 v N& h+ n5 W. s1 d2 l5 Y$ O
call write_ec_data ;写ECRAM地址到0x62h端口- M* E$ d; w0 t; Q) y$ o
call read_ec_data ;从0x62h读数据' _. m) F/ m# d2 p: l
x( c% z; M+ X. ?& W% i
mov ax,4c00h ! x* J$ L; c. F- p# L4 K0 u& w8 @
int 21h* g* |# U; V6 h6 y
& {' Z @- R7 p3 \2 }% [6 owrite_ec_cmd:
+ n2 d: t* {. n mov ah,al
$ L& L: H: s7 P. B call pmuWait4IBE6 Q4 F9 H2 B) ]9 n. z$ _8 B
mov al,ah
) c% U/ x a7 e. v i* a' h0 C6 s out EC_CMD_PORT,al) p; [* a- w+ A, j
ret
1 L9 b3 E$ m6 a6 U# w) U4 ?; y7 @1 r* F/ m
write_ec_data:
% x' r- G C0 q" y mov ah,al
6 ?' A8 o- i: @% d3 A# H call pmuWait4IBE! ]4 z( `* N& D9 B
mov al,ah" \3 D* @4 }. m' B9 _0 U2 P
out EC_DATA_PORT,al
- E) P3 }$ }: }9 s4 {5 Q ret+ P0 _. J6 p: V0 _
, \6 D+ B) V& {; Fread_ec_data:9 j# b, a+ s: |9 u3 }
call pmuWait4OBF% I, x7 u" i% u5 o
jcxz $+22 P0 L n1 G3 Q7 }
jcxz $+2
/ R+ E8 G0 Z% [ in al,EC_DATA_PORT
! e9 c9 r4 u7 k% ^0 N ret
& V6 E; j7 }- J V4 h2 j
! Y! P l& ~6 f- MpmuWait4IBE:. k: _0 a) b& d/ p: v
JCXZ $+2) O- P# {$ r2 K+ V9 B
JCXZ $+2
! r7 t6 G( \3 G/ K" U IN AL,EC_CMD_PORT ;Read PMU status / m, B8 H" P1 @2 F% D
TEST AL,2 ;Is Input Buffer Empty? * g; d3 u; j' m5 }( Y: [0 y
JNZ pmuWait4IBE ;Jmp if no
7 q5 y3 U7 N. Q2 E( N- F6 c3 _ ret' D- I8 e" C& Z! z* w) H
$ s9 S- h c$ u& y* ]/ e8 g ApmuWait4OBF:
3 j$ X( l& {- \8 B. E# f0 k- p" v3 R JCXZ $+2
( K, {& h2 v8 x7 y! D3 P JCXZ $+2 9 j, i6 Z# v: _' h2 W* \
IN AL,EC_CMD_PORT ;Read PMU status
m f, ^9 R; g TEST AL,1 ;Is Output Buffer Full?
; p2 ]! G" L- P [$ b4 Z# k JZ pmuWait4OBF ;Jmp if no 6 {' @* n7 e5 N o
ret
. _# ~0 q- A( P
3 O! V. Y* j; j" D) } B- Bcode ends
! G$ `1 R9 S1 Z# U0 n7 l' Gend start O% K+ J; e% n, b- ]# H0 x0 G3 E
/ X1 i/ U4 K2 p; f. ^" A; W
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
. ]* _! V7 `# M1 ?3 M2 [
/ U3 a7 ]/ v2 L: ?% e2 T0 y5 z4 E[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|