#include #include "../src/librpitx.h" #include #include "stdio.h" #include #include bool running=true; /*int gcd ( int a, int b ) { int c; while ( a != 0 ) { c = a; a = b%a; b = c; } return b; }*/ uint64_t gcd(uint64_t x,uint64_t y) { return y == 0 ? x : gcd(y, x % y); } uint64_t lcm(uint64_t x, uint64_t y) { return x * y / gcd(x, y); } void SimpleTest(uint64_t Freq) { generalgpio genpio; fprintf(stderr,"GPIOPULL =%x\n",genpio.gpioreg[GPPUDCLK0]); #define PULL_OFF 0 #define PULL_DOWN 1 #define PULL_UP 2 genpio.gpioreg[GPPUD]=1;//PULL_DOWN; usleep(150); genpio.gpioreg[GPPUDCLK0]=(1<<4); //GPIO CLK is GPIO 4 usleep(150); genpio.gpioreg[GPPUDCLK0]=(0); //GPIO CLK is GPIO 4 //genpio.setpulloff(4); padgpio pad; pad.setlevel(7); clkgpio clk; clk.print_clock_tree(); clk.SetPllNumber(clk_pllc,0); //clk.SetAdvancedPllMode(true); //clk.SetPLLMasterLoop(0,4,0); //clk.Setppm(+7.7); clk.SetCenterFrequency(Freq,1000); double freqresolution=clk.GetFrequencyResolution(); double RealFreq=clk.GetRealFrequency(0); fprintf(stderr,"Frequency resolution=%f Error freq=%f\n",freqresolution,RealFreq); int Deviation=0; clk.SetFrequency(000); clk.enableclk(4); usleep(100); //clk.SetClkDivFrac(100,0); // If mash!=0 update doesnt seem to work int count=0; while(running) { //clk.SetMasterMultFrac(44,(1<15) { Kp=0; Ki=Ki+1; } //Ki=Ki+1; if(Ki>11) { Ki=4; Ka++; } Ki=Kp; clk.SetClkDivFrac(count,count); //clk.SetPLLMasterLoop(Ki,4,Ka); //clk.SetPLLMasterLoop(2,4,0); //clk.SetPLLMasterLoop(3,4,0); //best one //printf("Ki=%d :Kp %d Ka %d\n ",Ki,Kp,Ka); /*clk.SetFrequency(000); sleep(5); clk.SetFrequency(freqresolution); sleep(5);*/ } /* for(int i=0;i<100000;i+=1) { clk.SetFrequency(0); usleep(1000); }*/ clk.disableclk(4); } void SimpleTestDMA(uint64_t Freq) { int SR=200000; int FifoSize=4096; ngfmdmasync ngfmtest(Freq,SR,14,FifoSize); for(int i=0;running;) { //usleep(10); usleep(FifoSize*1000000.0*3.0/(4.0*SR)); int Available=ngfmtest.GetBufferAvailable(); if(Available>FifoSize/2) { int Index=ngfmtest.GetUserMemIndex(); //printf("GetIndex=%d\n",Index); for(int j=0;j5000)?1000:0); ngfmtest.SetFrequencySample(Index+j,(i%SR)/10.0); i++; } } } fprintf(stderr,"End\n"); ngfmtest.stop(); } void SimpleTestFileIQ(uint64_t Freq) { FILE *iqfile=NULL; iqfile=fopen("../ssbtest.iq","rb"); if (iqfile==NULL) printf("input file issue\n"); #define IQBURST 1280 bool stereo=true; int SR=48000; int FifoSize=512; iqdmasync iqtest(Freq,SR,14,FifoSize,MODE_IQ); short IQBuffer[IQBURST*2]; std::complex CIQBuffer[IQBURST]; while(running) { int nbread=fread(IQBuffer,sizeof(short),IQBURST*2,iqfile); if(nbread>0) { for(int i=0;i(IQBuffer[i*2]/32768.0,IQBuffer[i*2+1]/32768.0); } iqtest.SetIQSamples(CIQBuffer,nbread/2,1); } else { printf("End of file\n"); fseek ( iqfile , 0 , SEEK_SET ); } } iqtest.stop(); } void SimpleTestbpsk(uint64_t Freq) { clkgpio clk; clk.print_clock_tree(); int SR=250000; int FifoSize=10000; int NumberofPhase=2; phasedmasync biphase(Freq,SR,NumberofPhase,14,FifoSize); padgpio pad; pad.setlevel(7); int lastphase=0; #define BURST_SIZE 100 int PhaseBuffer[BURST_SIZE]; while(running) { for(int i=0;i256) { int Index=testserial.GetUserMemIndex(); for(int i=0;i256) { int Index=amtest.GetUserMemIndex(); int nbread=fread(AudioBuffer,sizeof(short),128*2,audiofile); if(nbread>0) { for(int i=0;i1) Freq=atof(argv[1]); for (int i = 0; i < 64; i++) { struct sigaction sa; std::memset(&sa, 0, sizeof(sa)); sa.sa_handler = terminate; sigaction(i, &sa, NULL); } //SimpleTest(Freq); //SimpleTestbpsk(Freq); //SimpleTestFileIQ(Freq); //SimpleTestDMA(Freq); //SimpleTestAm(Freq); //SimpleTestOOK(Freq); SimpleTestBurstFsk(Freq); }