[ECOS] Question about writing Device Driver
Nick Garnett
nickg@redhat.com
Thu Oct 25 03:00:00 GMT 2001
Jonathan Larmour <jlarmour@redhat.com> writes:
> HuangQiang wrote:
> >
> > Hi all:
> > I am currently using an ARM E7T board. And I want to add some exteranl
> > device to this board. I would like to write the device driver for the
> > exteranl device. what I want to do is to access the external device via the
> > system address and data bus then set the configuration register in the
> > external device. The external device has been memory mapped. So if I want to
> > develop my own device driver in eCOS what should I do? and what procedure
> > should I follow? In the eCOS manual I can't find any information about
> > setting the configuration registers of the exteranl device. Thank you for
> > any help. (Or any sample code or example for such situation?)
>
> If it's memory mapped then it's simple. Many if not most device drivers in
> eCos right now are using memory mapped I/O. Simply access the device
> addresses through volatile pointers, e.g.
>
> #define DEV_BASE 0x1000000
> #define DEV_RXSTAT (*(volatile unsigned int *)(DEV_BASE + 0))
> #define DEV_TXSTAT (*(volatile unsigned int *)(DEV_BASE + 4))
>
> int rxstat = DEV_RXSTAT;
>
Actually, you should use the HAL_READ_*() and HAL_WRITE_*() macros
supplied in hal_io.h. This way the driver will be more portable and
the macro encapsulation gives you a chance to fix up any cache, MMU,
write buffer, endianness or addressing issues that might arise.
--
Nick Garnett, eCos Kernel Architect
Red Hat, Cambridge, UK
More information about the Ecos-discuss
mailing list