Ktam3874/pitx software guide – Kontron KTAM3874-pITX User Manual

Page 37

Advertising
background image

KTD-S0057-I

Page 33 Linux® Programming Examples (DebianTM)


KTAM3874/pITX Software Guide


int main (int argc, char **argv)
{
int

fd;

void *map_base, *virt_addr;

unsigned long read_result, writeval;

off_t

target;

int access_type = 'd';

if (argc < 2)

{

fprintf (stderr, "\nUsage:\t%s {address} [type [data]]\n"

"\taddress : memory address to act upon\n"

"\ttype : access operation type : [b]yte, [w]ord, [d]word\n"

"\tdata : data to be written\n\n", argv[0]);

exit

(1);

}

target = strtoul (argv[1], NULL, 16);

if (argc > 2)

access_type = tolower (argv[2][0]);

if ((fd = open ("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL;

map_base = mmap (0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK);

if (map_base == (void *) -1) FATAL;

virt_addr = map_base + (target & MAP_MASK);

switch

(access_type)

{

case 'b': read_result = *((unsigned char *) virt_addr); break;

case 'w': read_result = *((unsigned short *) virt_addr); break;

case 'd': read_result = *((unsigned long *) virt_addr); break;

default : fprintf (stderr, "Illegal data type '%c'.\n", access_type); exit (2);

}

printf ("Value at address 0x%lX: 0x%lX\n", target, read_result);

fflush

(stdout);

if (argc > 3)

{

writeval = strtoul (argv[3], NULL, 16);

switch

(access_type)

{

case 'b': *((unsigned char *) virt_addr) = writeval;

read_result = *((unsigned char *) virt_addr);

break;

case 'w': *((unsigned short *) virt_addr) = writeval;

read_result = *((unsigned short *) virt_addr);

break;

case 'd': *((unsigned long *) virt_addr) = writeval;

read_result = *((unsigned long *) virt_addr);

break;

}

printf ("Written: 0x%lX - Readback: 0x%lX\n", writeval, read_result);

fflush

(stdout);

}

K

Advertising
This manual is related to the following products: