Using Rabbit for an embedded multi-port serial concentrator

Back in, oh, somewhere around '92 or so [yes, the Dark Ages], as part of an embedded controller I designed [based in an x86 rack-mount box with a

16-slot ISA backplane], I needed to connect the computer to 6 serial lines. Since we only had a 33MHz '386 back then, I really didn't want the CPU to be interrupted at a rate of 6 x 9600 baud so I found something called an ACL-II board which was an embedded controller on an ISA bus card with an on-board 80188. My plan was to have this CPU do the communications and only interrupt the main processor when complete messages (~20-255) characters were received -- and likewise accept complete messages for transmission. Since the messages were sort-of fixed format, though not all the same, there was no way I could use the manufacturer's drivers so I wrote my own program to run on the 80188.

I did this again in '94 and yet again in '96. But ACL-II boards are no longer available and one of the ongoing programs is seriously concerned about the impact of potential failures of 8-15 year old boards [this program has access to one spare]. There is a similar board currently being manufactured (DigiBoard) but it's not anywhere near a drop-in replacement. Along similar lines, another of the boards in the '96 system did video overlaying on an NTSC video stream; I don't remember the rationale now but we chose a Targa64+ board for that and it's no longer available either.

Two years ago when this program finally accepted the reality that we couldn't continue to keep their program running in 640KB under DOS [with an AMX-86 microkernel to make it a pre-emptive, multitasking system], they allowed me to migrate the program to Real-Time Linux and as part of that upgrade I moved the video overlay function out of that box into a separate "computer" [actually just 4 slots on a 16-slot backplane that had been electrically isolated from the other 12] on the theory that if the overlay function needed to be completely redone because their Targa64+ board and single spare both died, the impact to the main computer would be minimal. To facilitate this, I created a high-level protocol for the main computer and the video overlay computer (VO) to use that should be adaptable to almost any other hardware in the future.

Now I'd like to do this with the ACL-II card as well, using a separate "computer" to do the serial communications and communicate whole messages with the main computer via Ethernet. I just got the newest Mouser catalog today and in skimming though it I stumbled onto the Rabbit pages. The 3xxx series has 6 serial ports. Unfortunately, I need 8. So ... I have a few questions for anyone who has used them before:

  1. What type of "UART" is used in the Rabbit core? Is it an implementation of a common part or a totally unique component?

  1. If it's a "common" part, how easy or hard would it be to add a few more externally to a Rabbit development board, possibly on a daughter board attached with a ribbon cable?

  2. If it's a unique component, I might be tempted to ignore it and just add (the equivalent of) 8 UARTS. How easy or hard would it be to add a second board to connect to the Rabbit's bus on the development board?

  1. If it's unique and it's too hard to add peripherals to the development board, then I may drop the Rabbit. What other uC or uP are convenient to implement as a "computer" + arbitrary peripherals? [My main concern is that we don't have a very sophisticated PC board manufacturing capability and any second board would probably be wire-wrapped]. For reference, our 12MHz

80188's CPU bandwidth is about 50% utilized on the current ACL-II board. The program is almost completely written in C.

TIA Norm

Reply to
Norm Dresner
Loading thread data ...

Norm Dresner wrote: ..

..

There is a very active user forum on the Rabbit. Go to

formatting link
and subscribe. If you ask your questions there and/or scan the archives, you should find an answer quickly.

IIRC, the Rabbit is a fast, extended version of a Z180. The serial ports it refers to are internal ports similar to the two supplied on the original Z180. However, many users extend the Rabbit with custom components.

Personally, I maintain a 4 to 16 port serial concentrator that uses the Z80180. We use 1-4 Exar quad UARTs. Exar also has 8-port versions. A little pricey, but the one I use has a 128-byte Tx and Rx FIFO with adjustable thresholds that cuts down on the number of interrupts and avoids overruns (see

formatting link

I used to make a 20MHz 80186 octal serial port concentrator and used the Cirrus Logic CL-CD1864. It was hard to keep up with though since it didn't have very deep FIFOs. I think someone bought out the Cirrus Logic UART line, though.

Tom Taylor

Reply to
Tom Taylor

Sounds expensive. - What about using TWO rabbit modules, coded to handle 4 downstream channels each ?

-jg

Reply to
Jim Granville

Cute! I use edgeports, USB serial ports that (so far) have been great. I have 16 ports connected at the moment, no problems at all.

Reply to
Dave VanHorn

I think with any modern PC running Windows or Linux, this job is very doable without relying on an embedded controller, as long as each port has at least a 16-byte FIFO.

-Robert Scott Ypsilanti, Michigan (Reply through this forum, not by direct e-mail to me, as automatic reply address is fake.)

Reply to
Robert Scott

: I did this again in '94 and yet again in '96. But ACL-II boards are no : longer available and one of the ongoing programs is seriously concerned : about the impact of potential failures of 8-15 year old boards [this program : has access to one spare]. There is a similar board currently being : manufactured (DigiBoard) but it's not anywhere near a drop-in replacement. : Along similar lines, another of the boards in the '96 system did video : overlaying on an NTSC video stream; I don't remember the rationale now but : we chose a Targa64+ board for that and it's no longer available either.

We used to use Digiboards to talk to lots* of devices (20-30 maybe at peak) I've also used Specialix boards to do similar

When you get above a certain number of ports, you simply switch to polling instead of interrupt mode on the driver. This prevents the interrupt storms you would otherwise get. Fine on 486 boards with low numbers (10 say)

No need for anything special really

Glyn

--

------------------------------------------------------------------------
Glyn Davies / gryn@plig.net / www.technobobbins.com / Insert quote here?
------------------------------------------------------------------------
Reply to
Glyn Davies

messages

catalog

3xxx

few

more

add

second

development

to

that

any

It seems doable. It still keeps the coding in the main computer relatively straightforward -- ports 1-4 connect to IPaddress#1 and ports 5-8 connect to IPaddress#2. The advantage of this approach is that it's modular and can expand (or contract) as needed.

Hmmm.....

Thanks Norm

Reply to
Norm Dresner

be

ACL-II

Consider the following: 1. The current main computer, with a single ACL-II 8-port board, takes up 15 of the 16 slots in our passive backplane. I don't have the space to add local multi-port RS-232 boards.

  1. Also, the time-line of this ~1GHz P-III is on the order of 75% full already. Since an ISA interrupt forces the whole CPU to wait for on the order of 2 uS for each interrupt from or communications with the external board, that's going to eat into the CPU bandwidth budget rather quickly. With the scheme I proposed -- using an external board connected via Ethernet -- the NIC is integrated onto the CPU board's internal PCI bus and would present much less loading on the bandwidth.
  2. Unfortunately, this RS-232 communications is only a very small part of what the overall computer does and much of it's time is spent doing mathematical calculations using inputs from it's other sensors. We had a very good reason to off-load the work originally and, considering that the original program has expanded with the increasing CPU speed, I think there's still good reason to off-load as much of the grunt work as possible.

Norm

Reply to
Norm Dresner

Rabbit cores generally only have the TTL level serial i/o of the Rabbit chip.

formatting link

The RS232 transceivers are on the development boards.

You can use the slaveport to do it. There are code samples that do it in the dev kits. wwww.rabbitsemiconductor.com

formatting link

Reply to
Brian Murtha

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.