|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
0 s# W0 s; A" E! S/ X; ~7 b可惜读取不到正确值。一直读的是FEh......( D2 x% P1 S$ S8 v
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
' m* R6 i0 }, ~$ }, j+ w
3 O6 \# @( g( n, D \代码如下(masm5编译链接通过,DOS下运行):7 [# O% ^1 c& w0 D+ q
: n: S" l& K/ T9 e# m& n
assume cs:code,ds:data/ w# C# S$ Z& G& |- P% C
- ]% p5 Y6 S/ K
data segment
& S- ~: u3 O: V EC_CMD_PORT equ 66h ;地址端口 0 ^0 s9 C" X4 K# l# |: \
EC_DATA_PORT equ 62h ;数据端口
+ ] Y6 S) n- q6 t! T8 V4 @ CMD_READ_EC equ 80h ;读寄存器命令
, q) [$ f$ H+ \3 I POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
0 N6 P4 U, `' A/ N& F, {# ?- ddata ends
% l2 Y2 E7 V2 W& y9 p( Y ' c' C3 j+ K# \9 F7 f ^
code segment & f9 Z' H& g) {4 M
start:
1 n$ ^" \5 }* I" G9 a v mov al,CMD_READ_EC
/ D/ x1 T: Z9 R: w' l call write_ec_cmd ;写80h到0x66h端口% P& Z4 K( K! b% P8 A
mov ax,POLLING_DATA ; i% q: ~- F) k! H
call write_ec_data ;写ECRAM地址到0x62h端口$ @% s8 E: n- v% q4 d4 [
call read_ec_data ;从0x62h读数据
8 N: t( K; k7 p _/ V
+ s; `8 M4 ~5 N# ~7 G" h7 Y mov ax,4c00h ; z+ {* y1 [. b1 P" }2 R+ S* K7 ?
int 21h
& c0 {: `/ N4 k0 q) \
3 w0 f" n& `) V/ w. Twrite_ec_cmd:
! z7 }, B( j8 X, {0 u. L mov ah,al# o# s6 Q, ?- G( |
call pmuWait4IBE
8 g9 a' ]3 l! K4 R! ?$ ^ mov al,ah1 P1 L7 w" B( }+ j1 p. K7 Y0 O2 Z5 t
out EC_CMD_PORT,al
; s/ @# ?5 u: x; r; l; R+ e& |( E ret' s: d5 p4 Y0 I) ]2 a, h( @
5 S T3 u. P- D* a. v1 m6 A2 ~
write_ec_data:
% o/ C! v; z6 |6 b* s1 q, S) K" B mov ah,al* i8 a0 s# G b a
call pmuWait4IBE
5 G o+ [9 d/ m, K1 J% g5 E6 d mov al,ah
3 m* Z7 f9 l% P5 i out EC_DATA_PORT,al0 W0 W1 C! s3 s: {! H2 V: S
ret0 k) m: m; I; s2 v. p- r( g6 E, \
/ D/ a% ]! D* G1 J$ i; v q5 Sread_ec_data: B4 `' o9 a) j4 B
call pmuWait4OBF8 G' p/ T* Y: T7 |+ S
jcxz $+29 ~" I( G: v4 ^5 C/ {2 [5 o
jcxz $+2$ q" k, }/ e( ~" m4 o
in al,EC_DATA_PORT
) ^ s G& m6 \8 i% h( @ ret
a# H4 N! x5 `* h
! N* J0 N' n/ W' M( i0 p% `pmuWait4IBE:
3 c+ x+ h+ z, ?; y JCXZ $+2
" g4 @7 x) F& T! Q$ J JCXZ $+2 # ^5 H1 `6 r) v0 I2 T7 O+ Y+ ]! i
IN AL,EC_CMD_PORT ;Read PMU status
: x2 F% ]" X+ a8 N/ e TEST AL,2 ;Is Input Buffer Empty? ; x; }- K ?1 }. ]7 V
JNZ pmuWait4IBE ;Jmp if no , |2 A5 f6 E% G" O6 u
ret7 m1 B, e" X$ t
) \: @4 b1 w' k, p2 w( S4 @. N
pmuWait4OBF:' _0 d1 ~, b# |) s6 t
JCXZ $+2
& P3 _: [4 Q9 T8 V# v. H JCXZ $+2 , M" g4 q! e# W* L* w
IN AL,EC_CMD_PORT ;Read PMU status 6 s) n! Z' D6 P R
TEST AL,1 ;Is Output Buffer Full?
6 R" H4 M# u- l$ O& g2 [ JZ pmuWait4OBF ;Jmp if no 3 W9 F8 c* @0 s9 Q6 ~
ret" @6 T6 W% j, D
6 T; i4 n7 z8 U: ` I( M% H
code ends 9 h# E- `) P: L0 ]
end start/ ~7 y- |! h9 o4 N P$ r* J
1 y8 n% P4 [% t$ w
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。6 h$ N4 h9 r) G
2 F* E! t) |4 A$ l
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|