[SharpMZ] Upraveny FDC Horava - BUG

Michal Hucik - ORDOZ ordoz na ordoz.com
Středa Červenec 9 15:46:28 CEST 2014



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
> 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/20140709/7186967a/attachment.html 


Další informace o konferenci SharpMZ