noatime писал(а):С capcom 1, 2 работать еще не приходилось, но для описываемой задачи могу порекомендовать быстрые внешние прерывания (регистр EXICON, про настройку есть информация в документации на ВЕ6Т).
Хочу CAPCOM - надо измерять частоту. Работал 1000 раз на других процах архитектуры 16x - проблем не было. Разработчики, откликнитесь пожалуйста.
noatime писал(а):А можно поподробнее, при какой конфигурации АЦП такое возникает? Я хочу проверить это на МОП, а то с АЦП проблем пока не замечал, в режиме неоднократного преобразования фиксированного канала без проблем считываются значения, как при использовании прерываний, так и PEC'a.
В регистре ADC_CON есть 9-й бит, который включает режим ожидания считывания. Этот режим означает, что АЦП будет ждать пока считают результат преобразования (не будет запускать следующее преобразование если результат не считан, точнее сделает максимум два преобразования, поскольку там есть буфер на один результат преобразования). Ну так вот, если в самом начале обработчика готовности АЦП прочитать ADC_DAT, то АЦП останавливается (никаких преобразований более не делается). Сначала я добавил нопов перед считыванием ADC_DAT - вроде заработало, но потом опять вылез косяк (подробностей не помню). В общем от греха подальше я отказался от режима ожидания считывания и режима "сканирование группы" и перебираю каналы вручную путем запуска преобразования в обработчике готовности АЦП. К слову сказать, в ST-шных и Infineon-овских процессорах таких проблем нет.
И учтите такой момент - если обработчик "нехилый" и/или в нем вызываются функции, то вполне может быть, что в начале обработчика KEIL наставит команд "push" для сохранения регистров в стек и вы ничего не заметите. Что нопы, что пуши оттягивают момент считывания преобразования относительно возникновения прерывания. Тем не менее, как я говорил, косяк все равно проявился, но я не помню подробностей.