среда, 17 июня 2009 г.

Особенность программирования под МК семейства AVR Tiny

С МК AVR работаю я уже достаточно давно и казалось бы все уже понятно и возможные ошибки могут появится только по собственной вине. Но в течение полугода пришлось дважды столкнуться с одной интересной особенностью, объяснения которой я так и не нашел. Речь идет о командах условных переходов, точнее о команде перехода по метке после выполнения операции сравнения - BRGE. Команда игнорируется АЛУ процессора и переход не осуществляется при любых условиях. Симулятор AVR Studio при этом отрабатывает нормально.
Например:
m2:
rcall ADCHN
cpi tmp1,20
brge m2
m1:
nop

Данная конструкция не работает. А вот перестроив программу так, получаем работоспособный код:

m2:
rcall ADCHN
cpi tmp1,20
brlo m1
rjmp m2
m1:
nop

Ошибка была выявлена на кристаллах Tiny2313 и Tiny26. В списке поддерживаемых инструкций этих МК команда BRGE присутствует, компилятор ошибок не выдает, и в Errata обоих кристаллов я не нашел упоминаний об этой проблеме. Использовался компилятор Assembler2 из AVR Studio 4.12 Service Pack 1 Build 462.
Непонятно, неужели никто еще не сталкивался с подобной проблемой?

1 комментарий:

Анонимный комментирует...

Да, столкнулся с подобным но только еще на стадии симуляции программы для attiny5, вручную в программу вношу свои данные для проверки переходов, при каких то определенных значениях команда отрабатывает нормально, при других тупо шагает дальше без ветвления