This section contains definitions for supporting access
to device control registers in an architecture neutral
fashion.
These definitions are normally found in the header file
cyg/hal/hal_io.h. This file itself contains
macros that are generic to the architecture. If there are variant or
platform specific IO access macros then these will be found in
cyg/hal/var_io.h and
cyg/hal/plf_io.h in the variant or platform HALs
respectively. These files are include automatically by this header, so
need not be included explicitly.
This header (or more likely cyg/hal/plf_io.h) also
defines the PCI access macros. For more information on these see the eCos
PCI library reference documentation.
This type is used to store the address of an I/O register. It will
normally be a memory address, an integer port address or an offset
into an I/O space. More complex architectures may need to code an
address space plus offset pair into a single word, or may represent it
as a structure.
Values of variables and constants of this type will usually be
supplied by configuration mechanisms or in target specific headers.
HAL_READ_XXX( register, value )
HAL_READ_XXX_VECTOR( register, buffer, count, stride )
These macros support the reading of I/O registers in various
sizes. The XXX component of the name may be
UINT8, UINT16,
UINT32.
HAL_READ_XXX() reads the appropriately sized
value from the register and stores it in the variable passed as the
second argument.
HAL_READ_XXX_VECTOR() reads
count values of the appropriate size into
buffer. The stride
controls how the pointer advances through the register space. A stride
of zero will read the same register repeatedly, and a stride of one
will read adjacent registers of the given size. Greater strides will
step by larger amounts, to allow for sparsely mapped registers for
example.
HAL_WRITE_XXX( register, value )
HAL_WRITE_XXX_VECTOR( register, buffer,count, stride )
These macros support the writing of I/O registers in various
sizes. The XXX component of the name may be
UINT8, UINT16,
UINT32.
HAL_WRITE_XXX() writes
the appropriately sized value from the variable passed as the second argument
stored it in the register.
HAL_WRITE_XXX_VECTOR() writes
count values of the appropriate size from buffer. The stride controls
how the pointer advances through the register space. A stride of
zero will write the same register repeatedly, and a stride of one
will write adjacent registers of the given size. Greater strides
will step by larger amounts, to allow for sparsely mapped registers
for example.