Цитата(sergeeff @ Nov 21 2007, 23:30)

Думается:
1. Задержки в 40 ns программно не удастся получить никогда.
2. А что АЦП не сидит на нормальной шине с RD, WR и CS?
Посчитал...запустил вот такой код. (по прерыванию Таймера в 100 микросек инкриментирую
counter +=100)
//*******************************************************************
counter = 0;
Wait(200000000);
sprintf (msg,"\n\r200000000 tacts per %d microseconds\n\r",counter);
Print.PrintString(msg);
while(1) {}
//*******************************************************************
inline void
Wait(unsigned int mcs)
{
int cycles = mcs; // 200 MIPS - 200 операций в микросекунду
for(int l=0; l<cycles;l++);
};
получил след результаты:
около 7 секунд - без оптимизации
5,5 секунд с оптимизацией Low
А вот максимальная оптимизация вообще 0 дает...!!
почему интересно?Получается могу задать интервал в 30ns при вызове Wait(1);
Хотя не уверен в верности данного подсчета. Так как таймер влияет на измерения. причем в зависимости от времени срабатывания получаются разные результаты ...
АЦП как раз сидит на шине , а для того чтобы управлять RD, CONVST, A0 сигналами необходимы небольшие задерки...
например держать 125ns A0 для выбора АЦП0 или АЦП1 на микрухе,
30ns для того чтобы держать RD для выбора ChA0 ChB0 .. и т.п.
или 15ns держать CONVST (старт преобразования)
p.s проект IAR4.41a
Сообщение отредактировал Daermon - Nov 22 2007, 06:43