Listing 3: Example of how to implement and use SG functions with a
processor architecture which only have a single linear address space
// Defined in iohw.h
#define access8 volatile unsigned char *
#define iowr8( PADDR, PVAL ) (* ( PADDR ) = ( PVAL ))
#define iowrbuf8( PADDR, PINDEX, PVAL ) \
(( PADDR )[( PINDEX )] = ( PVAL ))
#include <iohw_ta.h>
// Defined in iohw_ta.h
#define PORT1 ((access8) (0xfff0)) // I/O register definition
// Portable driver function module
#include <iohw.h>
void nibblewr1 ( unsigned char data )
{
iowr8( PORT1, data & 0xf);
iowr8( PORT1, data >> 4);
}
void nibblewr2 ( access8 adr, unsigned char data )
{
iowr8( adr, data & 0xf);
iowr8( adr, data >> 4);
}
void nibblewr3 ( unsigned int index, unsigned char data )
{
iowrbuf8( PORT1, index, data & 0xf);
iowrbuf8( PORT1, index, data >> 4);
}
void nibblewr4 ( access8 adr, unsigned int index,
unsigned char data )
{
iowrbuf8( adr, index, data & 0xf);
iowrbuf8( adr, index, data >> 4);
}
void iotest(void)
{
nibblewr1( 0x12 );
nibblewr2( PORT1, 0x34 );
nibblewr3( 10, 0x56);
nibblewr4( PORT1, 3, 0x78 );
}
/* End of File */