VREF - половина питания.
Входы ADC подтянуты к питанию через 51к.
Меряю статический сигнал (опрос кнопок подлюченных по принципу R2R) на 4 канале.
5 канал - только подтяжка, сигнал не подается.
#define TRGEN (0x0)
#define TRGSEL (0x0)
#define LOWRES (0x0)
#define SLEEP (0x0)
#define PRESCAL (0x0)
#define STARTUP (0x11)
#define SHTIM (0x3)
Инициализация:
AT91C_BASE_ADC->ADC_CR = AT91C_ADC_SWRST;
AT91C_BASE_ADC->ADC_MR = (SHTIM << 24) | (STARTUP << 16) | (PRESCAL << 8) | (SLEEP << 5) | (LOWRES <<4) | (TRGSEL << 1) | (TRGEN );
AT91C_BASE_ADC->ADC_CHER = (1<<CHANNEL4)|(1<<CHANNEL5);
AT91C_BASE_ADC->ADC_CR = AT91C_ADC_START;
Считывание в цикле:
while (!( (AT91C_BASE_ADC->ADC_SR & (1<<CHANNEL4)|(1<<CHANNEL5)) == (1<<CHANNEL4)|(1<<CHANNEL5)) );
scan_data4 = AT91C_BASE_ADC->ADC_CDR4;
scan_data5 = AT91C_BASE_ADC->ADC_CDR5;
AT91C_BASE_ADC->ADC_CR = AT91C_ADC_START;
При подаче какого либо уровня на 4 канал изменяется не только scan_data4, но и scan_data5.
т.е. если было 3FF то становится 3FE, 3F0 - младшие глючат.
В чем причина? Еррату смотрел, вроде ничего нет такого.