Quantcast
Channel: stardot.org.uk
Viewing all articles
Browse latest Browse all 2528

32-bit acorn hardware • A3000 serial issues with Intersil CDP65C51 (with fix)

$
0
0
While trying to setup PPP networking on my A3000, I noticed some odd behaviour from the serial port - it was sending a very short (one character-time) break before each transmission, which, depending on what serial device it was hooked up to, was getting interpreted as a NUL character, and/or causing the following character to get garbled - the attached oscilloscope trace is what I got when I tried to transmit a single lowercase 'a' at 1200 baud:
IMG_3493.jpg
After a bit of puzzling, I think I found the problem: it's a bug/incompatibility specific to the RCA/Harris/Intersil CDP65C51, called out in the datasheet but not exactly obvious. Page 6 of the CDP65C61 datasheet indicates that going directly from the "/RTS low, transmit interrupts disabled" state to "/RTS low, transmit interrupts enabled" may cause a break to be transmitted erroneously, and that to avoid this, software should transition through the "/RTS high, transmit interrupts disabled" state as an intermediate.

Looking at the SerialDeviceDriver module, it does not seem to implement this workaround, so I crudely patched it in and it seems to work as it should now, with no rogue breaks! I've attached a SparkFS archive of my patch code, with a pre-patched SerialDeviceDriver 0.22 module (the updated version recommended for RO3.10 and shipped with 3.11) included. Just in case it helps someone else in the same predicament :)

Statistics: Posted by rhalkyard — Tue May 28, 2024 2:58 am



Viewing all articles
Browse latest Browse all 2528

Trending Articles