aaarrrКомпилятор IARа с оптимизацией почему-то так и сделал...
более того инструкции
Код
while (dataready!=0) {counter++;}
и
Код
for (dataready=1;dataready!=0;) {counter++;}
впадают в вечный цикл, хотя
Код
do {counter++;} while (dataready!=0)
работает... я видел много всего из области фантастики с циклом for, но с while впервые...
Цитата
Нельзя так ловить оба фронта, таймер работает только по одному. Да и зачем это нужно?
Почему нельзя? вроде в книжке говорится что можно по переднему, заднему и по обоим фронтам...
мне это нужно... смысл такой зачем это нужно:
исходная частота - порядка 1ГГц проходит через микросхему (назовем ее A), в которой есть предварительный 8-битный счетчик, от неё в МК я загоняю только старший бит (как раз порядка 4МГц) и по сигналу строба допустим раз в секунду сбрасываю из счетчика в регистр внутри A, а он вешает это число на ножки МК... далее я читаю состояние входов и одновременно должен убедиться что состояние старшего бита в прочитанном регистре совпадает с состоянием фронта той 4МГц частоты... если совпал - значит МК успел, если не совпал - значит нужно увеличить значение подсчитанной 4МГц частоты... ибо попался такой момент, что пока я читал регистр, там сменился фронт...
в общем путано, но как смог объяснил свою затею
и еще раз для ясности... просто сперва вы мне говорили
Цитата
Используйте аппаратный таймер-счетчик в режиме Capture:
"Capture Mode allows the TC channel to perform measurements such as pulse timing, frequency, period, duty cycle and phase on TIOA and TIOB signals which are considered as inputs" (это из даташита на данный МК).
Capture - это режим захвата насколько я помню английский...
а теперь говорите забудь про захват, используй режим счета...
хотя в книжке говорят о двух режимах: захвата и формирования....
Заранее благодарю за ответы!
Вы мне уже очень помогли.
Сообщение отредактировал abit - Jul 27 2011, 07:52