|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。6 p2 x2 w! o$ {# b9 }
可惜读取不到正确值。一直读的是FEh......
* r; H" D$ X7 J% o9 {+ g; u7 H' }希望各位大神能帮忙看看,指点一二。小弟先谢过了。+ G# r9 K- g+ B+ k& X
! c* s* O7 ~% ?+ O9 p% c, A代码如下(masm5编译链接通过,DOS下运行):3 s+ C# s; N1 ^! v
( y; O: B9 G5 D8 v" v7 h# a
assume cs:code,ds:data
& B8 @' T" m! M Q# u; p r: L: [
6 L* q# F' U1 Z$ d( g# ^1 {6 Mdata segment ( p# s: e; L1 @# P6 Q* ?
EC_CMD_PORT equ 66h ;地址端口
$ Z4 p) k7 Z, c EC_DATA_PORT equ 62h ;数据端口 ( g' _3 `) L4 _- {9 T" I( y9 w1 @
CMD_READ_EC equ 80h ;读寄存器命令 4 X! G0 Y; u# t a- P
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 & {& r5 n* w+ I9 X* d
data ends5 b# b: V4 U8 d7 ?# K' V
( O; j8 K0 ~* [1 X2 lcode segment
% o$ y! {% I8 T8 @9 r7 c# g4 v( Ustart:
6 |2 X0 C) u. ]' H* \% m9 l mov al,CMD_READ_EC
" L7 W6 j) Y* l call write_ec_cmd ;写80h到0x66h端口
6 k+ y6 Z. k) d" | { mov ax,POLLING_DATA
2 V9 v' P' X# Q/ m9 u, ] call write_ec_data ;写ECRAM地址到0x62h端口* G* m' s2 k: h
call read_ec_data ;从0x62h读数据# k% Z" t0 |. s4 T6 l. g
* W4 C0 w3 e5 t. S8 o mov ax,4c00h
% M. u; l" x" g, y% R7 n$ ? int 21h+ @( w: ?$ _" ^4 ^
% W2 i, [* Z6 f2 q% uwrite_ec_cmd:& }! q+ z3 `9 \0 v; I' A1 _
mov ah,al- k9 S; _2 [0 i7 n3 A7 T
call pmuWait4IBE
( [: O! i2 h9 j: |# I: p mov al,ah
! [/ p/ Y5 O" R4 L9 f out EC_CMD_PORT,al. t0 v- W* V% D9 b* D; H3 D+ T2 A* c
ret1 n; ]; D( U g) a& S
+ `& `. G# o: I+ j' J- c+ Zwrite_ec_data:
% Q% ?# T5 `5 W" I; { mov ah,al
6 w, h" d. C ^+ Q$ j- z call pmuWait4IBE
" l; g( ~4 J$ r mov al,ah
9 o* ?5 j% Y1 t# b. G out EC_DATA_PORT,al
8 m; d ]- L" P$ d0 V- m ret/ q0 O. D Z6 X1 \# z d" |+ x
6 w5 \; s7 o+ T) q; Z! F9 uread_ec_data:
; n: S5 o& D& D) w% v- J x call pmuWait4OBF& ?9 E) A$ p) z& h5 R% }
jcxz $+2
8 W3 o( A. X. C7 Z. r W2 _) p, u jcxz $+2
' i5 n7 o, q. y9 _ in al,EC_DATA_PORT
; K% e6 W; d0 p/ C ret9 i* X# {0 Z" M+ v, A, U: h4 w5 ~
# Q8 u ]! z2 [9 O1 D5 epmuWait4IBE:; y0 J* {/ A2 L$ k4 K b
JCXZ $+2
5 R6 a0 o5 L$ ` JCXZ $+2 4 w. G4 l8 j& Q2 |/ S
IN AL,EC_CMD_PORT ;Read PMU status # _ Y$ ]* k- I& ~) I- i
TEST AL,2 ;Is Input Buffer Empty?
( s+ ]# F. s( ^" p2 k5 n. y- y JNZ pmuWait4IBE ;Jmp if no
6 b& ?5 I' d+ Y J) i/ Q ret' |+ [# W( Z3 a( Q. j
7 n3 t1 A7 j- }5 h* G- b& b9 ^pmuWait4OBF:, S- J8 x, t. _: F) E$ m; P" d
JCXZ $+2
& P$ [) _7 K1 C9 g6 }* A JCXZ $+2
; C: ~* @6 U) ~1 X. b IN AL,EC_CMD_PORT ;Read PMU status 7 T6 C5 @5 O! k/ U( }# s
TEST AL,1 ;Is Output Buffer Full?
" k" t- y+ k0 I9 a; p1 T" c JZ pmuWait4OBF ;Jmp if no
0 z$ P# K8 G: _, ` \5 A ret1 b% b$ }( w8 W# f
" V7 m# @0 G o5 Z3 mcode ends
3 _8 W6 `* r _* Kend start# }1 @3 H; k: W9 C: k, ^
4 `1 E3 x5 A- h还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。1 r( _! j# C8 M* s' E1 Z$ n! R
4 H0 o" b$ o% P$ E
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|