|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
9 @5 Q- y" _" a9 s8 f可惜读取不到正确值。一直读的是FEh......$ P6 Q T/ z! s: K d$ i) C
希望各位大神能帮忙看看,指点一二。小弟先谢过了。6 T, } @. N8 j4 ^- k$ t7 c7 G
* z+ h! S) L7 R" U U+ h代码如下(masm5编译链接通过,DOS下运行):
8 l0 l7 S5 q3 q' j% \- h/ j$ U5 S+ l
4 _" x: w" p5 n ~assume cs:code,ds:data- M7 z+ |0 p$ q" h" U6 ]4 \
% ]) z! \9 C; F' O. u4 K
data segment
@6 I! D8 r( R EC_CMD_PORT equ 66h ;地址端口
, [6 r% f2 T& X. s, f- a6 V- q* n# z EC_DATA_PORT equ 62h ;数据端口 ) q& C8 g# A) p( B/ m+ { _
CMD_READ_EC equ 80h ;读寄存器命令 + o' A. U+ E# i8 A
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
$ m2 \3 Z! J4 t9 e! |1 ~$ [ [1 Vdata ends# Z2 `0 f2 q X; r, P
$ e& A/ z, e0 |$ E( u- L
code segment 7 ~! z) {/ t+ x. ?0 [# D: e
start: B: v% D. J: S0 ?
mov al,CMD_READ_EC
5 E! r7 D% n5 O8 I0 M/ a7 z B call write_ec_cmd ;写80h到0x66h端口
8 k1 _" ^) p/ _ mov ax,POLLING_DATA 9 F! `* [4 h' j
call write_ec_data ;写ECRAM地址到0x62h端口
9 J6 r8 ?) F" A5 D4 W call read_ec_data ;从0x62h读数据
7 m' ^, H$ T4 P. L4 x
+ u7 H- A- i, d3 Q mov ax,4c00h 8 Z" b: k# i. B8 B* {
int 21h
; g! b1 h& \4 r M
; \. y' u. T/ B- n5 ^* N6 g2 Mwrite_ec_cmd:& Q6 U+ o) @2 |
mov ah,al
! Q, Z% u w, H: U. H call pmuWait4IBE
* H- U* ?2 f* }3 x* s mov al,ah
4 T$ b5 j' T0 H$ N out EC_CMD_PORT,al
! p+ I2 p# E( T4 R/ b6 _- q! b* E ret
! D( e. {. `+ l/ h% `) d/ i' w6 J% e% C
) y3 k0 U6 q# Q( s/ Q& hwrite_ec_data:3 _5 d2 p k4 q' u& u5 u
mov ah,al
0 t* w0 O e8 L3 s; W& S call pmuWait4IBE/ q5 \1 t- v2 c$ K% N S- O
mov al,ah; M N+ g2 A% D2 j' L9 N$ Y
out EC_DATA_PORT,al2 m1 j* G) K! ]7 r6 r0 Z( k
ret6 g& E3 l u& h& ?& h
% s" ?; |7 P1 O# [
read_ec_data:" ?- n1 H7 ]& t# V' E2 D
call pmuWait4OBF4 x! {4 V# M/ ^" Z. @
jcxz $+2% w. I' }$ d/ X; y% A: ~
jcxz $+2
$ r+ P$ _, i0 u4 G( G+ U in al,EC_DATA_PORT
~# @* N4 b' C8 y ret
1 k% Z" Y9 N3 \) o
9 E0 F0 ]" b- U" U7 ~pmuWait4IBE:
6 D+ q8 Z+ ?/ E6 [) P+ n JCXZ $+29 Z1 z1 `% S3 Q9 w7 n% j' D1 \
JCXZ $+2 8 Y$ b8 x! M7 z2 O' Q$ y
IN AL,EC_CMD_PORT ;Read PMU status
3 E7 \ j* S! U3 R/ H TEST AL,2 ;Is Input Buffer Empty?
( m$ h9 v; @$ Q3 j/ T# O JNZ pmuWait4IBE ;Jmp if no 9 W! [! O0 z/ d+ q+ i& `0 v7 k
ret8 |& X# q \: a
( w2 g/ t" W6 P9 T$ DpmuWait4OBF:+ s4 y5 x! S0 V d
JCXZ $+2
) D% n" x" G+ }' _% E+ s; M JCXZ $+2
9 Y1 b% k/ m. b, h6 | IN AL,EC_CMD_PORT ;Read PMU status
) o! f3 I) u! J- i* R TEST AL,1 ;Is Output Buffer Full?
6 w+ b, _; ~" a4 z( o; r7 Z JZ pmuWait4OBF ;Jmp if no
H3 y4 m4 g8 j7 [2 E/ O# W ret6 w% | [% |, ?7 _
& e' S" v' j4 _9 B- N2 v- ]: Pcode ends
4 p; t$ O. c& P: u# Mend start
# g5 }- s0 C) L# [5 I
- }/ N; J: f2 N' j% O( s还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' y' w" N( F, b9 a7 U& z1 x' E) ?( w9 ]( `" Q5 D
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|