Цитата(aaarrr @ Jul 27 2011, 13:21)

Не бывает чудес ни с for'ом, ни с while. Как объявлены counter и dataready?
Я подобные "чудеса" много где встречал, каждый раз разные источники беды... я конечно МК не программировал, но программировал много чего другого...
ну если брать этот пример :
counter объявлен локально в main() во первых строках... как unsigned int counter;
dataready сразу после инклудов, глобально как unsigned char dataready;
чуть ниже этого объявления сразу идет функция обработчика прерывания, где код dataready=0; непосредственно перед выходом из прерывания...
почему while и for впадают в вечный цикл - ума не приложу... более того я внутрь этого цикла засунул выдачу содержимого dataready в usb - оно сперва вываливало 1, потом спутя секунду вываливает 0, т.е. значение явно сменилось... а цикл не завершался... в то время как do...while работает чудесно...
Цитата(aaarrr @ Jul 27 2011, 13:21)

Захват можно сделать по любому фронту, считать таймер умеет только по одному.
Спасибо, я разобрался... там в книжке речь шла о синхронизации по обоим фронтам на триггере...
Цитата(aaarrr @ Jul 27 2011, 13:21)

Казалось бы, на одну четырехмиллионную можно смело плюнуть, нет?
К сожалению это четырехмиллионная на самом деле в гигагерце превращается в 256Гц... что портит всю разрешающую способность и делает бессмысленным вообще тот регистр, которым я синхронизирую счетчик по стробам и читаю единицы герца.... так что фронт в момент строба иметь очень хотелось бы, чтобы мерить гигагерц до герца...
Цитата(aaarrr @ Jul 27 2011, 13:21)

ОК, еще раз: таймер может работать в режимах capture и waveform. Первый предназначен для измерения параметров сигнала, поданного на TIOA (частота, длительность и т.п.), второй - для формирования выходных сигналов на TIOA/B.
Сигнал у вас высокочастотный, поэтому измерять длительность его периода средствами capture бесполезно, т.к. получается слишком низкая разрешающая способность. Поэтому и нужно подать сигнал на TCLK, чтобы тактировать таймер непосредственно от измеряемого сигнала.
Такое подключение допускают оба режима - и capture, и waveform. Затем можно или каскадировать таймеры (тогда первый должен быть в режиме waveform, чтобы можно было сформировать перенос следующему), или сделать инкремент старшей половины счетчика программно, по прерыванию переполнения.
Спасибо, сейчас буду пробывать по вашему рецепту...
не ясно только с тем загадочным триггером... вот внтуренний программный триггер можно использовать чтобы таймер времени и таймер счета T1связанный с T2 пустить одновременно / остановить одновременно по прерыванию от T0?