[En-Nut-Discussion] Interfacing a memory mapped (Oxford Quad UART) device to an EtherNut

Pearless Douglas.Pearless at pearless.co.nz
Wed Sep 17 22:17:44 CEST 2003


Hi Ralph,

Thanks!!!!

Your code has cleared up some of the workings of the UART device drivers for
me.

Would you consider sharing the UartExtOutput and UartExtInit code too?

A question for all those on the list, has any one written device drivers
where they share an interrupt?  I am expecting for my interrupt handler for
the 4 uarts to first check to see which uart has generated the interrupt and
then perform the appropriate task.  Might prove to be a bit tricky?

Any comments?

Cheers Douglas

-----Original Message-----
From: en-nut-discussion-admin at egnite.de
[mailto:en-nut-discussion-admin at egnite.de]On Behalf Of Ralph Mason
Sent: Thursday, 18 September 2003 6:58 a.m.
To: en-nut-discussion at egnite.de
Subject: RE: [En-Nut-Discussion] Interfacing a memory mapped (Oxford
Quad UART) device to an EtherNut


To save yourself some work and codespace I suggest you use the 'virtualised'
AVR uart if possible from nut os.

I wrote a 16550 driver in a few hours that way.

Here is my declaration, you can see how much of the avr driver I used

static UARTDCB dcb_uarta;

NUTDEVICE devUartA = {
    0,                          /*!< Pointer to next device. */
    {'u', 'a', 'r', 't', 'a', 0, 0, 0, 0},      /*!< Unique device name. */
    IFTYP_STREAM,               /*!< Type of device. */
    (u_char*)0xf900,            /*!< Base address. */
    4,                          /*!< First interrupt number. */
    0,                			 /*!< Interface control block. */
    &dcb_uarta,                 /*!< Driver control block. */
    UartExtInit,                /*!< Driver initialization routine. */
    UartExtIOCtl,               /*!< Driver specific control function. */
    UartAvrRead,
    UartAvrWrite,
    UartAvrWrite_P,
    UartAvrOpen,
    UartAvrClose
};

THere are only 2 of my own functions there.

In the init I setup the stream (so that the memory for it can be allocated
from the heap) and put my own stream handler functions in.


int UartExtInit(NUTDEVICE *dev)
{
    IFSTREAM *ifs;

    //Already done
    if ( dev->dev_icb )
    	return 0;

    ifs = NutHeapAllocClear(sizeof(IFSTREAM));
    dev->dev_icb = ifs;

    ifs->if_input = UartAvrInput;
    ifs->if_output = UartExtOutput;
    ifs->if_flush = UartAvrFlush;

    /*
     * Initialize driver control block.
     */
    memset(dev->dev_dcb, 0, sizeof(UARTDCB));

    Init16550((volatile u_char*)dev->dev_base,38400);

So you can see, I only provided 3 functions to the
driver(UartExtOutput,UartExtInit,UartExtInit) and my own interupt handler.

Hope this is of some help


Regards
Ralph






> -----Original Message-----
> From: en-nut-discussion-admin at egnite.de
> [mailto:en-nut-discussion-admin at egnite.de]On Behalf Of Pearless
> Sent: Wednesday, 17 September 2003 10:37
> To: en-nut-discussion at egnite.de
> Subject: RE: [En-Nut-Discussion] Interfacing a memory mapped (Oxford
> Quad UART) device to an EtherNut
>
>
> Hi Harald,
>
> Thanks for the feedback.
>
> I am creating a new file, rather than modifing uartavr.c.
>
> cheers Douglas
>
> -----Original Message-----
> From: en-nut-discussion-admin at egnite.de
> [mailto:en-nut-discussion-admin at egnite.de]On Behalf Of Harald Kipp
> Sent: Wednesday, 17 September 2003 10:18 p.m.
> To: en-nut-discussion at egnite.de
> Subject: RE: [En-Nut-Discussion] Interfacing a memory mapped (Oxford
> Quad UART) device to an EtherNut
>
>
> Douglas,
>
> I'd suggest to write a simple program first (no Nut/OS!)
> and use outb and inb statements to access the hardware.
>
> 1. Initialize QUART registers
> 2. Try to output one character
> 3. Test interrupts
>
> After this is working fine, you should be ready to modify
> uartavr.c. Btw. I recommend to use a different file. Do not
> intend to make uartavr.c working with both devices, on-chip
> UART and external QUAD.
>
>
> Harald
>
> _______________________________________________
> En-Nut-Discussion mailing list
> En-Nut-Discussion at egnite.de
> http://www.egnite.de/mailman/listinfo/en-nut-discussion
>
> ---
> Incoming mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.518 / Virus Database: 316 - Release Date: 11/09/2003
>
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.518 / Virus Database: 316 - Release Date: 11/09/2003
>
> _______________________________________________
> En-Nut-Discussion mailing list
> En-Nut-Discussion at egnite.de
> http://www.egnite.de/mailman/listinfo/en-nut-discussion
>
> ---
> Incoming mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.515 / Virus Database: 313 - Release Date: 1/09/2003
>
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.515 / Virus Database: 313 - Release Date: 1/09/2003

_______________________________________________
En-Nut-Discussion mailing list
En-Nut-Discussion at egnite.de
http://www.egnite.de/mailman/listinfo/en-nut-discussion

---
Incoming mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.518 / Virus Database: 316 - Release Date: 11/09/2003

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.518 / Virus Database: 316 - Release Date: 11/09/2003




More information about the En-Nut-Discussion mailing list