19 void dac_loop(
void *par);
22 dac dac_setup(
int pin,
int channel,
int bits)
25 if(channel > 1) tda.daCog = -1;
else tda.daCog = cogid();
27 tda.daBitX = 32 - bits;
29 tda.daCtr = DUTY_SE | pin;
34 void dac_set(
dac* da,
int value)
36 if(cogid() != da->daCog)
42 if(da->daCh == 0) CTRA = da->daCtr;
else CTRB = da->daCtr;
43 if(da->daCh == 0) FRQA = value << da->daBitX;
else FRQB = value << da->daBitX;
44 DIRA |= (1 << da->daPin);
49 int dac_start(
dacmem mem,
int sampleRate,
dac* da0,
dac* da1)
55 temp.daDt = CLKFREQ/sampleRate;
62 if(da0->daBitX < 0) da0->daBitX = - da0->daBitX;
69 if(da1->daBitX < 0) da1->daBitX = - da1->daBitX;
71 int mycog = cogstart(dac_loop, &temp, mem.stack,
sizeof(mem.stack));
72 if(da0)
while(da0->daCog == -1);
73 if(da1)
while(da1->daCog == -1);
79 void dac_loop(
void *par)
83 unsigned int dt = dacAddr -> daDt;
85 dac* da0 = dacAddr->da0;
86 dac* da1 = dacAddr->da1;
88 if(da0) da0->daCog = cogid();
89 if(da1) da1->daCog = cogid();
91 if(da0->daVal < 0) da0->daVal = -da0->daVal;
92 if(da1->daVal < 0) da1->daVal = -da1->daVal;
97 DIRA |= (1 << da0->daPin);
102 DIRA |= (1 << da1->daPin);
114 FRQA = da0->daVal << da0->daBitX;
115 FRQB = da1->daVal << da1->daBitX;
121 void dac_close(
dac* da)
123 DIRA &= ~(1<<da->daPin);
137 int dac_stop(
int cogid)