 |
PropWare
3.0.0.229
C++ objects and CMake build system for Parallax Propeller
|
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);
40 if(!cog) cog =
cogstart(square_wave_cog, NULL,
41 stack,
sizeof(stack)) + 1;
44 square_wave_setup(pin, freq, &ctr, &frq);
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++)
#define FRQA
Counter A frequency register.
#define FRQB
Counter B frequency register.
#define CLKFREQ
Returns the current clock frequency.
#define CTRB
Counter B control register.
#define cogstop(a)
Stop a COG.
#define DIRA
Use to set pins to input (0) or output (1).
int cogstart(void(*func)(void *), void *par, void *stack, size_t stacksize)
Start a new propeller LMM function/thread in another COG.
#define CTRA
Counter A control register.