Цитата(bullit @ May 19 2009, 19:36)

Вот этот for и вставлен в прерывание (точнее его содержимое), а затем if-ом проверяю счетчик (думается самое слабое место)... остальные переменные объявленны как глобальные....
Как то у вас всё сумбурно получается.
Из первого поста можно понять, что вы каждый опрос ацп пытаетесь запустить от таймера. При этом сам цикл измерения составляет 2 мкс.
В приведенной цитате вы пишите о том, что вы в обработчик запихиваете for с опросом 990 раз. Причём в каждом опросе вы минимум 3 раза читаете порт. Предполагаю, что минимум 2 раза в него пишите чтобы запустить преобразование. (Предполагаю, так как не вижу раскрытых макросов).
То есть само прерывание у вас довольно громоздко.
Тем не менее сам принцип я попробую описать.
У меня это выглядит так.
Инициализация
// Если мастер, то регенерация экрана осуществляется по таймеру
T0IR = (uint32_t)-1; // сбросить флаги прерываний
T0TCR = (1<<1)|(1<<0); // разрешить работу таймера
T0TCR = (1<<0); // разрешить работу таймера
T0PR = 0; // прескалер = 1
T0MR0 = PCLK / (FREGENER*8*7); // Частота прерываний FREGENER герц * 8 строк * 8 градаций яркости (-1)
T0MCR = (1<<1)|(1<<0); // режим перезагрузки и прерывание
вызов прерывания
__fiq __arm void FIQ_Handler() // Отображение картинки Master, Slave
завершение
T0IR = (unsigned)-1; // сбросить флаги прерываний таймера
Да забыл ещё в инициализации это
VICIntSelect = (1<<VIC_TIMER0); // Прерывание от таймера 0 = FIQ
VICIntEnable = (1<<VIC_TIMER0)|(1<<VIC_UART0); // Разрешить прерывание от таймера 0 и от USART0