|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
0 E, m1 |9 s9 N可惜读取不到正确值。一直读的是FEh......1 j* K- {/ f+ j8 R6 G( J+ F3 r7 l
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
5 e7 @7 y: Z& w- H
) \2 u0 |2 }/ N* {代码如下(masm5编译链接通过,DOS下运行):+ u0 @9 j, ?9 p6 x% L
% b* f' `; u' ], p2 H1 ?3 eassume cs:code,ds:data, Z# s \- k# A& R8 J* D. E8 @
7 p4 E2 K7 m% e8 D9 \3 J
data segment
9 C# S9 M4 _& G- ] EC_CMD_PORT equ 66h ;地址端口
1 y# A( C" o" ^; G EC_DATA_PORT equ 62h ;数据端口 ) e- ]9 M; A: K' J
CMD_READ_EC equ 80h ;读寄存器命令
6 s1 }8 y' E6 r/ n- j3 X POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 1 j x3 c7 F/ I9 [/ j+ r7 U0 ?
data ends
4 C" n0 g) D+ N U( t' a ! @5 P! k+ Q! }6 ?3 ~: R* d; `( m5 y
code segment
6 h0 }$ x' E+ S3 ?, N& R* qstart: ) l# ]8 A- j5 Q5 O% ~
mov al,CMD_READ_EC
2 ^/ j. g& @" a" R9 T- C/ m call write_ec_cmd ;写80h到0x66h端口( V0 P* O: J1 ^1 {3 a: z6 D2 W
mov ax,POLLING_DATA 2 F y9 A( P6 t* C6 T% w5 ]
call write_ec_data ;写ECRAM地址到0x62h端口
; T8 N) F# n) K call read_ec_data ;从0x62h读数据
& P* J# d/ e$ {: n* a3 U' U# D! u/ r' |9 P
mov ax,4c00h : ~* [( U& |( ^1 S# {1 s
int 21h
) J0 @' O+ i, z# S6 R1 q
; `1 @+ Z8 k( j5 L$ f1 [write_ec_cmd:
; u) R# L* _ u8 p! S/ m* Z mov ah,al
2 O' w( @5 P* j$ I call pmuWait4IBE
; L' v3 T3 r) R; d mov al,ah
" e8 f8 w- |! `8 g+ v out EC_CMD_PORT,al$ {( K) R0 n3 d7 {, O
ret
0 Q7 N: p- Q( b3 L: V) O4 H3 W5 [% Y: {
write_ec_data:8 n! \/ j' v1 {' y- x8 o0 j2 }1 ~ A
mov ah,al5 X( Z' `0 v3 g( E
call pmuWait4IBE
+ D$ [# L3 i" s* M( v$ E5 U mov al,ah
M/ j! }1 R& L( }, x: p# g" S7 c1 i) k out EC_DATA_PORT,al
8 ^: S! O; v- l% d ret
4 m& y: m8 ~% R" G% z5 n( r; x
# A4 e8 e% T* i( _: Uread_ec_data:
- M8 Z3 l- ?2 p! [% \ call pmuWait4OBF
( e6 \2 x8 V8 r$ z jcxz $+2- a( l. E6 s" @6 P# f
jcxz $+23 h) o! q4 |6 z- l) O
in al,EC_DATA_PORT, f$ _& k& c; U8 W+ C: U! O
ret' d; H4 w8 J- v$ u4 ]7 K
' E( b: K6 D0 }1 spmuWait4IBE:
6 B% C/ K- k! _) }& k JCXZ $+2
3 C: O& y7 {8 P0 R1 E JCXZ $+2 ; H$ l5 y5 u; `+ v' `
IN AL,EC_CMD_PORT ;Read PMU status 9 t3 r- U! L5 j
TEST AL,2 ;Is Input Buffer Empty?
+ @/ F9 |4 X8 o0 l$ h JNZ pmuWait4IBE ;Jmp if no
9 O" x+ U ^ p; s* K$ M8 S ret
" ?1 r% R$ E2 Y- M' R4 a6 R: {/ L( \+ I& V K# Q; W" D! u
pmuWait4OBF:9 ^( V0 I0 l n+ y1 Z
JCXZ $+2
# \8 H L$ F# n9 \/ ?/ a JCXZ $+2 ( C% s' d; Y6 @- S
IN AL,EC_CMD_PORT ;Read PMU status ; @1 @5 k1 F5 C! y. {0 G
TEST AL,1 ;Is Output Buffer Full? 5 v3 o' a9 u3 a+ `
JZ pmuWait4OBF ;Jmp if no 6 ]6 U! ^% b3 \/ E/ J0 i- {2 C
ret" q0 Q9 G ?7 q
6 F: [6 J4 b4 [2 B
code ends
' o* D) I) b0 d5 i- F, }, Tend start
+ E: ^4 [/ F9 u8 r
+ V# ?( ]; |- F) K: s; |/ g# ]还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。( f t9 P0 K) K* f) Q% J; P
7 K1 e- i, E$ ~1 {9 `" B
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|