Commit 2146e89f7c2a283fd1368bb58c4a878842564d89
1 parent
de9cf8e01a
Exists in
master
ddsFreq.c : suppression fonction checksize
Showing 1 changed file with 1 additions and 1 deletions Inline Diff
src/ddsFreq.c
#include <stdlib.h> | 1 | 1 | #include <stdlib.h> | |
#include <stdio.h> | 2 | 2 | #include <stdio.h> | |
#include <unistd.h> | 3 | 3 | #include <unistd.h> | |
#include <math.h> | 4 | 4 | #include <math.h> | |
#include "ddsFreq.h" | 5 | 5 | #include "ddsFreq.h" | |
#include "ad9915.h" | 6 | 6 | #include "ad9915.h" | |
7 | 7 | |||
//#define debug | 8 | 8 | //#define debug | |
long double pgcd ( long double m , long double n) | 9 | 9 | long double pgcd ( long double m , long double n) | |
{ | 10 | 10 | { | |
if (fmod(m,n) ==0) | 11 | 11 | if (fmod(m,n) ==0) | |
return n; | 12 | 12 | return n; | |
return pgcd(n,fmod(m,n)); | 13 | 13 | return pgcd(n,fmod(m,n)); | |
} | 14 | 14 | } | |
15 | 15 | |||
int setddsFreq(int fd, int f_dds, long double f0, long double fs) | 16 | 16 | int setddsFreq(int fd, int f_dds, long double f0, long double fs) | |
{ | 17 | 17 | { | |
18 | 18 | |||
#ifdef debug | 19 | 19 | #ifdef debug | |
printf("f0=%Le\tfs=%Le\n",f0,fs); | 20 | 20 | printf("f0=%Le\tfs=%Le\n",f0,fs); | |
#endif | 21 | 21 | #endif | |
22 | 22 | |||
if (fs<0 || f0<0) return EXIT_FAILURE; | 23 | 23 | if (fs<0 || f0<0) return EXIT_FAILURE; | |
24 | 24 | |||
struct frac f1; | 25 | 25 | struct frac f1; | |
26 | 26 | |||
f1.numerator = f0; | 27 | 27 | f1.numerator = f0; | |
f1.denominator = fs; | 28 | 28 | f1.denominator = fs; | |
29 | 29 | |||
long double d1 = pgcd (f1.numerator , f1.denominator ); | 30 | 30 | long double d1 = pgcd (f1.numerator , f1.denominator ); | |
//printf(" d1 = %24.16Lf\n",d1); | 31 | 31 | //printf(" d1 = %24.16Lf\n",d1); | |
32 | 32 | |||
long double M = f0 / d1 ; | 33 | 33 | long double M = f0 / d1 ; | |
long double N = fs / d1 ; | 34 | 34 | long double N = fs / d1 ; | |
//printf(" M = f0 / d1 = %24.16Lf\n",M); | 35 | 35 | //printf(" M = f0 / d1 = %24.16Lf\n",M); | |
//printf(" N = fs / d1 = %24.16Lf\n",N); | 36 | 36 | //printf(" N = fs / d1 = %24.16Lf\n",N); | |
37 | 37 | |||
38 | 38 | |||
long double ftw = M * scalbn(1.0,32); | 39 | 39 | long double ftw = M * scalbn(1.0,32); | |
ftw /= N; | 40 | 40 | ftw /= N; | |
//printf("ftw = %24.16Lf\n",ftw); | 41 | 41 | //printf("ftw = %24.16Lf\n",ftw); | |
42 | 42 | |||
43 | 43 | |||
//printf("X=floor(ftw) = %24.16Lf\n",(long double)floor(ftw)); | 44 | 44 | //printf("X=floor(ftw) = %24.16Lf\n",(long double)floor(ftw)); | |
45 | 45 | |||
long double Y = M * scalbn(1.0,32); | 46 | 46 | long double Y = M * scalbn(1.0,32); | |
Y -= N * floor(ftw); | 47 | 47 | Y -= N * floor(ftw); | |
//printf("Y=M*2**32-X*N = %24.16Lf\n",Y); | 48 | 48 | //printf("Y=M*2**32-X*N = %24.16Lf\n",Y); | |
49 | 49 | |||
long double d2 = pgcd (Y,N); | 50 | 50 | long double d2 = pgcd (Y,N); | |
//printf(" d2 = %24.16Lf\n",d2); | 51 | 51 | //printf(" d2 = %24.16Lf\n",d2); | |
52 | 52 | |||
long double A = Y / d2; | 53 | 53 | long double A = Y / d2; | |
long double B = N / d2; | 54 | 54 | long double B = N / d2; | |
//printf("A = Y/d2 = %24.16Lf\n",A); | 55 | 55 | //printf("A = Y/d2 = %24.16Lf\n",A); | |
//printf("B = N/d2 = %24.16Lf\n",B); | 56 | 56 | //printf("B = N/d2 = %24.16Lf\n",B); | |
57 | 57 | |||
//printf("f0 = (M/N) * fclk= %24.32Lf\n",fs*M/N); | 58 | 58 | //printf("f0 = (M/N) * fclk= %24.32Lf\n",fs*M/N); | |
//printf("f0 = (X+A/B)2**32= %24.32Lf\n",fs*(floor(ftw)+A/B)/scalbn(1.0,32)); | 59 | 59 | //printf("f0 = (X+A/B)2**32= %24.32Lf\n",fs*(floor(ftw)+A/B)/scalbn(1.0,32)); | |
60 | 60 | |||
#ifdef debug | 61 | 61 | #ifdef debug | |
printf("\n so finally the programmed registers are :\n" | 62 | 62 | printf("\n so finally the programmed registers are :\n" | |
"ftw= 0x%08x A= 0x%08x B= 0x%08x\n" | 63 | 63 | "ftw= 0x%08x A= 0x%08x B= 0x%08x\n" | |
"",(unsigned int)ftw,(unsigned int)A,(unsigned int)B); | 64 | 64 | "",(unsigned int)ftw,(unsigned int)A,(unsigned int)B); | |
printf("uint ftw = %d\n",(unsigned int)ftw); | 65 | 65 | printf("uint ftw = %d\n",(unsigned int)ftw); | |
66 | 66 | |||
printf("\n 0x%08x 0x%08x 0x%08x \n\n",(unsigned int)ftw,(unsigned int)A,(unsigned int)B); | 67 | 67 | printf("\n 0x%08x 0x%08x 0x%08x \n\n",(unsigned int)ftw,(unsigned int)A,(unsigned int)B); | |
//setFreqMM(fd,f_dds,(unsigned int)ftw, (unsigned int)A, (unsigned int)B); | 68 | 68 | //setFreqMM(fd,f_dds,(unsigned int)ftw, (unsigned int)A, (unsigned int)B); | |
#endif | 69 | 69 | #endif | |
setFreqMM(fd,f_dds,(unsigned int)ftw, 2*(unsigned int)B, 2*(unsigned int)A); //??why *2?? | 70 | 70 | setFreqMM(fd,f_dds,(unsigned int)ftw, 2*(unsigned int)B, 2*(unsigned int)A); //??why *2?? | |
return EXIT_SUCCESS; | 71 | 71 | return EXIT_SUCCESS; | |
} | 72 | 72 | } | |
int ddsFreq(int fd, int f_dds) | 73 | 73 | int ddsFreq(int fd, int f_dds) | |
{ | 74 | 74 | { | |
checkSize(); | 75 | 75 | //checkSize(); | |
long double f0,fs; | 76 | 76 | long double f0,fs; | |
//printf("long = %lu\n",sizeof (long)); | 77 | 77 | //printf("long = %lu\n",sizeof (long)); | |
//printf("float = %lu\n",sizeof (float)); | 78 | 78 | //printf("float = %lu\n",sizeof (float)); | |
//printf("double = %lu\n",sizeof (double)); | 79 | 79 | //printf("double = %lu\n",sizeof (double)); | |
//printf("long double = %lu\n",sizeof (long double)); | 80 | 80 | //printf("long double = %lu\n",sizeof (long double)); | |
81 | 81 | |||
printf("\nDesired output Frequency (MHz) : "); | 82 | 82 | printf("\nDesired output Frequency (MHz) : "); | |
scanf("%Lf",&f0); | 83 | 83 | scanf("%Lf",&f0); | |
printf("DDS frequency Clock (MHz) : "); | 84 | 84 | printf("DDS frequency Clock (MHz) : "); | |
scanf("%Lf",&fs); | 85 | 85 | scanf("%Lf",&fs); | |
86 | 86 | |||
//long double f0=atof(argv[1]); //desired output freq | 87 | 87 | //long double f0=atof(argv[1]); //desired output freq | |
//long double fs=atof(argv[2]); //dds_clk | 88 | 88 | //long double fs=atof(argv[2]); //dds_clk | |
//int toto = (int)strtol(argv[3],NULL,0); | 89 | 89 | //int toto = (int)strtol(argv[3],NULL,0); | |
//printf("toto=%d\t%x\n",toto,toto); | 90 | 90 | //printf("toto=%d\t%x\n",toto,toto); | |
91 | 91 | |||
if (fs<0 || f0<0) return EXIT_FAILURE; | 92 | 92 | if (fs<0 || f0<0) return EXIT_FAILURE; | |
93 | 93 | |||
struct frac f1; | 94 | 94 | struct frac f1; | |
95 | 95 | |||
f1.numerator = f0; | 96 | 96 | f1.numerator = f0; | |
f1.denominator = fs; | 97 | 97 | f1.denominator = fs; | |
98 | 98 | |||
long double d1 = pgcd (f1.numerator , f1.denominator ); | 99 | 99 | long double d1 = pgcd (f1.numerator , f1.denominator ); | |
printf(" d1 = %24.16Lf\n",d1); | 100 | 100 | printf(" d1 = %24.16Lf\n",d1); | |
101 | 101 | |||
long double M = f0 / d1 ; | 102 | 102 | long double M = f0 / d1 ; | |
long double N = fs / d1 ; | 103 | 103 | long double N = fs / d1 ; | |
printf(" M = f0 / d1 = %24.16Lf\n",M); | 104 | 104 | printf(" M = f0 / d1 = %24.16Lf\n",M); | |
printf(" N = fs / d1 = %24.16Lf\n",N); | 105 | 105 | printf(" N = fs / d1 = %24.16Lf\n",N); |