|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
$ l3 _0 i) ?3 _. u0 X: H; c' _' K9 o可惜读取不到正确值。一直读的是FEh......
4 n7 j7 @# @. i' D3 F希望各位大神能帮忙看看,指点一二。小弟先谢过了。
! H% E0 e! R* w$ E0 W; d3 k k# [1 |& V& ~! J# u! g4 N0 R% n
代码如下(masm5编译链接通过,DOS下运行):
* E2 _0 a* v0 Q8 @$ y$ k5 k/ U" c: J8 s y* q0 j9 N: o) O. I$ B8 { }
assume cs:code,ds:data
1 b: C# o- h# h4 k6 q$ j+ Q* F- }8 [3 |
data segment 8 C6 j) o* ^# B4 m3 L* q
EC_CMD_PORT equ 66h ;地址端口 l0 E: W4 i& {9 Z9 M
EC_DATA_PORT equ 62h ;数据端口 7 R, M1 V" Y, ^5 \: J
CMD_READ_EC equ 80h ;读寄存器命令 * L6 r, q' ]! A3 Y$ P: P# D# r
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
, r- m( q1 [1 J1 S0 |data ends- N: F0 g+ Z$ `7 \! h2 ]
" o; j7 }1 C. C2 s) x& p
code segment + j5 h" ^* ^3 l+ x
start:
7 E/ N8 D+ x9 Y7 P4 | mov al,CMD_READ_EC
! G [: Q3 L C5 P3 q call write_ec_cmd ;写80h到0x66h端口
4 f! @6 E. F J mov ax,POLLING_DATA & R3 ^- U6 T' P
call write_ec_data ;写ECRAM地址到0x62h端口
R) T8 f/ n8 F2 Q8 v call read_ec_data ;从0x62h读数据
+ j& G- S& Y9 f! I$ k, j% q0 t, P2 e" ^. l& r: R
mov ax,4c00h
% N5 r+ I6 ?3 d |( ^' _( P5 F int 21h
/ F3 H6 S; u8 F, P7 v1 O3 r( a w' s: C
write_ec_cmd:
+ [2 W; F. x+ _0 _) H: ^ mov ah,al5 @0 J, n! J- @; H
call pmuWait4IBE
p( ]4 }7 t( o# \) ~7 ~; o mov al,ah
* l' d' b% O1 e9 @ out EC_CMD_PORT,al- D. y% i0 M" p9 W9 N) t
ret' t- R( {; Q. |, x8 J- p
/ \8 o# j; r; \ P5 m
write_ec_data:
% B. S1 f; l/ j( F% [ mov ah,al
1 m1 \) f2 [4 m6 e call pmuWait4IBE
2 R1 [' V' {3 G* `( z; i mov al,ah9 t3 a: J m8 R! j$ v
out EC_DATA_PORT,al
+ B6 c! o) R) @+ I0 K ret7 D! u$ F1 a: z9 f
3 x7 c3 Q' Q+ y0 N4 j L- a
read_ec_data:* x* k0 ?5 X' r& b
call pmuWait4OBF
$ W7 L" g) g8 b9 ?& i/ L jcxz $+2
+ ~. `0 E. }5 g8 R3 [$ V. { jcxz $+2( b C( j& V3 B3 O* U
in al,EC_DATA_PORT
, _* A' W, w3 i* s9 k ret6 ?" J& p- A( g$ d# [ I4 O
, z# x" c: e* m. U# y( d$ YpmuWait4IBE:3 V1 M2 f/ q# J" } |
JCXZ $+2+ J$ b; z: Y' v
JCXZ $+2 " U4 A* p3 i& |2 r9 o0 f/ E) O: h
IN AL,EC_CMD_PORT ;Read PMU status
- d0 b' n5 A) P$ u) [ TEST AL,2 ;Is Input Buffer Empty?
4 f- I& }/ o7 u( P JNZ pmuWait4IBE ;Jmp if no / G# z+ A! s- c+ ^. @ l4 O
ret i: m5 ? W0 F" K) W ]
+ k* B: o+ ^7 P8 C! [# epmuWait4OBF:6 d: P6 J8 y6 S2 [) t
JCXZ $+2
! v# p; N" ^0 h: q7 Y T JCXZ $+2
! P7 C: P7 \8 f* R7 M IN AL,EC_CMD_PORT ;Read PMU status 3 [# e1 g2 R9 k, ]6 \( n% z N
TEST AL,1 ;Is Output Buffer Full? : J2 q( {% R2 Y2 @7 _" U) F
JZ pmuWait4OBF ;Jmp if no
, F6 {, I$ q' \6 L ret$ |8 O2 s; c4 _* d* H2 s7 ~' t
; f) G8 b, z U2 d2 |
code ends
9 Z5 B( m p- I: Y& w" s2 X9 Mend start
0 D5 H4 P: U5 w! X: O7 d
7 G6 s; G: A. u% f3 `! u& k还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' d( p) ?+ P9 `8 G) F2 ?& @# O+ g9 k
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|