Доброго времени!
Наблюдаю странный глюк в купленных недавно мегах 8. Старых камней нету - все горелые. Пожалуйста, если кому интересно, проверьте, не боян ли.
Исходные: глючит программа при read-modify-write к регистру компаратора. прерывания компаратора запрещены. Общие разрешены.
Код
void do_ACMP(void)
{
if(ACSR &(1<<ACI))
{
// ACSR |= (1<<ACI); // так не работает
ACSR = (1<<ACI); // пришлось объяснить по-русски, куда ему пойти
// далее по тексту - к делу не относится.
}
}
WinAVR, конечно же ACSR |= (1<<ACI) оптимизирует до sbi ACSR,ACI - и начались пляски. Предположительно, уходит в отсутствующий вектор прерывания, видать какие-то иголки на вход ACIE наводятся. Раньше, когда писАл на асме, никогда не пользовался битовыми инструкциями применительно к ACSR, поэтому не могу знать, как давно такое безобразие имеет место быть.