From b84c05173d441fbbb7ceb48fe087424e000ab2e7 Mon Sep 17 00:00:00 2001 From: PA7T Date: Fri, 1 Sep 2017 18:34:28 +0000 Subject: [PATCH] c-code from Pavel for measuring the 1-pps deviation of the 125 MHz ADC clock --- measure-corr | Bin 0 -> 10020 bytes src/measure-corr/LICENSE | 20 ++++++++++ src/measure-corr/Makefile | 10 +++++ src/measure-corr/measure-corr | Bin 0 -> 10020 bytes src/measure-corr/measure-corr.c | 63 ++++++++++++++++++++++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 measure-corr create mode 100644 src/measure-corr/LICENSE create mode 100644 src/measure-corr/Makefile create mode 100644 src/measure-corr/measure-corr create mode 100644 src/measure-corr/measure-corr.c diff --git a/measure-corr b/measure-corr new file mode 100644 index 0000000000000000000000000000000000000000..eab92e854161eeb2f2cfdb0210309265f51c722d GIT binary patch literal 10020 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 X^Ev3BYX;|lq9a(aH>!t3rt{wQKe( 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 X^Ev3BYX;|lq9a(aH>!t3rt +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int fd, i; + char *end; + volatile void *cfg, *sts; + volatile uint32_t *fifo; + volatile uint8_t *rst; + volatile uint16_t *cntr; + long number; + uint32_t buffer; + + errno = 0; + number = (argc == 2) ? strtol(argv[1], &end, 10) : -1; + if(errno != 0 || end == argv[1] || number < 1 || number > 30) + { + fprintf(stderr, "Usage: measure-corr [1-30]\n"); + return EXIT_FAILURE; + } + + if((fd = open("/dev/mem", O_RDWR)) < 0) + { + perror("open"); + return EXIT_FAILURE; + } + + sts = mmap(NULL, sysconf(_SC_PAGESIZE), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x40000000); + cfg = mmap(NULL, sysconf(_SC_PAGESIZE), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x40001000); + fifo = mmap(NULL, sysconf(_SC_PAGESIZE), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x4000C000); + + rst = (uint8_t *)(cfg + 3); + cntr = (uint16_t *)(sts + 28); + + *rst &= ~1; + *rst |= 1; + + sleep(number + 1); + + if(*cntr < number) + { + fprintf(stderr, "Not enough PPS pulses.\n"); + return EXIT_FAILURE; + } + + buffer = 0; + + for(i = 0; i < number; ++i) + { + buffer += *fifo + 1; + } + + printf("%.2f\n", (125.0e6 * number / buffer - 1.0) * 1.0e6); + + return EXIT_SUCCESS; +}