|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
+ _( C8 x6 j- S1 ?! B: p可惜读取不到正确值。一直读的是FEh......, S$ U, H" l2 d5 B# m$ q8 ?
希望各位大神能帮忙看看,指点一二。小弟先谢过了。- z, e8 m. ?' _% y/ ~! o6 V" H, Q6 C
5 _$ G3 u5 G" C" n4 r代码如下(masm5编译链接通过,DOS下运行):8 x- k2 e% f$ E5 o0 @* F& u
( j* x& A: ~8 d# i# I' ?
assume cs:code,ds:data
8 O4 A, F$ R4 a2 B% A5 L( M$ j
: p, |5 t* X7 N: _: f* xdata segment * X, V. o, e* Q" X s' n
EC_CMD_PORT equ 66h ;地址端口 / o) D3 J5 }% \( \
EC_DATA_PORT equ 62h ;数据端口
2 h4 U( _: `; ?: a. q! P e' n CMD_READ_EC equ 80h ;读寄存器命令 % o% a; {4 O* y" Q) L9 L
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
6 m _& O: k, r: d9 M6 [data ends* x' d1 n D; `# V8 Z6 h; |2 _
- c' ?, A" Y" h5 fcode segment ( B* }* Q& w" p" q5 |/ F2 ~
start:
8 z% J( \/ U, D5 J( D' C [ mov al,CMD_READ_EC
7 E/ M6 p1 ~7 U3 ~# W call write_ec_cmd ;写80h到0x66h端口5 G" L. i( g+ ?3 |
mov ax,POLLING_DATA
/ Y! G9 R" @4 C7 S/ } call write_ec_data ;写ECRAM地址到0x62h端口2 k: D% j. W1 Z# T ~) T
call read_ec_data ;从0x62h读数据
# X: P0 w0 ^+ u. x4 f
# l* G, L; T2 h# O: T mov ax,4c00h % ]# ]5 H1 E; @# U7 O5 x3 u. b
int 21h: R6 w4 t! w H: o! l" Z
7 K* X F9 o+ iwrite_ec_cmd:
/ M& S9 k1 i) ]+ r- `) f* Y& Z mov ah,al
% F$ K2 ~) `" V5 y2 \ call pmuWait4IBE6 l( q/ W) l& y9 E( j
mov al,ah2 M9 Z+ y+ J) B* i; F& T
out EC_CMD_PORT,al
h" a7 u9 c" X$ K, f& ?0 X ret' h: W' d1 D7 N9 \5 q
2 ^+ \- {% l0 o
write_ec_data:' `5 I9 I! s8 r8 |
mov ah,al
; w4 N7 I0 a) d0 `0 o8 |1 x9 `7 W: Z/ q call pmuWait4IBE
6 F6 E$ j& Z8 N( t i mov al,ah
5 e7 a. F' K; u; c6 H out EC_DATA_PORT,al
! e$ A7 A* T2 A& o7 S3 I/ y; D ret
6 q+ g4 u; z, R8 v* N" A
6 G6 F S* c/ Xread_ec_data:3 K7 S: U2 a! y" H3 f; p# ^$ l
call pmuWait4OBF _: c1 i: }1 O# Y
jcxz $+2
& X' K2 |6 n7 Q. c4 b r jcxz $+2
% U7 y: R, P3 q7 V& w) S! A0 n; v' d in al,EC_DATA_PORT
, d# u) x& k+ U, Z; Y ret
- z& y, B2 u/ f5 ~
0 R3 P& j4 s: }* qpmuWait4IBE:
\; l8 s# J, e( \5 `7 y) R1 B" @ JCXZ $+28 |2 y9 j) v7 X8 P9 k4 s9 @* }
JCXZ $+2 - C+ Q7 k% A6 Z% [" B {( I
IN AL,EC_CMD_PORT ;Read PMU status
; [& J7 v" t% A5 z. h( K+ A TEST AL,2 ;Is Input Buffer Empty? # k) D8 x4 B$ k1 ?) e8 O- F/ @5 @! w, T
JNZ pmuWait4IBE ;Jmp if no / S- U8 i* o8 O9 P
ret
: F$ Z$ h9 E" l. |& D
4 G/ m9 _8 l- k. \( F+ F; rpmuWait4OBF:( H5 U7 B( S& [9 r
JCXZ $+2
0 w# |3 o- N# t: S$ g9 x$ T+ R; e JCXZ $+2
- Y' ^& U" C4 i# ?! U0 S IN AL,EC_CMD_PORT ;Read PMU status - V3 G5 H* h9 K6 e t8 ]; d9 ]- c" x, S
TEST AL,1 ;Is Output Buffer Full? 1 ?& n* w% J! i$ r
JZ pmuWait4OBF ;Jmp if no i' A8 ? @8 ~) C
ret
! R# c& [- I# ^* ~ N/ I3 D
0 B! X( i; h0 n4 M+ K3 y5 mcode ends
. ]3 S- K2 D5 wend start/ M C U$ z+ B" a
$ J; E6 `; p5 l$ F还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。, v0 c3 y! Y4 _6 O- C, K
8 Z; S% Q9 E! j
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|