Welcome, Guest
Username: Password: Remember me

TOPIC: reverse mode

reverse mode 1 year 6 months ago #1356

  • freddylamenace
  • freddylamenace's Avatar
  • OFFLINE
  • New Member
  • Posts: 13
  • Thank you received: 5
  • Karma: 2
Hi,

I'm trying to do a reverse play but it does'nt work and i don't understand why. Can you help me ?

thanks

int in_ADC0, in_ADC1; //variables for 2 ADCs values (ADC0, ADC1)
int POT0, POT1, POT2, out_DAC0, out_DAC1; //variables for 3 pots (ADC8, ADC9, ADC10)
int LED = 3;
int FOOTSWITCH = 7;
int TOGGLE = 2;
int p;

uint16_t sDelayBuffer0[44100];

void setup()
{
//turn on the timer clock in the power management controller
pmc_set_writeprotect(false);
pmc_enable_periph_clk(ID_TC4);

//we want wavesel 01 with RC
TC_Configure(TC1,1, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK2);
TC_SetRC(TC1, 1, 238); // sets <> 44.1 Khz interrupt rate
TC_Start(TC1, 1);

// enable timer interrupts on the timer
TC1->TC_CHANNEL[1].TC_IER=TC_IER_CPCS;
TC1->TC_CHANNEL[1].TC_IDR=~TC_IER_CPCS;

//Enable the interrupt in the nested vector interrupt controller
//TC4_IRQn where 4 is the timer number * timer channels (3) + the channel number
//(=(1*3)+1) for timer1 channel1
NVIC_EnableIRQ(TC4_IRQn);

//ADC Configuration
ADC->ADC_MR |= 0x80; // DAC in free running mode.
ADC->ADC_CR=2; // Starts ADC conversion.
ADC->ADC_CHER=0x1CC0; // Enable ADC channels 0,1,8,9 and 10

//DAC Configuration
analogWrite(DAC0,0); // Enables DAC0
analogWrite(DAC1,0); // Enables DAC0
}

void loop()
{
//Read the ADCs
while((ADC->ADC_ISR & 0x1CC0)!=0x1CC0);// wait for ADC 0, 1, 8, 9, 10 conversion complete.
in_ADC0=ADC->ADC_CDR[7]; // read data from ADC0
in_ADC1=ADC->ADC_CDR[6]; // read data from ADC1
POT0=ADC->ADC_CDR[10]; // read data from ADC8
POT1=ADC->ADC_CDR[11]; // read data from ADC9
POT2=ADC->ADC_CDR[12]; // read data from ADC10
}

//Interrupt at 44.1KHz rate (every 22.6us)
void TC4_Handler()
{
//Clear status allowing the interrupt to be fired again.
TC_GetStatus(TC1, 1);
{

//definition of maximum data 22050 is 1/2 second

POT0=map(POT0,0,4095,4,22050);

for(p=0;p>=POT0;p++){

//input data
sDelayBuffer0[(2*POT0-p)] = in_ADC0;

//reading data
out_DAC0 = sDelayBuffer0[p];

out_DAC0=map(out_DAC0,0,4095,1,POT2);
dacc_set_channel_selection(DACC_INTERFACE, 0);
dacc_write_conversion_data(DACC_INTERFACE, out_DAC0);
dacc_set_channel_selection(DACC_INTERFACE, 1);
dacc_write_conversion_data(DACC_INTERFACE, 0);
}
//second time

for(p=0;p>=POT0;p++){
//input data
sDelayBuffer0[(POT0-p)] = in_ADC0;

// reading data
out_DAC0 = sDelayBuffer0[(POT0+p)];

out_DAC0=map(out_DAC0,0,4095,1,POT2);
//Write the DACs
dacc_set_channel_selection(DACC_INTERFACE, 0);
dacc_write_conversion_data(DACC_INTERFACE, out_DAC0);
dacc_set_channel_selection(DACC_INTERFACE, 1);
dacc_write_conversion_data(DACC_INTERFACE, 0);
}
}
}
The administrator has disabled public write access.
Time to create page: 0.169 seconds
Powered by Kunena Forum
Joomla SEF URLs by Artio