Ranjit Paulraj
|
Device register mapping in ARM
|
Ranjit Paulraj
04/18/2012 8:22 AM
post92603
|
Device register mapping in ARM
we are using AT91SAM9263 on QNX 6.4.1. As per QNX documentation 'mmap_device_io()' should be called only with io
privileges. i.e)calling thread should have called ThreadCtl() with the _NTO_TCTL_IO before using mmap_device_io().
I got following code to toggle gpio port. I am able to run this code successful without io privilege.
fyi, I am running this code as 'root'.
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/mman.h>
#include <arm/at91sam9263.h>
#include <sys/types.h>
#include <hw/inout.h>
int main(int argc, char *argv[]) {
volatile uintptr_t gpio_hw_vbase = (uintptr_t)MAP_FAILED;
gpio_hw_vbase = mmap_device_io((size_t)(5u * (uint_t)AT91SAM9263_PIO_SIZE), (uint64_t)AT91SAM9263_PIOA_BASE);
if(gpio_hw_vbase == MAP_FAILED)
{
printf("map failed, no io privilege");
}
else
{
printf("map success, io privilege granted");
out32( (uintptr_t)(gpio_hw_vbase + ((uintptr_t)2*(uintptr_t)AT91SAM9263_PIO_SIZE) + AT91SAM9263_PIO_SODR),
(uint32_t)0x00001000u );
getchar();
out32( (uintptr_t)(gpio_hw_vbase + ((uintptr_t)2*(uintptr_t)AT91SAM9263_PIO_SIZE) + AT91SAM9263_PIO_CODR),
(uint32_t)0x00001000u );
}
return EXIT_SUCCESS;
}
|
|
|