I am working on Beagle Bone Black TIMER4. I wanted to access the registers directly from user space and so opted for dev/mem. But I end up getting bus error when I try to read the contents in a memory address. The code is posted below:
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include <signal.h>
#define TIMER4_START_addr 0x48044000
#define TIDR 0x00
#define TIOCP_CFG 0x10
int main()
{
unsigned int reg;
char *timer_addr = NULL;
printf("\n Start Pgm");
int mem, integer;
if ((mem = open ("/dev/mem", O_RDWR | O_SYNC)) < 0)
{
printf("Cannot open /dev/mem\n");
return 1;
}
printf("Opened /dev/mem\n");
timer_addr = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, mem, TIMER4_START_addr);
printf("GPIO mapped to %p\n", timer_addr);
reg = *((int*) timer_addr);
printf("GPIO1 configuration: %x\n", reg);
return 0;
}
The output that I get is :
Start
PgmOpened /dev/mem
GPIO mapped to 0xb6fb7000
Bus error
Please let me know how to overcome this problem.
Regards Anand