Здравствуйте, у меня проблема с АЦП MAX1229 фирмы MAXIM.
АЦП MAX1229 подключено к МК LPC2134 по SPI. Для начала работы с АЦП настраиваю его внутренние регистры:

// конфигурирование АЦП, с помощью инициализации его управляющих регистров
CS_ADC_S (0); // выставить сигнал выбора микросхемы АЦП в CS=0
S0SPDR_bit.DATA = 0x10; // записать байт в регистр АЦП RESET для сброса всех остальных регистров
while (S0SPSR_bit.SPIF == 0){} // ожидание окончания записи по SPI
CS_ADC_S (1); // убрать сигнал выбора микросхемы АЦП CS=1
CS_ADC_S (0); // выставить сигнал выбора микросхемы АЦП в CS=0
S0SPDR_bit.DATA = 0x66; // записать байт в регистр АЦП SETUP (код выбора регистра,режим внутреннего тактирования 10, внешний ИОН 01,разрешить запись в регистр UNIPOLAR)
while (S0SPSR_bit.SPIF == 0){} // ожидание окончания записи по SPI
CS_ADC_S (1); // убрать сигнал выбора микросхемы АЦП CS=1
CS_ADC_S (0); // выставить сигнал выбора микросхемы АЦП в CS=0
S0SPDR_bit.DATA = 0xFC; // write UNIPOLAR- настроить все входы АЦП в режим измерения синфазного напряжения
while (S0SPSR_bit.SPIF == 0){} // ожидание окончания записи по SPI
CS_ADC_S (1); // убрать сигнал выбора микросхемы АЦП CS=1

После чего произвожу запись управляющего слова в регистр CONVECTION АЦП, отвечающий за выбор канала АЦП(биты 3-6), режима преобразования(биты 1-2).

CS_ADC_S (0);
S0SPDR_bit.DATA = 0x86; // запись упрвляющего регистра CONVECTION(выбор регистра,номер преобразуемого канала 0000 (можно от 0 до 12), режим сканирования-11 как одиночное преобразование,не мерить температу 0)
while (S0SPSR_bit.SPIF == 0){}
CS_ADC_S (1);
__delay_cycles(500*ADC_SPEED); // задержка как в datasheet

Далее типа должны следовать результаты преобразования, считывать которые можно по 0 значению сигнала EOC( end of convection) на АЦП , следовательно делаю циклический опрос данной линии нанеравенство 0:
while ((IO0PIN&adc_eoc) != 0) { } // пока EOC не равно 0 , то находиться в теле цикла
Следовательно по окончанию цикла можно считывать данные , но проблема в том , что цикл не заканчивается!!!!!!!!!!!!! Следовательно сигнал окончания преобразования не приходит!!! А ПОЧЕМУ???

Пытаюсь считывать данные, не дожидаясь сигнала окончания преобразования EOC(для этого просто комментирую предыдущий цикл) и выполняю следующие строки:
CS_ADC_S (0);
S0SPDR_bit.DATA = 0x00; //записываем левый байт, для того , чтобы считать данные с ацп по спадающему фронту тактового сигнала SPI
while (S0SPSR_bit.SPIF == 0){}
adc_data_low=S0SPDR_bit.DATA; // сохраняем первый считанный с АЦП байт, являющийся младшей частью значения преобразования.
CS_ADC_S (1);
__delay_cycles(5*ADC_SPEED);
CS_ADC_S (0);
S0SPDR_bit.DATA = 0x00; //write
while (S0SPSR_bit.SPIF == 0){}
adc_data_hing=S0SPDR_bit.DATA; // сохраняем второй считанный с АЦП байт, являющийся старшей частью значения преобразования.
CS_ADC_S (1);
Данные приходят, порой даже правильные, но вот есть проблема с непонятными выбросами непредсказуемых и неправдоподоподобных значений(с питанием всё впорядке). Я считаю , что проблема заключается в отсутствии сигнала окончания преобразования EOC от АЦП.
Если кто сталкивался с данной проблемой или хочет высказать свои идеи по данному поводу, то пожалуйста напишите , а то у меня уже мозги кипят.