Ви не увійшли.
В проекта закончились пины:-( Плата уже готова, но нужно добавить пульт ДУ, который должен к тому же будить МК из deepsleep. На плате остался разьем для перепрошивки (RX/TX на PD0,1) через который и хочу подключить аккуратно приемник ПДУ. Serial будет использоваться ТОЛЬКО для обновления прошивки, режим работы пинов переключу когда нужно в скетче.
Итак - не работает! После разрешения PCInt при любом изменении их состояния происходит REBOOT.
volatile uint8_t oldPIND = 0x00;
void pciSetup(byte pin)
{
*digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin)); // Разрешаем PCINT для указанного пина
PCIFR |= bit (digitalPinToPCICRbit(pin)); // Очищаем признак запроса прерывания для соответствующей группы пинов
PCICR |= bit (digitalPinToPCICRbit(pin)); // Разрешаем PCINT для соответствующей группы пинов
}
void Setup ()
{
DDRD = DDRD & B11111100; // bit0,1 - входы пульта
pciSetup (RemoteInPin0); //прерывание пульта на RX (PD0)
}
ISR (PCINT0_vect)
{ // Обработчик запросов прерывания от пинов PD0,PD1
uint8_t changedbits = PIND ^ oldPIND;
oldPIND = PIND;
if (changedbits & (1 << PD0))
{ // Изменился RX(PD0)
interruptRemote0 = true;
}
if (changedbits & (1 << PD1))
{ // Изменился TX(PD1)
interruptRemote1 = true;
}
после этого изменение состоянии PD0 приводит в жесткому ребуту. Если не делать pciSetup - ребут не происходит. Если ISR (PCINT0_vect) пустой или там пишу не значущую команду - все равно ребут...
Неактивний