|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
. ?; p0 D9 G& [- l `4 ]可惜读取不到正确值。一直读的是FEh......
4 {3 f1 C1 s" g9 O7 T- }- ~6 ^2 e* D7 ^ b希望各位大神能帮忙看看,指点一二。小弟先谢过了。. f, t3 S1 O* h- M* z* f& |! Z* k
( F G; Y/ [' u9 d
代码如下(masm5编译链接通过,DOS下运行):
2 X' N' _+ A. a y) j+ Z+ c8 I* Q+ o
assume cs:code,ds:data$ c9 y5 x5 v; a+ M
; X5 X* C0 A2 w" t0 ydata segment . ]* ^6 Q% S! D+ g! A* U) ]
EC_CMD_PORT equ 66h ;地址端口 : Y& X# l5 n2 I0 b5 {
EC_DATA_PORT equ 62h ;数据端口
% X; E, p/ {% u N4 L4 h5 ? CMD_READ_EC equ 80h ;读寄存器命令 1 s9 E- O- ?7 g
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 $ V/ H; f" w2 U) Y! \6 W
data ends# P0 l" W) k8 O" M
( B3 d7 D. x5 }4 V4 G, k1 g
code segment 9 z6 W r& D* ^1 ?; i
start:
; M2 B5 A4 ?4 R" O; M: N mov al,CMD_READ_EC
2 p2 ^4 c2 i' P# x$ j) y call write_ec_cmd ;写80h到0x66h端口2 W @+ F5 S! n. M) ^
mov ax,POLLING_DATA
2 n7 J: g' J) L call write_ec_data ;写ECRAM地址到0x62h端口
% Y6 w Z$ g) v3 ?- M( N call read_ec_data ;从0x62h读数据. x1 b$ N- Q) c- \' h) O8 ]
! c ]& q3 H* r! { mov ax,4c00h
+ z! P/ V' M C! x$ G0 Q# }0 r int 21h7 N8 j7 x" {1 o& U
\! l6 f: I4 _
write_ec_cmd:2 Y1 d8 D! p0 z b
mov ah,al
5 x" w. P) V( D) ]6 e6 {& _! ], x call pmuWait4IBE
. K; v5 S, p; G1 W' F mov al,ah
5 C+ A4 [0 v' v/ t% |2 G out EC_CMD_PORT,al& ~7 u. t' A% V+ m. v( ^* k
ret
& o# u' G2 g# D+ C, M- s8 Z$ ?* m' e7 R: x3 b- P) v/ e% g
write_ec_data:. o' |9 K, S8 G2 m0 h8 R+ l
mov ah,al( e5 T$ h) E& A
call pmuWait4IBE+ J: I) n1 j) b' T8 q$ m% f
mov al,ah
0 k: c2 o) E0 L! r out EC_DATA_PORT,al
6 k) H& L! i/ o: a3 b) B ret
6 A- w( S+ C) O& u) m
" a, K: z) v( r2 Sread_ec_data:0 i* t( T0 E7 p4 t: h3 ^7 y
call pmuWait4OBF
7 a$ y1 f, _, x) \: t0 J! S$ ` jcxz $+2
B4 H7 E! n9 ?5 y' H jcxz $+2
( W5 P9 l( p/ d6 r8 \* w in al,EC_DATA_PORT) w0 P4 h6 w6 l s) C/ h
ret+ u- V" m. G% {: d
& b& `& N/ Z4 U3 g( D1 Z z6 T
pmuWait4IBE:$ k6 d: _1 M4 X( ]4 [5 H0 t
JCXZ $+2
$ K c+ E' ^! s JCXZ $+2
& }' T( @$ i9 `$ @. E* ]' d IN AL,EC_CMD_PORT ;Read PMU status
3 W5 Y' }" C* v3 Z1 \ TEST AL,2 ;Is Input Buffer Empty? 3 R' r* O& g( {6 H* ~
JNZ pmuWait4IBE ;Jmp if no $ h' I5 q% D6 u( W
ret
! {) g* O9 L1 [9 z- ?) ^ `0 L/ ^/ M+ G3 F( e- M& O( M0 _% {+ u" s
pmuWait4OBF:6 @) o1 Y# P3 u+ i( K' q9 b
JCXZ $+2, s1 p4 d$ C4 F
JCXZ $+2
$ A. A! |1 v0 H, P IN AL,EC_CMD_PORT ;Read PMU status . o @/ E2 |! e8 M/ c) I, j
TEST AL,1 ;Is Output Buffer Full? 7 B6 u( l) j) ^9 ]/ o& b3 ~4 P+ A( w' F
JZ pmuWait4OBF ;Jmp if no 4 T/ Y: X/ {6 d* M! U2 M8 c, B
ret |4 Z! B/ f @" y
, o4 P8 M4 X) u" N1 ], ^- vcode ends * H3 f! B3 ?0 m1 H5 l
end start5 T) L. s" g$ d/ m) k# b l6 G* N8 ^
9 `/ _& l9 V7 J/ N还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
2 a) t2 z4 r$ ~. p) U. G) Z
5 |8 S$ J+ R$ h2 s, c4 E[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|