From c60bcd97f6b8f025d5ea69d6f8cc19b3a9622299 Mon Sep 17 00:00:00 2001 From: Greek64 Date: Tue, 28 Apr 2020 12:18:08 +0200 Subject: [PATCH] * Add C Program to write configuration --- sw/config | 13 +++++++ sw/out | Bin 0 -> 24 bytes sw/write_config | Bin 0 -> 17240 bytes sw/write_config.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 sw/config create mode 100644 sw/out create mode 100755 sw/write_config create mode 100644 sw/write_config.c diff --git a/sw/config b/sw/config new file mode 100644 index 0000000..bf76251 --- /dev/null +++ b/sw/config @@ -0,0 +1,13 @@ +#Feedback Loop Configuration File +# +#Each line of this file defines a configuration slot and consists of integer numbers delimited by white spaces in the following order: +#ADDSUB_MODE ADD_INPUT_MUX DELAY FACTOR TIMESTAMP +# +#ADDSUB_MODE: Select feedback mode (0=negative, 1=positive) +#ADD_INPUT_MUX: Select feedback input (0=GND[only ADC Input 1], 1=ADC Input 2[Both ADC inputs are used]) +#DELAY: Clock cycles counts (50 ns period) to delay the feedback signal [0-255] +#FACTOR: Multiplication factor to apply to the feedback signal [0-15] (NOTE: Integer is intepreted as a 1Q3 Fixed Point Number!) +#TIMESTAMP: Defines the clock count number from the sync pulse from which on the configurations settings will be applied. [32-bit unsigned integer] +# First Config slot should have a timestamp equal to zero. +1 0 0 8 0 +0 0 0 8 1200000000 diff --git a/sw/out b/sw/out new file mode 100644 index 0000000000000000000000000000000000000000..285b4a8824c33830ac1bde18599055bdd6faa57f GIT binary patch literal 24 ZcmZQzU|`^2U^u|g)8-DO8-QFe001R>0;&K2 literal 0 HcmV?d00001 diff --git a/sw/write_config b/sw/write_config new file mode 100755 index 0000000000000000000000000000000000000000..ef38376c9c1bd305cb60264bf228d5a9d2305adf GIT binary patch literal 17240 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 +#include +#include +#include +#include +#include +#include + +void bail(); + +FILE* src = NULL; +int dest = -1; +char* line = NULL; +size_t len = 0; + + +int main(int argc, char *argv[]){ + + if (argc != 3){ + fprintf(stderr,"USAGE:\n %s source-file target-file\n", argv[0]); + return -1; + } + + // Open Source Configuration File + src = fopen(argv[1], "r"); + if(src == NULL){ + perror("Failed to open file"); + bail(); + return -1; + } + + // Open Destination File + dest = open(argv[2], O_WRONLY); + if(dest == -1){ + perror("Failed to open file"); + bail(); + return -1; + } + + uint64_t data, addsub_mode, add_input_mode, delay, factor, timestamp; + + /*File Parsing Loop*/ + while(getline(&line, &len, src) != -1){ + //Check if Comment Line + if(line[0] == '#'){ + continue; + } + + if(sscanf(line, "%u %u %u %u %u", &addsub_mode, &add_input_mode, &delay, &factor, ×tamp) < 5){ + perror("Parsing of configuration file failed"); + fprintf(stderr, "Failing line: %s", line); + bail(); + return -1; + } + + data = 0x0; + data |= ((uint64_t)0x1 << 63) | ((addsub_mode & 0x1) << 62) | ((add_input_mode & 0x1) << 61) | ((delay & 0xFF) << 40) | + ((factor & 0xF) << 32) | (timestamp & 0xFFFFFFFF); + if(write(dest, &data, sizeof(uint64_t)) != sizeof(uint64_t)){ + perror("Failed to write data"); + bail(); + return -1; + } + } + + //Write A non enabled slot + data = 0x0; + if(write(dest, &data, sizeof(uint64_t)) != sizeof(uint64_t)){ + perror("Failed to write data"); + bail(); + return -1; + } + + //Exit safely + bail(); + return 0; +} + +void bail(){ + if(src != NULL){ + (void)fclose(src); + } + if(dest != -1){ + (void)close(dest); + } + if(line != NULL){ + free(line); + } +}