не могу понять, но,
если в pwd перейти записью PCON = 7, то есть согласно документации с выключением работы BOD в PWD режиме, то при выходе из PWD происходит рестарт контроллера.
Если в PWD перейти PCON = 3 (оставив BOD работающим), то выход из pwd происходит нормально.
На reset все нормально, никаких провалов. Vcc = 3.3, то есть под ситуацию из errata не попадает.
В pwd захожу по уровневому прерыванию на EINT2, в прерывании же меняю полярность, сбрасываю флаг и включаю пробуждение по EINT2, засыпаю, просыпаясь все восстанавливаю и выхожу.
Код
void Eint_isr(void)
{
// switch to power down
EXTPOLAR_bit.EXTPOLAR2 = 0; //0 - low level aclive
EXTINT_bit.EINT2 = 1; //clear INT FLAG
EXTWAKE_bit.EXTWAKE2 = 1; //wake by INT2
PIN_OFF(GREEN_LED);
PCON = 7; // power down
//exit from pwd
PIN_ON(GREEN_LED);
EXTWAKE_bit.EXTWAKE2 = 0; //disable wake by INT2
EXTPOLAR_bit.EXTPOLAR2 = 1; //1 - high level aclive
EXTINT_bit.EINT2 = 1; //clear INT FLAG
}
int main (void)
{
PIN_FUNC(EINT_PIN, 3); //EINT2 mode
EXTMODE_bit.EXTMODE2 = 0; //0 - level sens
EXTPOLAR_bit.EXTPOLAR2 = 1; //1 - high level aclive
EXTINT_bit.EINT2 = 1; //clear INT FLAG
...
Пасу котов...