Ahoj, jak ted tady mam v Sharpu zasunutou Unikartu + HD upraveny FDC Horava, tak jsem zjistil, ze z Horavy jde signal /INT primo z hradla 74LS03, to znamena, ze je tam vzdy napeti, coz muze byt trochu problem ve chvili, kdy je na sbernici pripojeno nejake dalsi zarizeni, ktere umi generovat interupt. Pokusim se to osetrit tak, ze do Horavy mezi vystup z toho 74LS03 a /INT vrazim 1k odpor - snad to bude stacit na to, aby se pri interruptu prepral ten pull-up, ktery je na tomto signalu nekde uvnitr Sharpa. Idealni by bylo, kdyby se dal do FDC obvod, ktery by se v klidu prepnul do stavu vysoke impedance a v jen ve chvili, kdy je potreba zavolat interrupt by poslal do sbernice log 0, tak jako to dela Unikarta. Zajimalo by mne, tak jsou na tom s generovanim ineruptu ostatni HD radice. Leze z tama taky "natvrdo" napeti? Michal
Celé vlákno · 8 zpráv
Re: [SharpMZ] Upraveny FDC Horava - BUG
Hynek Sladky <econf@[doména skryta]> SHARP MZ-800
74LS03 by mel byt
open-collector, ne? Jednicka na signalu v klidu by mela byt drzena
pull-up resistorem 3k3 primo v pocitaci.
(pokud by to nebyl open-collector, tak technicky spravnejsi by byla dioda, ktera by pustila na sbernici logickou nulu)
Hynek Sladky
(pokud by to nebyl open-collector, tak technicky spravnejsi by byla dioda, ktera by pustila na sbernici logickou nulu)
Hynek Sladky
Dne 9.7.2014 14:18, Michal Hucik -
ORDOZ napsal(a):
Ahoj, jak ted tady mam v Sharpu zasunutou Unikartu + HD upraveny FDC Horava, tak jsem zjistil, ze z Horavy jde signal /INT primo z hradla 74LS03, to znamena, ze je tam vzdy napeti, coz muze byt trochu problem ve chvili, kdy je na sbernici pripojeno nejake dalsi zarizeni, ktere umi generovat interupt. Pokusim se to osetrit tak, ze do Horavy mezi vystup z toho 74LS03 a /INT vrazim 1k odpor - snad to bude stacit na to, aby se pri interruptu prepral ten pull-up, ktery je na tomto signalu nekde uvnitr Sharpa. Idealni by bylo, kdyby se dal do FDC obvod, ktery by se v klidu prepnul do stavu vysoke impedance a v jen ve chvili, kdy je potreba zavolat interrupt by poslal do sbernice log 0, tak jako to dela Unikarta. Zajimalo by mne, tak jsou na tom s generovanim ineruptu ostatni HD radice. Leze z tama taky "natvrdo" napeti? Michal
Re: [SharpMZ] Upraveny FDC Horava - BUG
Radek Suk <suk@[doména skryta]> SHARP MZ-800
Ten 7403 je korektni reseni. Kdyz chce kdokoliv vyvolat preruseni tak da do log0 tento signal. V zadnem pripade se na tento vyvod nema davat bezny obvod, vzdy jen open collector.
Jinak moje reseni HD FDD tam ma obycejny transitor ale klidne tam muze byt 74ls03.
Rozhodne bych tam nedaval zadnou diodu - to neni spravne reseni.
Radek
Dne 9.7.2014 14:37, Hynek Sladky
napsal(a):
74LS03 by mel byt open-collector, ne? Jednicka na signalu v klidu by mela byt drzena pull-up resistorem 3k3 primo v pocitaci.
(pokud by to nebyl open-collector, tak technicky spravnejsi by byla dioda, ktera by pustila na sbernici logickou nulu)
Hynek Sladky
Dne 9.7.2014 14:18, Michal Hucik - ORDOZ napsal(a):
Ahoj, jak ted tady mam v Sharpu zasunutou Unikartu + HD upraveny FDC Horava, tak jsem zjistil, ze z Horavy jde signal /INT primo z hradla 74LS03, to znamena, ze je tam vzdy napeti, coz muze byt trochu problem ve chvili, kdy je na sbernici pripojeno nejake dalsi zarizeni, ktere umi generovat interupt. Pokusim se to osetrit tak, ze do Horavy mezi vystup z toho 74LS03 a /INT vrazim 1k odpor - snad to bude stacit na to, aby se pri interruptu prepral ten pull-up, ktery je na tomto signalu nekde uvnitr Sharpa. Idealni by bylo, kdyby se dal do FDC obvod, ktery by se v klidu prepnul do stavu vysoke impedance a v jen ve chvili, kdy je potreba zavolat interrupt by poslal do sbernice log 0, tak jako to dela Unikarta. Zajimalo by mne, tak jsou na tom s generovanim ineruptu ostatni HD radice. Leze z tama taky "natvrdo" napeti? Michal
_______________________________________________ SharpMZ mailing list SharpMZmail.ordoz.com http://mail.ordoz.com/mailman/listinfo/sharpmz
Re: [SharpMZ] Upraveny FDC Horava - BUG
Michal Hucik - ORDOZ <ordoz@[doména skryta]> SHARP MZ-800
Mate pravdu. Podle DS je 74LS03 skutecne open-collector. V tom pripade se musim omluvit autorum HD patche.
Ovsem potom je zahadou, proc kdyz je na sbernici soucasne s Horavou pripojena i Unikarta, ktera ma switchem posunute FDC porty, tak obcas zkolabuje cp/m 4.1.
Detailneji jsem to zacal zkoumat, kdyz mi Horava nepravidelne vratil chybu pri formatovani stopy:
ld c,#__FDC_DATA
im 1
ei
out (#__FDC_CMD),a ; WRITE_TRACK
4$:
in a,(#__FDC_STS)
rra
jr c,4$ ; cekame, dokud nezacne byt BUSY
5$:
in a,(#__FDC_STS)
rra
jr nc,5$ ; cekame, dokud neprestane byt BUSY
di
rla
Pomerne casto, avsak naprosto nepravidelne se mi stava, ze tato cekaci rutina skonci, ale Sharp pritom nezaznamenal ani jeden prichozi interrupt. Nasledne mam vsak ve statusu hned za tim "rla" priznaky LOST_DATA a DRQ.
Z unikarty si nechavam z STM32 vypsat na terminal info kdykoliv je v hal.c volana funkce pro nastaveni, ci resetovani /INT. Po celou dobu, kdy pracuji s Horavou je interrupt z Unikarty v klidovem stavu, nicmene firmware Unikarty v tomto klidovem stavu neustale vola hal_ResetSharpINT(), cimz nastavuje ten pin do input rezimu.
Je to jedine misto, kde se v Unikarte saha na GPIOB->CHR.
Zkusil jsem tedy upravit firmware Unikarty tak, aby si pamatoval predchozi stav /INT signalu a aby nesahal na nastaveni toho portu ve chvili, kdy se pozadovany stav nezmenil. Je to zajimave, ale po teto uprave se mi zatim nepodarilo zreprodukovat tu chybu s Horavou. Zatim bych vsak nejasal, protoze moc nerozumim tomu, jak by opakovane volani toho hal_ResetSharpINT() melo ovlivnit signal, ktery jde z Horavy.
/*
*
* Zrusit /INT signal na sbernici MZ-800
*
*
*/
void hal_ResetSharpINT ( void )
{
GPIOB->CRH = 0xB8B33444; // prepneme pin /INT do input rezimu
}
/*
*
* Poslat /INT signal na sbernici MZ-800
*
*
*/
void hal_SetSharpINT ( void )
{
GPIOB->ODR &= ~( 1 << 9 ); // nastavenim 0 na pinu PB9 aktivujeme SharpINT
GPIOB->CRH = 0xB8B33434; // prepneme pin /INT do output rezimu
}
Dne 9.7.2014 14:37, Hynek Sladky napsal(a):
74LS03 by mel byt open-collector, ne? Jednicka na signalu v klidu by mela byt drzena pull-up resistorem 3k3 primo v pocitaci.
(pokud by to nebyl open-collector, tak technicky spravnejsi by byla dioda, ktera by pustila na sbernici logickou nulu)
Hynek Sladky
Dne 9.7.2014 14:18, Michal Hucik - ORDOZ napsal(a):
Ahoj, jak ted tady mam v Sharpu zasunutou Unikartu + HD upraveny FDC Horava, tak jsem zjistil, ze z Horavy jde signal /INT primo z hradla 74LS03, to znamena, ze je tam vzdy napeti, coz muze byt trochu problem ve chvili, kdy je na sbernici pripojeno nejake dalsi zarizeni, ktere umi generovat interupt. Pokusim se to osetrit tak, ze do Horavy mezi vystup z toho 74LS03 a /INT vrazim 1k odpor - snad to bude stacit na to, aby se pri interruptu prepral ten pull-up, ktery je na tomto signalu nekde uvnitr Sharpa. Idealni by bylo, kdyby se dal do FDC obvod, ktery by se v klidu prepnul do stavu vysoke impedance a v jen ve chvili, kdy je potreba zavolat interrupt by poslal do sbernice log 0, tak jako to dela Unikarta. Zajimalo by mne, tak jsou na tom s generovanim ineruptu ostatni HD radice. Leze z tama taky "natvrdo" napeti? Michal
_______________________________________________ SharpMZ mailing list SharpMZmail.ordoz.com http://mail.ordoz.com/mailman/listinfo/sharpmz
Re: [SharpMZ] Upraveny FDC Horava - BUG
Hynek Sladky <econf@[doména skryta]> SHARP MZ-800
Toto:
GPIOB->ODR &= ~( 1 << 9 ); // nastavenim 0 na pinu PB9 aktivujeme SharpINT
je potencialne nebezpecna operace, protoze neni atomicka. Muze se stat, ze mezi ctenim a zapisem se zmeni hodnota portu v preruseni... Doporucoval bych pouziti BSRR registru.
Dale by se mozna dal pouzit rezim open-drain (OTYPER registr).
Mimochodem, co to je za registr CRH? V RM0090 pro STM32F4xx jsem ho nenasel...
Hynek Sladky
GPIOB->ODR &= ~( 1 << 9 ); // nastavenim 0 na pinu PB9 aktivujeme SharpINT
je potencialne nebezpecna operace, protoze neni atomicka. Muze se stat, ze mezi ctenim a zapisem se zmeni hodnota portu v preruseni... Doporucoval bych pouziti BSRR registru.
Dale by se mozna dal pouzit rezim open-drain (OTYPER registr).
Mimochodem, co to je za registr CRH? V RM0090 pro STM32F4xx jsem ho nenasel...
Hynek Sladky
Dne 9.7.2014 15:46, Michal Hucik -
ORDOZ napsal(a):
Mate pravdu. Podle DS je 74LS03 skutecne open-collector. V tom pripade se musim omluvit autorum HD patche.
Ovsem potom je zahadou, proc kdyz je na sbernici soucasne s Horavou pripojena i Unikarta, ktera ma switchem posunute FDC porty, tak obcas zkolabuje cp/m 4.1.
Detailneji jsem to zacal zkoumat, kdyz mi Horava nepravidelne vratil chybu pri formatovani stopy:
ld c,#__FDC_DATA
im 1
ei
out (#__FDC_CMD),a ; WRITE_TRACK
4$:
in a,(#__FDC_STS)
rra
jr c,4$ ; cekame, dokud nezacne byt BUSY
5$:
in a,(#__FDC_STS)
rra
jr nc,5$ ; cekame, dokud neprestane byt BUSY
di
rla
Pomerne casto, avsak naprosto nepravidelne se mi stava, ze tato cekaci rutina skonci, ale Sharp pritom nezaznamenal ani jeden prichozi interrupt. Nasledne mam vsak ve statusu hned za tim "rla" priznaky LOST_DATA a DRQ.
Z unikarty si nechavam z STM32 vypsat na terminal info kdykoliv je v hal.c volana funkce pro nastaveni, ci resetovani /INT. Po celou dobu, kdy pracuji s Horavou je interrupt z Unikarty v klidovem stavu, nicmene firmware Unikarty v tomto klidovem stavu neustale vola hal_ResetSharpINT(), cimz nastavuje ten pin do input rezimu.
Je to jedine misto, kde se v Unikarte saha na GPIOB->CHR.
Zkusil jsem tedy upravit firmware Unikarty tak, aby si pamatoval predchozi stav /INT signalu a aby nesahal na nastaveni toho portu ve chvili, kdy se pozadovany stav nezmenil. Je to zajimave, ale po teto uprave se mi zatim nepodarilo zreprodukovat tu chybu s Horavou. Zatim bych vsak nejasal, protoze moc nerozumim tomu, jak by opakovane volani toho hal_ResetSharpINT() melo ovlivnit signal, ktery jde z Horavy.
/*
*
* Zrusit /INT signal na sbernici MZ-800
*
*
*/
void hal_ResetSharpINT ( void )
{
GPIOB->CRH = 0xB8B33444; // prepneme pin /INT do input rezimu
}
/*
*
* Poslat /INT signal na sbernici MZ-800
*
*
*/
void hal_SetSharpINT ( void )
{
GPIOB->ODR &= ~( 1 << 9 ); // nastavenim 0 na pinu PB9 aktivujeme SharpINT
GPIOB->CRH = 0xB8B33434; // prepneme pin /INT do output rezimu
}
Re: [SharpMZ] Upraveny FDC Horava - BUG
Michal Hucik - ORDOZ <ordoz@[doména skryta]> SHARP MZ-800
Aha, to mas pravdu. Nejsem si sice uplne jisty, zda se vubec v preruseni saha na GPIOB, ale beze sporu tohle by tam asi melo byt osetreno.
Tyhle zakladni funkce jsem napsal davno pred tim, nez vubec ve firmware Unikarty vznikla nejaka potreba obsluhy preruseni - tu jsem tam doplnil az s modulem SIO a s ethernetem. Tehdy mne ani nenapadlo, ze by vubec mohl byt duvod takove veci hlidat :(
Kazdopadne ten problem s Horavou je asi stale jeste vevyresen, ale ted se mi jako na potvoru nedari tu chybu znova zopakovat.
DOTAZ: je normalni, ze se v klidu ten WD2797 v radici zahriva tak, ze po cca 3 hodinach uz je na nem neprijemne nechat polozeny prst?
ad to CRH: netusim jak se to dela u F4xx. Puvodni Unikarta je postavena na STM32F1xx a jedna se o port configuration register, kterym se nastavuje horni polovina portu (pro tu dolni je tady registr CRL). Kazdy pin je konfigurovan dvou bitovou hodnotou mode a dvou bitovou hodnotou cnf.
Michal
Dne 9.7.2014 16:28, Hynek Sladky napsal(a):
Toto:
GPIOB->ODR &= ~( 1 << 9 ); // nastavenim 0 na pinu PB9 aktivujeme SharpINT
je potencialne nebezpecna operace, protoze neni atomicka. Muze se stat, ze mezi ctenim a zapisem se zmeni hodnota portu v preruseni... Doporucoval bych pouziti BSRR registru.
Dale by se mozna dal pouzit rezim open-drain (OTYPER registr).
Mimochodem, co to je za registr CRH? V RM0090 pro STM32F4xx jsem ho nenasel...
Hynek Sladky
Re: [SharpMZ] Upraveny FDC Horava - BUG
Hynek Sladky <econf@[doména skryta]> SHARP MZ-800
Nemuze byt treba taky
problem v pouziti nespravneho headeru? SMT32F1xx ma jine definice
nez STM32F4xx. CRL a CRH (offest 0 a 4) maji jinou strukturu nez
porty MODER a OTYPER (take offset 0 a 4), ktere jsou u STM32F4.
Pokud se zapisuje do CRH, tak se vlastne zapisuje do OTYPER, ale
zapisuji se tam nesmyslna data... MODER (ktery ridi prepinani
input/output) se nemeni... takze muze byt problem tam...
Urcite bych doporucil pouzit spravne definice registru (i kdyz to mozna bude trochu prace to upravit, aby to spravne chodilo...)
Hynek Sladky
Urcite bych doporucil pouzit spravne definice registru (i kdyz to mozna bude trochu prace to upravit, aby to spravne chodilo...)
Hynek Sladky
Dne 9.7.2014 18:22, Michal Hucik -
ORDOZ napsal(a):
ad to CRH: netusim jak se to dela u F4xx. Puvodni Unikarta je postavena na STM32F1xx a jedna se o port configuration register, kterym se nastavuje horni polovina portu (pro tu dolni je tady registr CRL). Kazdy pin je konfigurovan dvou bitovou hodnotou mode a dvou bitovou hodnotou cnf.
Michal
Dne 9.7.2014 16:28, Hynek Sladky napsal(a):
Toto:
GPIOB->ODR &= ~( 1 << 9 ); // nastavenim 0 na pinu PB9 aktivujeme SharpINT
je potencialne nebezpecna operace, protoze neni atomicka. Muze se stat, ze mezi ctenim a zapisem se zmeni hodnota portu v preruseni... Doporucoval bych pouziti BSRR registru.
Dale by se mozna dal pouzit rezim open-drain (OTYPER registr).
Mimochodem, co to je za registr CRH? V RM0090 pro STM32F4xx jsem ho nenasel...
Hynek Sladky
Re: [SharpMZ] Upraveny FDC Horava - BUG
Michal Hucik - ORDOZ <ordoz@[doména skryta]> SHARP MZ-800
Moment Hynku, ted si asi nerozumime. Ta Unikarta se kterou pracuji je stale ta puvodni verze, ktera je osazena procesorem STM32F1xx. Nasledujici varianta s F4xx, kterou si pak na zakladech te nasi postavil Bohous, myslim jeste neni ani tolik rozsirena, jako ta puvodni, kterou jsme ubastlili s Vaskem Peroutkou. ( To by mozna bylo dobre tema na flame war. Zajimalo by mne jake je vlastne nyni mezi Sharpisty obsazeni verzi Unikaret :)
Ona v podstate i ta karta s F1xx byla remake, protoze uplne prvni bastl jsem mel postaveny jako chuvalec dratu okolo Atmega64. Prave proto jsme se uz snazili udrzet kod tak, aby ty HW zavisle casti byly drzeny na jednom miste v HAL vrstve.
Kazdopadne se mi stale nedari znovu zopakovat tu chybu pri ktere Horava brecel, ze Sharp nereaguje na interrupt a to ani kdyz jsem vratil ten firmware do puvodni verze, kdy se to CRH zapisovalo stale dokola :(
Delaji se mi tu kazdou hodinu inkrementalni zalohy, tak si jeste dnes zkusim vytahnout dva dny starou verzi a zkusim, zda se mi to s ni podari zreprodukovat.
Michal
Dne 10.7.2014 6:15, Hynek Sladky napsal(a):
Nemuze byt treba taky problem v pouziti nespravneho headeru? SMT32F1xx ma jine definice nez STM32F4xx. CRL a CRH (offest 0 a 4) maji jinou strukturu nez porty MODER a OTYPER (take offset 0 a 4), ktere jsou u STM32F4. Pokud se zapisuje do CRH, tak se vlastne zapisuje do OTYPER, ale zapisuji se tam nesmyslna data... MODER (ktery ridi prepinani input/output) se nemeni... takze muze byt problem tam...
Urcite bych doporucil pouzit spravne definice registru (i kdyz to mozna bude trochu prace to upravit, aby to spravne chodilo...)
Hynek Sladky
Dne 9.7.2014 18:22, Michal Hucik - ORDOZ napsal(a):
ad to CRH: netusim jak se to dela u F4xx. Puvodni Unikarta je postavena na STM32F1xx a jedna se o port configuration register, kterym se nastavuje horni polovina portu (pro tu dolni je tady registr CRL). Kazdy pin je konfigurovan dvou bitovou hodnotou mode a dvou bitovou hodnotou cnf.
Michal
Dne 9.7.2014 16:28, Hynek Sladky napsal(a):
Toto:
GPIOB->ODR &= ~( 1 << 9 ); // nastavenim 0 na pinu PB9 aktivujeme SharpINT
je potencialne nebezpecna operace, protoze neni atomicka. Muze se stat, ze mezi ctenim a zapisem se zmeni hodnota portu v preruseni... Doporucoval bych pouziti BSRR registru.
Dale by se mozna dal pouzit rezim open-drain (OTYPER registr).
Mimochodem, co to je za registr CRH? V RM0090 pro STM32F4xx jsem ho nenasel...
Hynek Sladky
_______________________________________________ SharpMZ mailing list SharpMZmail.ordoz.com http://mail.ordoz.com/mailman/listinfo/sharpmz