1. This forum section is a read-only archive which contains old newsgroup posts. If you wish to post a query, please do so in one of our main forum sections (here). This way you will get a faster, better response from the members on Motherboard Point.

Using Rabbit for an embedded multi-port serial concentrator

Discussion in 'Embedded' started by Norm Dresner, Aug 4, 2004.

  1. Norm Dresner

    Norm Dresner Guest

    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?

    2. 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?

    3. 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?

    4. 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
     
    Norm Dresner, Aug 4, 2004
    #1
    1. Advertisements

  2. Norm Dresner

    Tom Taylor Guest

    Norm Dresner wrote:
    <snip>..

    There is a very active user forum on the Rabbit. Go to
    http://groups.yahoo.com/group/rabbit-semi/ 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 http://www.exar.com/products.php?areaID=3#8-bit)

    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
     
    Tom Taylor, Aug 4, 2004
    #2
    1. Advertisements

  3. Norm Dresner wrote:
    Sounds expensive. - What about using TWO rabbit modules, coded to handle
    4 downstream channels each ?
    -jg
     
    Jim Granville, Aug 5, 2004
    #3
  4. Norm Dresner

    Dave VanHorn Guest

    Personally, I maintain a 4 to 16 port serial concentrator
    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.
     
    Dave VanHorn, Aug 5, 2004
    #4
  5. Norm Dresner

    Robert Scott Guest

    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.)
     
    Robert Scott, Aug 5, 2004
    #5
  6. Norm Dresner

    Glyn Davies Guest

    <snip>

    : 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.

    <snip>

    We used to use Digiboards to talk to lots* of devices (20-30 maybe at peak)
    I've also used Specialix <spelling?> 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, Aug 5, 2004
    #6
  7. Norm Dresner

    Norm Dresner Guest

    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
     
    Norm Dresner, Aug 5, 2004
    #7
  8. Norm Dresner

    Norm Dresner Guest

    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.

    2. 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.

    3. 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
     
    Norm Dresner, Aug 5, 2004
    #8
  9. Norm Dresner

    Brian Murtha Guest

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

    http://www.rabbitsemiconductor.com/...als/Rabbit3000/UsersManual/rabbit2.htm#954825

    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
    www.zworld.com
     
    Brian Murtha, Aug 5, 2004
    #9
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.