[SharpMZ] Potize s generovanim preruseni od CTC0 na mz-800 - podezreni na mrtvy OUT0 od 8253 (?)
Michal Hucik - ORDOZ
ordoz na ordoz.com
Středa Únor 1 16:31:39 CET 2017
Dobry den, zkusim to vzit postupne:
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.
Podival jsem se na vas zdrojak. Zkusim to bodove:
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
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.
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.
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.
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:
- sdelit procesoru DI
- optimalne bych pres PC2 na i8255 zablokoval interrupty z CTC2, aby se
nam do toho nemotaly
- poslat CTRL MODE0 do CTC (output prejde do klidoveho stavu )
- nastavit registr I a vlozit dolni cast interrupt vectoru do PIOZ80
- 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"
- sdelit procesoru EI
- dokoncit load CTC0, cimz se spusti pocitani
Vic mne toho ted od pohledu do toho zdrojaku nenapada. Dejte vedet jak
jste dopadnul.
Michal
Dne 1.2.2017 v 15:05 malinsky napsal(a):
> Zdravim vsechny delegaty sharpi konference!
>
> 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.
> 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.
> (Uvedomuju si, ze na neco takoveho by v principu stacilo i
> âznasilnovaniâ CTC1->CTC2->INT, ale pouziti CTC0 mi prijde cistsi.)
>
> 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.
>
> 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.
>
> 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.)
>
> 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
>
> http://www-ucjf.troja.mff.cuni.cz/~malinsky/files/v3b-preruseni_na_zeleze-CTC0-var2.zip
> <http://www-ucjf.troja.mff.cuni.cz/%7Emalinsky/files/v3b-preruseni_na_zeleze-CTC0-var2.zip>
>
> 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?
>
> Predem dekuju a omlouvam za predlouhe slohove cviceni (a za svoji
> pitomost).
>
> Michal Malinsky
>
>
> _______________________________________________
> SharpMZ mailing list
> SharpMZ na mail.ordoz.com
> http://mail.ordoz.com/mailman/listinfo/sharpmz
------------- další část ---------------
HTML pĹĂloha byla odstranÄna...
URL: http://mail.ordoz.com/pipermail/sharpmz/attachments/20170201/ce83a4a1/attachment-0001.html
Další informace o konferenci SharpMZ