|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。, z6 F; l0 @$ E# i
可惜读取不到正确值。一直读的是FEh......
0 e& p# p; L" j希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 R! N z! m- e
/ ~* b: V( @) w1 _代码如下(masm5编译链接通过,DOS下运行):, l/ M7 N4 G6 P$ n
6 r2 z3 C! D" F: F. i. P, X. [
assume cs:code,ds:data
" R) l: z: s ^& O4 f! m) b' J6 `# ^( h5 X' ^$ N1 q1 u+ m w; F
data segment 3 ~* K; `* T {+ r
EC_CMD_PORT equ 66h ;地址端口 : }, u( r" x0 I; s; ^9 b
EC_DATA_PORT equ 62h ;数据端口
+ h3 Z( z- }' i2 M* x+ x CMD_READ_EC equ 80h ;读寄存器命令 9 b5 T6 [, M, ~) H: W. z7 N
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 ; v: w% X" G& Y% h; h
data ends
2 ?; L- M: P; p7 v' ? & B+ U: D- q1 T, c/ k$ ~6 M
code segment
4 C/ ^/ w: m) l8 N# h) y" L1 gstart: / O: b! {2 I @# u$ ]; z
mov al,CMD_READ_EC
$ `; ]$ x5 }/ P0 b call write_ec_cmd ;写80h到0x66h端口
1 K; \0 L- i1 Q2 B& h mov ax,POLLING_DATA ! ~, b3 J9 k k* c/ U |
call write_ec_data ;写ECRAM地址到0x62h端口
! p- ^ f' f5 ^/ q call read_ec_data ;从0x62h读数据
. A% b4 { N+ E$ ~) ?- j7 d+ C2 G; k; K
mov ax,4c00h
+ _$ |- L1 M. o int 21h" R9 N( I- N/ z" c, ~8 C7 h5 \4 Z
1 b0 c- S; z: X0 @; e7 g9 Y$ W! Dwrite_ec_cmd: ^* ^2 L, O, I5 u+ a8 W3 f
mov ah,al
+ h# b* t7 v% D5 Y call pmuWait4IBE4 [9 m! {- B+ W. s7 p
mov al,ah
2 l7 z l5 Q2 b2 Z( t out EC_CMD_PORT,al
X) q. r( z/ C7 x! { ret
M1 l8 o3 R" b% P2 b( m) X ^2 f r
write_ec_data:. z& Z9 f U0 o* k8 |7 y
mov ah,al
+ U# S/ X+ A1 L# C2 j4 t ]* I3 J call pmuWait4IBE
6 v: ?3 j% K: ~" K0 K( `) \ mov al,ah
5 j" N6 L3 [0 S/ B/ x& f4 i7 ] out EC_DATA_PORT,al2 Y; ^) W- l- |+ ?
ret. k; z Z* k) t/ q1 q9 ]+ w) A) |
& |* r- s. g; [, i" ~5 o
read_ec_data:
7 M' t$ m- ]& M! c8 ?& z call pmuWait4OBF4 Z# A# S8 @% Z
jcxz $+2
; D7 X% Q8 O$ E8 O8 Z jcxz $+2$ @6 l. ?' p3 y4 k# \% k
in al,EC_DATA_PORT5 A: ~0 C! K6 [7 O! R, u. C
ret, d$ B4 J# ?9 s* J5 {
* a; \6 R F9 U. \9 m, g: k
pmuWait4IBE:9 m- e3 D' x8 ?' u. k7 ^) Y+ z7 q
JCXZ $+2
+ Z& D. d+ m f$ e JCXZ $+2
: x, Q4 Y( d4 j5 J2 v0 i IN AL,EC_CMD_PORT ;Read PMU status , y, b7 {: v( c8 m j
TEST AL,2 ;Is Input Buffer Empty? ' O0 J+ `* `8 L6 s/ k
JNZ pmuWait4IBE ;Jmp if no 9 {1 A t* B: j' t) A8 |' d7 O7 x
ret. Y. _; A! x3 G; o, ?: `. P" u# V: \
" o3 p3 ~7 L" C7 spmuWait4OBF:3 P& v% x) [6 ?# `4 E3 }( v
JCXZ $+2
- S! e2 ?5 ?1 X( a JCXZ $+2 6 ]9 t8 y9 r7 _+ Z: g5 R. n8 \0 ~
IN AL,EC_CMD_PORT ;Read PMU status
) S: @& G. W! P5 X* Y4 p TEST AL,1 ;Is Output Buffer Full?
0 d5 o, p, Q k6 }& S4 Y' C) ^ JZ pmuWait4OBF ;Jmp if no
- i: j1 ^, v% x, Y Q ret- @, r& P+ g" t7 r1 S
' l9 _$ A* J1 ^5 p4 F7 Gcode ends
+ r# k. |: l* Dend start
' B* Q. p& |9 z
2 u. l. r9 W: w4 r( H2 ^0 i- R还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。# }9 v% j4 W; i
* u3 I4 V6 y% d
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|