|
|
/*
|
|
|
* This programmer uses AT91' System clock
|
|
|
*
|
|
|
* 2010 by Ricardo V. Rojas Quispe
|
|
|
*/
|
|
|
|
|
|
#include <stdint.h>
|
|
|
#include <stdlib.h>
|
|
|
#include <stdio.h>
|
|
|
#include <unistd.h>
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
#include <sys/stat.h>
|
|
|
#include <sys/mman.h>
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
#include "./Librerias/at91sysclock.h"
|
|
|
|
|
|
//Mapeando los registro en memoria:
|
|
|
AT91S_PMC *clock_map(unsigned int clockbase){
|
|
|
int fd;
|
|
|
void *base;
|
|
|
|
|
|
AT91S_PMC *clock;
|
|
|
|
|
|
off_t addr = clockbase;
|
|
|
|
|
|
if ((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) {
|
|
|
fprintf(stderr, "Cannot open /dev/mem.\n");
|
|
|
exit(EXIT_FAILURE);
|
|
|
}
|
|
|
|
|
|
//fprintf(stderr, "/dev/mem opened.\n");
|
|
|
|
|
|
base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK);
|
|
|
|
|
|
if (base == (void *) -1) {
|
|
|
fprintf(stderr, "Cannot open /dev/mem.\n");
|
|
|
exit(EXIT_FAILURE);
|
|
|
}
|
|
|
|
|
|
//fprintf(stderr, "Memory mapped at address %p.\n", base);
|
|
|
|
|
|
clock = base + (addr & MAP_MASK);
|
|
|
|
|
|
return clock;
|
|
|
}
|
|
|
//Habilitamos el clock de ADC
|
|
|
void enable_clock_adc(AT91S_PMC * clock){
|
|
|
clock->PMC_PCER=0x20;
|
|
|
}
|
|
|
//Leemos el registro de estado de clock para perifericos
|
|
|
unsigned int status_clock_adc(AT91S_PMC * clock){
|
|
|
return (clock->PMC_PCSR);
|
|
|
}
|
|
|
|