Cteni portu ISA

Igor Cesko cesko
Středa Březen 17 11:49:09 CET 2004


  Zdravim Vas

> Neposkytl byste prosim kousek kodu jak an to?
> Potreboval bych prenaset data do PC rychlosti
> 384kB/s. Nevite jestli se u portu, ktery je nastaveny
> na ECP/EPP daji cist (na ktere adrese?) datove piny?
> Ja bych totiz potreboval ve skutecnosti prenaset 256Kslov/s
> a ta slova jsou 12b, takze bych cetl datove piny + ty 4 ridici.
> 
> Diky Pavel Krejci

  Ak potrebujete 256kHz x 12bitov prenasat cez ECP do PC tak 
musite citat rychlostou 512kHz, lebo musite precitat 2porty - 
datove a riadiace piny sa totiz nedaju nacitat jednou 8-bitovou 
instrukciou instrukciou. 
  Ale je tu dobra sprava na zrychlenie software: tie 2 porty sa daju  
nacitat jednou 16-bitovou instrukciou, lebo lezia za sebou (378-
datovy register, 379-status register). Do programu jednoducho date 
citanie zo 16-bitovej adresy (in ax,dx  ; slovo:=portw[$378]  ; 
inpw(0x378,slovo) ) a hardware ked zisti, ze nie je mozne citat zo 
16-bitovej adresy, tak to rozdeli na dve 8-bitove citania z adries za 
sebou. Trochu to zrychli software, ale v skutocnosti sa aj tak cita 8-
bitovo (mame mensi pocet cyklov citacej slucky a odpada urcita 
rezia programu).
  Osobne mam skusenosti z ECP prenosom - to vsak chce 
hanshake od externeho HW. Ale cez DMA prenos cez ECP 
dosahujem asi 500kB/s (pod Windows). Dalsia vyhoda DMA 
prenosu je, ze to ide na pozadi (ja s tymi cca 300kB/s generujem 
priebeh do externeho HW na pozadi Windows a vytazenie 
procesora je asi 30%) a prenos je plynuly - neseka ho ako pri 
programovej slucke, ked Windowsy prepinaju tasky.
  
  S pozdravom
                               Igor Cesko

P.S.: Prave som to 16-bitove citanie v slucke otestoval v Pascale a 
vyslo mi z toho ze 1milion vycitani 16 bitoveho slova (obidva porty) 
trva 2.25 sekundy => cca 450kslov/s (pre vasich 256kslov/s je to 
vcelku vyhovujuce). Tu je ten test (da sa este optimalizovat):
     GetTime(Hour1, Minute1, Second1, Sec1001);
     for i:=0 to pocetLoop do
         begin
              asm
                 push ax;
                 push dx;
                 mov dx,$378;
                 in ax,dx;
                 mov slovo,ax;
                 pop dx;
                 pop ax;
              end;
         end;
     GetTime(Hour2, Minute2, Second2, Sec1002);
     {tu je vypocet casu}
     writeln('cas citania portu 378: ',cas);


-------------------------
Ing. Igor Cesko
Hardware & Software
E-mail: cesko@appliedp.sk

Applied Precision Ltd.
Technicka 5
821 04 Bratislava
SLOVAKIA
Tel,Fax: +421-7-4342 6628
Tel:     +421-7-4363 3151
Tel:     +421-7-4333 7340
E-mail:  info@appliedp.sk
Web:     www.appliedp.sk
-------------------------







Další informace o konferenci Hw-list