<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body 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., 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. </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->CTC2->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 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. </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, 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. </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 </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 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>
</body>
</html>