Следующая версия для Mega328p. Упорядочен обработчик прерывания TWI и коды состояния автомата TWI_BUSY.
Модифицирован следующий кусок кода (обработчик кода статуса A0):
twi_slave_r_A0:
ldi r16, 6
sts TWI_BUSY, r16
ldi r16, 0x85 ;(1<<TWINT)|(0<<TWEA)|(0<<TWEN)|(0<<TWIE) ;stop has been received,
uout TWCR,r16
jmp L_TWSI_END
ранее было:
twi_slave_r_A0:
ldi r16, 6
sts TWI_BUSY, r16
ldi r16, 0xC5 ;(1<<TWINT)|(1<<TWEA)|(0<<TWEN)|(0<<TWIE) ;stop has been received,
uout TWCR,r16
jmp L_TWSI_END
Разница в TWEA, признак говорящий автомату TWI надо ли далее реагировать на собственный SLA+W или нет. Видимо, сразу нельзя. Теперь данное разрешение устанавливается в части кода которая обрабатывает состояние TWI_BUSY = 6.
После модернизации пропали подвисания автомата через 5-6 минут работы. В даташите по этому поводу, как обычно, ровно ничего кроме констатации что можете сделать либо так, либо этак
.
Далее будет производится тестирование имеющегося кода mega328p и будет доработка кода mega8L. Там радо дописать в обработчике мастера работу с кодами арбитража и нот акнолиджами со стороны mega328p.
Добавлено after 10 minutes 20 seconds:У меня для связи между двумя МК (как разных семейств так и разного быстродействия в одном проекте) простой программный обмен с побитовой синхронизацией - ничему не мешает.
Единственно три линии задействованы - но в SPI в принципе столько же.
Не слишком шустро - но допускается хоть полная остановка на неопределенное время.
Отвечу вам следующим из даташита меги:
High Performance, Low Power AVR® 8-Bit Microcontroller Family
Advanced RISC Architecture
̶ 131 Powerful Instructions – Most Single Clock Cycle Execution
̶ 32 x 8 General Purpose Working Registers
̶
Fully Static Operation̶ Up to 20 MIPS Throughput at 20MHz
̶ On-chip 2-cycle Multiplier
High Endurance Non-volatile Memory Segments
Т.Е. мегу можно остановить сняв тактовую частоту, подержать в таком состоянии сколь угодно долго, затем, подать частоту, и она пойдет дальше ровным счётом ничего не заметив. Ну это верно абсолютно, если исключаются всякие внешние временные возмущения вроде прерываний и внешнего тактирования таймеров.
Т.Е. там внутри нет динамических элементов. Всё сделано на статике.
Модераторы - не наказывайте плз. за цитирование, - пока не разобрался как процитировать часть поста.
- Вложения
-
- mega328_v3.zip
- (11.85 KiB) Скачиваний: 120