Похоже, косяк в BOD (кстати, а кто при каких фьюзах проверял?)
ATTINY2313-20PU 0623
6F7011
35570C
1-P0623 e3
.nolist
#define __SFR_OFFSET 0
#include <avr/io.h>
.list
#define NOPS 1
#define OUTS 2
.text
.global main
main:
ldi r16, 0xFF
out DDRD, r16
out DDRB, r16
out DDRA, r16
1: ldi r16, 0xFF
out PORTA, r16
out PORTB, r16
out PORTD, r16
.rept OUTS
out PORTD, r16
.endr
.rept NOPS
nop
.endr
ldi r16, 0
out PORTA, r16
out PORTB, r16
out PORTD, r16
.rept OUTS
out PORTD, r16
.endr
.rept NOPS
nop
.endr
rjmp 1b
FUSES = wdton=1,bodlevel=4,sut=1,cksel=4,ckdiv=1
Питание 5В
При ckdiv=0 либо при cksel=2 (т.е. на более низкой частоте) - тоже всё нормально.
Если стоит вывод только в PORTA - тоже всё нормально.
Если только в PORTD - достаточно двух NOP
Если только в PORTB - достаточно трёх NOP
Если во все три порта - тоже достаточно трёх NOP
NOPS можно разменивать на OUTS - т.е. проблема в выводе противоположного значения в порты. Зависимость количества NOP от количества изменяемых битов в порту не исследовал, моя страсть к неразменным пятакам так далеко не распространяется.
Как это выглядит:
Пачка импульсов в несколько микросекунд (5-15 периодов меандра), если пачка закочилась на "1"-ке, то плавный спад напряжения, разряд на входном сопротивлении осциллографа.
Длина пачки зависит от количества портов, задействованных в тестировании и от количества тактов между выводами противоположного значения.
Расстояние между пачками несколько микросекунд при SUT=0, около 4мс при SUT=1, около 65мс при SUT=2, т.е. определённо кристалл просто сбрасывается.
Но!
При bodlevel=7 (т.е. BOD выключен) никаких проблем вообще без прмежуточных NOP.
При 6,5,4 - одинаковое поведение с точностью до количества нужных для нормальной работы NOP-ов.
Т.е. косяк в (трассировке) BOD на кристалле.
Дело было на макетке, на которой конденсатор по питанию в паре см от панельки (так сложилось, что на несколько панелек "проверялки avreal" только один керам. конденсатор на штырях байт-бластера, до сих пор не глючило и я не стал паять конденсаторы на все панельки, чтобы не улучшать лишний раз условия работы программатора).
Включать паяльник влом.
p.s. Я протестую! Это антиспамщик попросил меня набрать число "123", меня заставили набирать забаненное число!