Цитата(aaarrr @ Aug 30 2009, 20:21)

И зачем таким способом переключать каналы, когда можно сразу разрешить оба?
для увеличения частоты выборки
код которого нехватает:
Код
#define ADC_FREQ 5000000
#define ADC_SIZE_BUF 6000
unsigned short ADCbuf[ADC_SIZE_BUF];
bool TakesADC;
void ISR_Tc0()
{
unsigned int status;
// Read TC0 status
status = AT91C_BASE_TC0->TC_SR;
// RC compare
if ((status & AT91C_TC_CPCS) == AT91C_TC_CPCS)
{
//Diseble TC0
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;
//RESET ADC
AT91C_BASE_ADC->ADC_CR=AT91C_ADC_SWRST;
//flag end adc
TakesADC=false;
}
}
void TC_Start(AT91S_TC *pTc)
{
pTc->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;
}
void InitTC0()
{
/// Configure TC for a 10ms over TC0 4Ãö ç 400ÃÖ
// Enable TC0 peripheral clock
AT91C_BASE_PMC->PMC_PCER =(1 << AT91C_ID_TC0);
// Disable TC clock
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;
// Disable interrupts
AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF;
// Clear status register
AT91C_BASE_TC0->TC_SR;
// Set mode
AT91C_BASE_TC0->TC_CMR = AT91C_TC_CLKS_TIMER_DIV3_CLOCK;//div MCK 32
AT91C_BASE_TC0->TC_RC = 15017; // 10ms
//Conf AICIntr
AT91C_BASE_AIC->AIC_IDCR = (1 << AT91C_ID_TC0);// Disable the interrupt first
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0; // Configure mode and handler
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (unsigned int)ISR_Tc0;
AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_TC0);// Clear interrupt
//Eneble interupt for compare RC
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; //interopt on of compare rc 10ìñ
//Enebl AICIntr
AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_TC0);
}
и главная гдето так
Код
int main()
{
LCD.SetLogo();
InitModBus();
InitADC();
delay(1000*MS);
AT91C_BASE_PIOA->PIO_PER=3;
AT91C_BASE_PIOA->PIO_OER=3;
AT91C_BASE_ADC->ADC_CHER =AT91C_ADC_CH5;
while(1)
{
StartADCSigna2();
WBufADC(1);
//ModbusEIntr();
// ModbusDIntr();
AT91C_BASE_PIOA->PIO_CODR=1;
AT91C_BASE_PIOA->PIO_SODR=2;
StartADCSigna2();
WBufADC(2);
//delay(1000*MS);
AT91C_BASE_PIOA->PIO_CODR=2;
AT91C_BASE_PIOA->PIO_SODR=1;
// delay(1000*MS);
}
}
я так понял посли
Код
//RESET ADC
AT91C_BASE_ADC->ADC_CR=AT91C_ADC_SWRST;
сбиваются его настройки ?
непонравился мне тут АЦП