[SharpMZ] Potize s generovanim preruseni od CTC0 na mz-800 - podezreni na mrtvy OUT0 od 8253 (?)
malinsky
mm.malinsky na gmail.com
Středa Únor 1 17:10:12 CET 2017
Dobry den,
vrele diky za Vas cas i za velmi poucne cteni.
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.
Ke zdrojaku:
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.
3) Aha, to mi nedoslo.
4)+5) Rozumim.
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.
Jeste jednou dekuji a jsem s pozdravem,
MM
On 1 Feb 2017, at 16:31, Michal Hucik - ORDOZ <ordoz na ordoz.com> wrote:
>
> 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
>>
>> 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
>
> _______________________________________________
> 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/fa8b097e/attachment.html
Další informace o konferenci SharpMZ