В power-down ухожу по таймеру таким образом(пробовал разные комбинации):
Код
if(CAN_WAKEUP)
{
CAN1IER/* = CAN2IER*/ = 0x10; // Wake-Up Interrupt Enable
PCONP_SAVE = PCONP;
PCONP = (1 << 13); //Enable only CAN1
CAN1MOD |= (1 << 4); //CAN1 Sleep mode
//CAN2MOD |= (1 << 4); //CAN2 Sleep mode
}
PCON = 2;
if(CAN_WAKEUP)
PCONP = PCONP_SAVE;
ConfigurePLL();
//CAN1MOD = CAN2MOD = 1; //CAN1-2 Reset
//CAN1MOD = CAN2MOD = 0; //CAN1-2 Normal mode
if(CAN_WAKEUP)
CAN1IER/* = CAN2IER*/ = 0x01; // Enable receive interrupts
{
CAN1IER/* = CAN2IER*/ = 0x10; // Wake-Up Interrupt Enable
PCONP_SAVE = PCONP;
PCONP = (1 << 13); //Enable only CAN1
CAN1MOD |= (1 << 4); //CAN1 Sleep mode
//CAN2MOD |= (1 << 4); //CAN2 Sleep mode
}
PCON = 2;
if(CAN_WAKEUP)
PCONP = PCONP_SAVE;
ConfigurePLL();
//CAN1MOD = CAN2MOD = 1; //CAN1-2 Reset
//CAN1MOD = CAN2MOD = 0; //CAN1-2 Normal mode
if(CAN_WAKEUP)
CAN1IER/* = CAN2IER*/ = 0x01; // Enable receive interrupts