17 #include "simpletools.h" 21 #define CTR_NCO (0b100 << 26); 24 #define CTR_PLL (0b10 << 26); 27 static unsigned int stack[44 + 20];
29 static volatile unsigned int cog = 0;
30 static volatile int ctra, ctrb, frqa, frqb;
32 void square_wave_cog(
void *par);
33 void square_wave_setup(
int pin,
int freq,
int* ctr,
int* frq);
34 int int_fraction(
int a,
int b,
int shift);
38 void square_wave(
int pin,
int channel,
int freq)
40 if(!cog) cog = cogstart(square_wave_cog, NULL,
41 stack,
sizeof(stack)) + 1;
44 square_wave_setup(pin, freq, &ctr, &frq);
72 void square_wave_stop(
void)
86 void square_wave_cog(
void *par)
93 if((CTRA & 0b111111) != (ctra & 0b111111))
95 pin = CTRA & 0b111111;
104 pin = CTRA & 0b111111;
114 if((CTRB & 0b111111) != (ctrb & 0b111111))
116 pin = CTRB & 0b111111;
125 pin = CTRB & 0b111111;
134 void square_wave_setup(
int pin,
int freq,
int* _ctr,
int* _frq)
149 d = (freq - 1) / 1000000;
151 for(i = 32; i>0; i--)
160 frq = int_fraction(freq, CLKFREQ, s);
167 int int_fraction(
int a,
int b,
int shift)
179 for(i = 0; i < 32; i++)