Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

Zpět na zprávu

Celé vlákno · 2 zprávy

SIO - navrh pro obsluhu

Michal Hučík SHARP MZ-800


Prozatim si predstavuju, ze by se to mohlo obsluhovat asi takhle:

*
 *
 * SIO data port:               0x52
 * SIO cmd/status port:         0x53
 *
 * Aktualni velikost prijimaciho a odesilaciho bufferu je 255 bajtu.
 *
 * Rychlost portu v bps se nastavuje pres API MZFREPO jako dword.
 *
 *
 * Status:
 * =======
 *              0. bit - nastaven oznamuje data v prijimacim bufferu
 *              2. bit - oznamuje volne misto v odesilacim bufferu
 *
 * Prikazy:
 * ========
 *
 *
 *      RESET   Provede reset portu, tzn.: zlikviduje aktualni obsah prijimaciho i
 *              odesilaciho bufferu,  vynuluje registry RXINT a TXINT, zakaze
 *              generovani interruptu EINT = 0, zapne HW rizeni toku s nastavenim
 *              registru RTS0 = 2 a RTS1 = 128.
 *             
 *      EINT    Povoli generovani interruptu, EINT = 1.
 *
 *      DINT    Zakaze generovani interruptu, EINT = 0.
 *
 *      RXINT   Nasledujicim zapisem se nastavi minimalni pocet bajtu, ktere musi byt
 *              v prijimacim bufferu, aby byl vyvolan interrupt. Nulova hodnota zakazuje
 *              generovani interruptu podle stavu prijimaciho bufferu.
 *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v RXINT.
 *
 *      TXINT   Nasledujicim zapisem se nastavi minimalni pocet volnych bajtu, ktere musi byt
 *              k dispozici v odesilacim bufferu, aby byl vyvolan interrupt. Nulova hodnota zakazuje
 *              generovani interruptu podle stavu odesilaciho bufferu.
 *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v TXINT.
 *
 *      RXBUF   Naslednym ctenim zjistime aktualni pocet bajtu v prijimacim bufferu.
 *
 *      TXBUF   Naslednym ctenim zjistime aktualni pocet bajtu v odesilacim bufferu.
 *
 *      RTS0    Nasledujicim zapisem nastavime minimalni pocet volnych bajtu v prijimacim bufferu
 *              pri kterem unikarta vypne signal RTS a zakaze tim protistrane posilat data.
 *              Pri nulove hodnote nikdy k vypnuti RTS nedojde.
 *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v RTS0.
 *
 *              Pozn: pri testovani na 115200 bps se mi ukazalo, ze pri hodnote mensi jak 2 uz
 *              dochazelo ke ztrate dat.
 *
 *      RTS1    Nasledujicim zapisem nastavime minimalni pocet volnych bajtu v prijimacim bufferu
 *              pri kterem unikarta zapne signal RTS a povoli tim protistrane posilat data.
 *              Pokud RTS1 <= RTS0, tak k zapnuti RTS nikdy nedojde.
 *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v RTS1.
 *
 *
 * TODO:
 * ==== 
 *
 * Prozatim se mi nejak nedari obsluha CTS signalu, tak jej ani neuvadim.
 *
*/

Re: SIO - navrh pro obsluhu

Michal Hučík SHARP MZ-800

Jeste si dovolim prerusit debatu navrhem drobne zmeny pro praci s RTS. 
Takhle mi to prijde srozumitelnejsi a prehlednejsi:

  *  RTS     Nasledujicimi dvema zapisy nastavime RTS0 a RTS1 pro HW 
rizeni toku.
  *              Registr RTS0 sdeluje minimalni poc. bajtu ve vstupnim 
bufferu,
  *              pri kterem vypneme RTS (zakazeme protistrane posilani 
dat).
  *              Registr RTS1 sdeluje minimalni poc. bajtu ve vstupnim 
bufferu,
  *              pri kterem zapneme RTS (povolime protistrane posilani 
dat).
  *              Pokud po prikazu nasleduje cteni dvou bajtu, tak 
obdrzime hodnotu,
  *              ktera je nyni nastavena v RTS0 a RTS1.
  *              HW rizeni toku je aktivni jen tehdy, pokud RTS0 < RTS1, 
v opacnem pripade
  *              se vystupni signal RTS nastavi na konstantni hodnotu: 
pri RTS0 = 0 bude stale
  *              zapnuto, pri RTS0 > 0 bude stale vypnuto.
  *
  *              Pozn: pri testovani na 115200 bps se mi ukazalo, ze pri 
hodnote RTS0 mensi jak 2 uz
  *              dochazelo ke ztrate dat.

Michal