Если делать PLL0CFG = 0x0; то несколько раз (2-3, иногда раз 10) проходит, а потом - такое впечатление что FIO0PIN не реагирует на внешний сигнал...
Код
if(FIO0PIN & 0x0400)
LPC_Sleep(1);
else
LPC_Sleep(0);
/*...........*/
void LPC_Sleep(int OnOff)
{ if(OnOff)
{ VPBDIV=0x00; // PCLK = CCLK/4
PLL0CFG = 0x0; // M = 0, P = 0 12MHz
/* ^^^^^^^ вот если не ноль ставить, то всё работает */
/************************************************************/
PLL0CON = 1; //PLL eable
PLL0FEED = 0xAA; // Feed Sequence 1
PLL0FEED = 0x55; // Feed Sequence 2
while (!(PLL0STAT & 0x400)); // Wait for PLL Lock
PLL0CON = 3; // PLL Enable & Connect
PLL0FEED = 0xAA; // Feed Sequence 1
PLL0FEED = 0x55; // Feed Sequence 2
} else {
VPBDIV=0x01; // PCLK = CCLK
PLL0CFG = 0x25; // M = 6, P = 2
PLL0CON = 1; //PLL eable
PLL0FEED = 0xAA; // Feed Sequence 1
PLL0FEED = 0x55; // Feed Sequence 2
while (!(PLL0STAT & 0x400)); // Wait for PLL Lock
PLL0CON = 3; // PLL Enable & Connect
PLL0FEED = 0xAA; // Feed Sequence 1
PLL0FEED = 0x55; // Feed Sequence 2
}
}
LPC_Sleep(1);
else
LPC_Sleep(0);
/*...........*/
void LPC_Sleep(int OnOff)
{ if(OnOff)
{ VPBDIV=0x00; // PCLK = CCLK/4
PLL0CFG = 0x0; // M = 0, P = 0 12MHz
/* ^^^^^^^ вот если не ноль ставить, то всё работает */
/************************************************************/
PLL0CON = 1; //PLL eable
PLL0FEED = 0xAA; // Feed Sequence 1
PLL0FEED = 0x55; // Feed Sequence 2
while (!(PLL0STAT & 0x400)); // Wait for PLL Lock
PLL0CON = 3; // PLL Enable & Connect
PLL0FEED = 0xAA; // Feed Sequence 1
PLL0FEED = 0x55; // Feed Sequence 2
} else {
VPBDIV=0x01; // PCLK = CCLK
PLL0CFG = 0x25; // M = 6, P = 2
PLL0CON = 1; //PLL eable
PLL0FEED = 0xAA; // Feed Sequence 1
PLL0FEED = 0x55; // Feed Sequence 2
while (!(PLL0STAT & 0x400)); // Wait for PLL Lock
PLL0CON = 3; // PLL Enable & Connect
PLL0FEED = 0xAA; // Feed Sequence 1
PLL0FEED = 0x55; // Feed Sequence 2
}
}
В тупом цикле всё работает
Код
for(;;)
{ t0 = T1TC; while(T1TC-t0<12000);
LPC_Sleep(1);
t0 = T1TC; while(T1TC-t0<12000);
LPC_Sleep(0);
}
{ t0 = T1TC; while(T1TC-t0<12000);
LPC_Sleep(1);
t0 = T1TC; while(T1TC-t0<12000);
LPC_Sleep(0);
}
ЗЫ: кажется - догадался... - слишком быстро дрыгал снаружи ногами