<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. </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 <<a href="mailto:ordoz@ordoz.com">ordoz@ordoz.com</a>> 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., 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>
</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>