Цитата(uzig @ Aug 1 2011, 20:39)

Не проходит у меня снятие защиты в CCP:
Код
CCP = 0xD8;
CLK.CTRL = 0x04;
Неужели без ассемблерных вставок код не успевает за 4 цикла прописать CLK.CTRL ?
Компилячу в AVR Studio 5 его gcc.
WinAVR делает так (кажись, 5 тактов) :
Код
CPU_CCP=0xd8; // разрешить (сигнатурой) изменение важного регистра (следущая строка)
2b2: 88 ed ldi r24, 0xD8; 216
2b4: 84 bf out 0x34, r24; 52
CLK.CTRL=0x04; // источник системной синхронизации - синтезатор частоты
2b6: e0 e4 ldi r30, 0x40; 64
2b8: f0 e0 ldi r31, 0x00; 0
2ba: 84 e0 ldi r24, 0x04; 4
2bc: 80 93 40 00 sts 0x0040, r24
Т.е. компилирует очень эффективно, но для данного случая просто нужен другой порядок тех же команд.
Но если немножко схитрить, то получается 2 такта...

)
Код
CLK.CTRL=0x04; // источник системной синхронизации - синтезатор частоты
2b2: e0 e4 ldi r30, 0x40; 64
2b4: f0 e0 ldi r31, 0x00; 0
2b6: 94 e0 ldi r25, 0x04; 4
2b8: 90 93 40 00 sts 0x0040, r25
CPU_CCP=0xd8; // разрешить (сигнатурой) изменение важного регистра (следущая строка)
2bc: 88 ed ldi r24, 0xD8; 216
2be: 84 bf out 0x34, r24; 52
CLK.CTRL=0x04; // источник системной синхронизации - синтезатор частоты
2c0: 90 93 40 00 sts 0x0040, r25
Сообщение отредактировал Юрий_СВ - Aug 1 2011, 18:09