С этим, разобрался, записывается со всех каналов по порядку, так же сохраняется в буфер.
Не хочется разводить темы с простыми вопросами, спрошу сдесь.
Как запретить все прерывния на время ?
Код
AT91C_BASE_AIC->AIC_IDCR = 0xffffffff //запрещаются полностью все прерывания
AT91C_BASE_AIC->AIC_IECR = (1 <<....) //разрешаем нужные прерывания
этот вариант не очень нравится.
как бы сделать примерно так:
ulong temp;
temp = AT91C_BASE_AIC->AIC_IDCR;
AT91C_BASE_AIC->AIC_IDCR = 0xffffffff
/* off */
AT91C_BASE_AIC->AIC_IECR = temp;
/* on */
Цитата(Сергей Борщ @ Jan 3 2009, 02:40)

Эту ситуацию можно отловить по биту RXBUFF в ADC_SR. Для восстановления синхронизации я не придумал ничего кроме рестарта АЦП.
Код
void Func_Irq_Adc(void) __irq{
unsigned int status;
/* peremennaja statusa preobrazovanija */
status = p_ADC->ADC_SR;
/* zapis v peremennuu statusa */
if(status & AT91C_ADC_ENDRX){
/* proverca zapolnenija bufera */
p_ADC->ADC_RPR = (unsigned long)(ADCBUFER);
p_ADC->ADC_RCR = sizeof(ADCBUFER);
}//end if(status & AT91C_ADC_ENDRX)
if(status & AT91C_ADC_RXBUFF)p_ADC->ADC_CR = AT91C_ADC_SWRST; // ?
p_AIC->AIC_EOICR = status;
}//end void Func_Irq_Adc(void) __irq
Поправьте если что не так.
Сообщение отредактировал sergey sva - Jan 3 2009, 00:30