<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1250"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Dobry den,<div><br></div><div>vrele diky za Vas cas i za velmi poucne cteni.&nbsp;</div><div><br></div><div>Co se tyce toho RS232C na Unikarte (mam jednu z posledni varky od B. Novacka), chci ho pouzit na komunikaci pres UART rozhrani s mikrokontrolerem, u ktereho se mi nedostavaji nozky na neco slozitejsiho nez je asynchronni prenos, proto se snazim resit bufferovani po svem.</div><div><br></div><div>Ke zdrojaku:</div><div>1) a 2) jsou jasne; onou “posvatnosti” adresy 0x1039 jsem mel na mysli prave situaci, kdy je dolni ROM primapovana :-) Im 2 mi take prijde elegantnejsi, i kdyz pro rychle (a hlavne laicke) experimentovani slozitejsi, a tudiz az druhy v poradi.</div><div>3) Aha, to mi nedoslo.</div><div>4)+5) Rozumim.</div><div><br></div><div>Co me ale stale mate je fakt, ze jsem na fyzickem pinu OUT0 na 8253 nenasel zadnou aktivitu, ackoli citac CTC0 prokazatelne (snad) bezel. Zkusim totez promerit pri nejake “obycejnejsi” cinnosti (beep), aby bylo jiste, ze je chyba skutecne mezi zemi a klavesnici.</div><div><br></div><div>Jeste jednou dekuji a jsem s pozdravem,</div><div><br></div><div>MM</div><div><br></div><div><div>On 1 Feb 2017, at 16:31, Michal Hucik - ORDOZ &lt;<a href="mailto:ordoz@ordoz.com">ordoz@ordoz.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
  
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix"><br>
      Dobry den, zkusim to vzit postupne:<br>
      <br>
      Co se tyka implementace RS232 v Unikarte, tak nevim jakou mate
      verzi. Pokud tu puvodni, kterou jsem vyvijel spolecne s Vaskem
      Peroutkou, tak ta - pokud si pamatuju umi pres API nastavit vse,
      vcetne bd, HW/SW rizeni toku a nastaveni limitu pro interrupty z
      bufferu RS232... Pokud mate tu novejsi verzi Unikarty od Bohouse,
      tak tam bohuzel netusim jake jsou moznosti obsluhy SIO.<br>
      <br>
      Podival jsem se na vas zdrojak. Zkusim to bodove:<br>
      <br>
      1) Jen drobne doporuceni - pro umisteni obecneho programu bych
      spise doporucoval rozsah adres 0x2000 - 0x7fff, kde mate bez
      ohledu na rezim, ci mapovani vzdy zaruceno, ze tam bude RAM<br>
      <br>
      2) Pouzivate IM 1, coz je rezim, ktery pri interruptu zavola RST
      0x18 - zadna posvatna adresa na 0x1039 neexistuje. Bud si musite
      odmapovat dolni ROM a umistit na adresu 0x0038 obsluznou rutinu,
      nebo je potreba pouzivat rezim IM 2 u ktereho si na nejake sude
      adrese v pameti ulozite interrupt vector - adresu interrupt
      handleru. Horni cast adresy vectoru vlozite do registru I. Dolni
      (vzdy suda!) cast adresy se posle na ctrl port prislusne brany
      PIOZ80.<br>
      <br>
      3) Vsimnul jsem si, ze vas interruipt handler konci instrukci RET.
      Vzhledem k tomu, ze interrupt zavolalo PIOZ80, tak mu musite
      sdelit, ze obsluzna rutina uz skoncila a je mozne zacit opet
      strasit. K tomu slouzi navratova instrukce RETI.<br>
      <br>
      4) CTC0 nastavujete do rezimu MODE0, tzn. ze ve chvili, kdy
      zapisete kontrolni slovo, tak CTC0 output prejde do stavu "0" a
      zustane v nem naveky, nebo dokud nedokoncite load. Pak se spusti
      odecet a na jeho konci prejde CTC0 output do stavu "1", kde
      zustane uz naporad. POZOR: CTC0 je do PIOZ80 pripojeno na PA4 pres
      invertor! Vas interrupt controller musi byt tedy citlivy na uroven
      HIGH.<br>
      <br>
      5) Aby jste se vyhnul tomu, ze prijde interrupt drive, nez chcete,
      nebo naopak, ze neprijde vubec, tak doporucuji pri inicializaci
      dodrzet nasledujici poradi procesu:<br>
      <br>
      - sdelit procesoru DI<br>
      <br>
      - optimalne bych pres PC2 na i8255 zablokoval interrupty z CTC2,
      aby se nam do toho nemotaly<br>
      <br>
      - poslat CTRL MODE0 do CTC (output prejde do klidoveho stavu )<br>
      <br>
      - nastavit registr I a vlozit dolni cast interrupt vectoru do
      PIOZ80<br>
      <br>
      - dokoncit inicializaci PIOZ80 s tim, ze ve chvili kdy se
      nastavuje Interrupt Controll Word ( ICW - xxxx 0111 ), tak 4. bit
      nastavte "1" - tzn.,&nbsp; ze bude nasledovat IC_MASK. V tuto chvili se
      provede reset pripadneho interruptu, ktery by tam mohl zakerne
      cekat. Ve chvili, kdy zapisete IC_MASK, tak se provede scan stavu
      portu a vy nutne potrebujete, aby byl v klidu /CTC0 = "1"<br>
      <br>
      - sdelit procesoru EI<br>
      <br>
      - dokoncit load CTC0, cimz se spusti pocitani<br>
      <br>
      Vic mne toho ted od pohledu do toho zdrojaku nenapada. Dejte vedet
      jak jste dopadnul.<br>
      <br>
      Michal<br>
      <br>
      <br>
      Dne 1.2.2017 v 15:05 malinsky napsal(a):<br>
    </div>
    <blockquote cite="mid:3EC50E50-75ED-45A4-ABBB-B0BA514ED39C@gmail.com" type="cite">
      <meta http-equiv="Context-Type" content="text/html;
        charset=windows-1252">
      <span>Zdravim vsechny delegaty sharpi konference!</span>
      <div><br>
      </div>
      <div>Po vecerech se pokousim o naprogramovani jednoduche obsluhy
        asynchronniho prenosu dat pres RS232C (na Unikarte). Jako
        nejcistsi mi pripada pravidelne generovani preruseni s frekvenci
        dostatecnou pro bezpecne hlidani provozu na Rx/Tx portech.&nbsp;</div>
      <div>K tomu bych rad vyuzil rychle bezici CTC0 obvodu 8253 v modu
        0 (pro 9600 bd potrebuju frekvenci cca 1kHz nebo vic), jehoz OUT
        je podle manualu priveden na pin 4 brany A PIO; to by pak melo
        obstarat generovani INT.</div>
      <div>(Uvedomuju si, ze na neco takoveho by v principu stacilo i
        “znasilnovani” CTC1-&gt;CTC2-&gt;INT, ale pouziti CTC0 mi prijde
        cistsi.)</div>
      <div><br>
      </div>
      <div>Procetl jsem manualy k dotycnym obvodum a cvicne
        naprogramoval kratkou rutinu v asembleru pro mod 700, ale at
        zkousim, co zkousim, spravne mi to funguje jen v emulatorech (v
        obou, ktere jsem zkusil, tj. ten od Z. Adlera a stejne tak &nbsp;i v
        mz800emu), tj. CTC0 vyvola preruseni, ktere se korektne
        obslouzi; na skutecnem zeleze, co mam doma, to ale vypada, ze se
        interrupt od CTC0 nikdy nevyvola.&nbsp;</div>
      <div><br>
      </div>
      <div>Zkousel jsem vsechno mozne (im1 vs. im2, mod 700 vs. mod 800,
        ruzne maskovani preruseni v PIO mod. 3, ruzne konfigurace I/O
        pinu brany A, &nbsp;interrupt triggrovany na HIGH i LOW, AND i OR
        nemaskovanych vstupnich linek, dokonce i hrani s nastavenim PC0
        a PC2 od 8255), ale nic nepomohlo.&nbsp;</div>
      <div><br>
      </div>
      <div>Nakonec jsem Sharpa rozebral a jednoduchym amaterskym
        osciloskopem (tj. zvukovkou stareho laptopu) jsem vyzkousel OUT0
        pin 8253, a ackoli citac prokazatelne bezi (v tom programku se
        prubezne zobrazuje rychle se menici obsah adresy E004), na OUT0
        neni zadna aktivita. (Pozn.: Tentyz “osciloskop” na OUT1 vidi
        pekny sekundovy tik, na datovem portu 8253ky pak bourlivou
        aktivitu, takze chyba snad neni na mem “prijmaci”; mimochodem,
        citac CTC0 nastavuju na a0a0, mod 0, tj. ocekaval bych nejakych
        30 pulzu na OUT0 za sekundu, coz by i tak primitivni aparat jako
        je stara zvukovka mel pobrat.)</div>
      <div><br>
      </div>
      <div>Chtel bych proto pozadat o pomoc, a to hlavne ve forme
        kontroly kodu onoho kratkeho testovaciho programku nezavislyma a
        zkusenejsima ocima - mzf vcetne komentovaneho zdrojaku pro sdcc
        (asembler v code.s) je ke stazeni na&nbsp;</div>
      <div><br>
      </div>
      <div><a moz-do-not-send="true" href="http://www-ucjf.troja.mff.cuni.cz/%7Emalinsky/files/v3b-preruseni_na_zeleze-CTC0-var2.zip">http://www-ucjf.troja.mff.cuni.cz/~malinsky/files/v3b-preruseni_na_zeleze-CTC0-var2.zip</a></div>
      <div><br>
      </div>
      <div>Taky bych chtel poprosit, jestli byste nekdo mohl
        prilezitostne to mzfko otestovat na svem zeleze - melo by to
        delat to, ze v horni casti obrazovky se vypisuje cca radek a pul
        stridajicich se znaku, o dva radky niz se zobrazuje aktivita na
        E004 a jeste niz by melo nezavisle bezet nekolik radku barevnych
        ctverecku (ty prave vyrabi interrupt handler, a ty jsou taky
        presne tim, co na svem zeleze nevidim, ale v emulatorech vesmes
        ano). Mohli byste mi dat vedet, jestli se na vasich strojich ty
        ctverecky zobrazuji nebo ne?</div>
      <div><br>
      </div>
      <div>Predem dekuju a omlouvam &nbsp;za predlouhe slohove cviceni (a za
        svoji pitomost).</div>
      <div><br>
      </div>
      <div>Michal Malinsky</div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
SharpMZ mailing list
<a class="moz-txt-link-abbreviated" href="mailto:SharpMZ@mail.ordoz.com">SharpMZ@mail.ordoz.com</a>
<a class="moz-txt-link-freetext" href="http://mail.ordoz.com/mailman/listinfo/sharpmz">http://mail.ordoz.com/mailman/listinfo/sharpmz</a>
</pre>
    </blockquote><p><br>
    </p>
  </div>

_______________________________________________<br>SharpMZ mailing list<br><a href="mailto:SharpMZ@mail.ordoz.com">SharpMZ@mail.ordoz.com</a><br>http://mail.ordoz.com/mailman/listinfo/sharpmz<br></blockquote></div><br></body></html>