OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 19.04.2024, 23:32

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 
Autor Zpráva
 Předmět příspěvku: 16C550 nenastavuje RTS pro příjem dat
PříspěvekNapsal: 02.09.2021, 21:46 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2344
Has thanked: 303 times
Been thanked: 640 times
Pokouším se zprovoznit NXP SC16C550 u ZX Spectra a nedaří se mi. Zdá se, že ten čip nastavuju špatně. (neplést se SIFem, v SIFu je 16C650, ne 16C550 jak jsem párkrát mylně psal)

Resp. funguje mi nastavení baudrate, stop bitů, parity... čip vysílá jak má. Dokonce se mi daří přijímat data pokud na vysílací straně nenastavím řízení toku dat pomocí RTS CTS. Jakmile to nastavím, tak 16C550 nepřijímá, resp. drží trvale RTS v log. 1 (záporné napětí na RS232 straně) a tím brání vysílači (PC) vysílat.

Koukám do dvou různých datasheetů (od NXP i k Exar ST16C550) a nenacházím, co dělám špatně. Z nějakého důvodu se mi v 16C550 neuplatní interní FIFO a nefunguje automatické řízení toku dat.

Nějaký nápad?

Zkouším to takto:
Kód:
        cpu     z80undoc
        org     32768

BASEADR equ     131

RHR     equ     BASEADR         ; IN  - Receive Holding Register
THR     equ     BASEADR         ; OUT - Transmit Holding Register
IER     equ     BASEADR+4       ; IO  - Interrupt Enable Register
ISR     equ     BASEADR+8       ; IN  - Interrupt Status Register
FCR     equ     BASEADR+8       ; OUT - FIFO Control Register
LCR     equ     BASEADR+12      ; IO  - Line Control Register
MCR     equ     BASEADR+16      ; IO  - Modem Control Register
LSR     equ     BASEADR+20      ; IN  - Line Status Register
MSR     equ     BASEADR+24      ; IN  - Modem Status Register
SPR     equ     BASEADR+24      ; IO  - Scratch Pad Register

DLL     equ     BASEADR         ; OUT - lower byte of Divisor Latch
DLM     equ     BASEADR+4       ; OUT - higher byte of Divisor Latch

        ld      a,10000000b     ; [7] divisor latch enabled
        out     (LCR),a
        ld      a,4             ; 460800/115200bps = 4
        out     (DLL),a
        ld      a,0
        out     (DLM),a

        ld      a,00000011b     ; no divisor latch, no parity, 1 stop bit, 8bit word
        out     (LCR),a

        ld      a,11000000b     ; [7:6] FIFOs enabled, [3:0] no interrupts
        out     (ISR),a

        ld      a,00000111      ; [3] no DMA, [2:1] FIFO reset, [0] FIFO enable = polled mode?
        out     (FCR),a

LOOP    xor     a
        in      a,(LSR)         ; read Line Status Register
        and     01000000b
        jr      z,BUFFULL       ; Z = cannot send, buffer is full

        ld      a,'a'
        out     (THR),a         ; write to Transmit Holding Register

BUFFULL xor     a
        in      a,(LSR)         ; read Line Status Register
        and     00000001b       ; check Receive data ready bit, 1 = data received
        jr      z,NO_DATA
        in      a,(RHR)         ; read Receive Holding Register

        ld      hl,16384
        ld      (hl),a
        and     00000111b
        out     (254),a

        ei                      ; limit 50 chars/s
        halt

NO_DATA call    8020            ; break?
        jr      c,LOOP          ; C = break is not pressed
        ret


Přílohy:
SDS00007 s poznamkami.png
SDS00007 s poznamkami.png [ 66.2 KiB | Zobrazeno 2036 krát ]
SDS00001 s poznamkami.png
SDS00001 s poznamkami.png [ 47.4 KiB | Zobrazeno 2038 krát ]

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS
Nahoru
 Profil  
 
PříspěvekNapsal: 03.09.2021, 18:08 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2344
Has thanked: 303 times
Been thanked: 640 times
Znovu procházím datasheety a zdá se, že problém je prostě v tom, že 16C550 signály řízení toku dat vůbec neřeší. Je to možné?

V 16C650 je EFR - Enhanced Feature Register, kde se povoluje automatické nastavování RTS, resp. reakce na CTS, nebo se v něm volí reakce a posílání Xon/Xoff bytů. EFR v 16C550 zcela chybí a zdá se, že je nutné signály nastavovat softwarově. Stejně tak chybí další čtyři registry do nichž se v 16C650 zapisují hodnoty Xon1, Xon2, Xoff1, Xoff2, které se automaticky posílají při příjmu dat, resp. se kterými se porovnává při vysílání. I tzv. softwarové řízení toku dat by 16C650 měla zvládat bez účasti procesoru.

V 16C550 tedy umí jen vyvolat přerušení podle zaplnění bufferu, ale signály CTS/RTS, nebo odesílání a příjem Xon/Xoff si musí na procesor řešit sám.

Pokud je to tak, tak se 16C550 nedá použít.

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
PříspěvekNapsal: 03.09.2021, 20:14 
Offline
Radil

Registrován: 27.09.2013, 22:59
Příspěvky: 426
Has thanked: 102 times
Been thanked: 44 times
Asi ti neporadím. Sériový přenos jsem nikdy nestudoval, ale narazil jsem na následující odkaz. Možná tě to někam posune:
https://vyvoj.hw.cz/navrh-obvodu/zpozdene-preruseni-uart-16c550.html
p.s. jaké pouzdro používáš? V popisu je informace, že verze pouzdra HVQFN32 (SOT617-3) nemá podporu signálů TXRDY a RXRDY, ale to se asi týká jen DMA funkce.


Nahoru
 Profil  
 
PříspěvekNapsal: 03.09.2021, 23:47 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2344
Has thanked: 303 times
Been thanked: 640 times
Pouzdro má 44 vývodů. Ale o to nejde. Automatické řízení toku dat UARTem je zásadní kvůli kompatibilitě s už existujícím softwarem a taky kvůli tomu, aby ten software mohl zůstat jednoduchý a nenáročný.

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 9 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz