I bought LPCXpresso11U68. I cant' write a running program without LPCOpen.
When I write a program that uses CMSIS Core and registers, the program stops in function SystemInit:
void SystemInit (void) {
volatile uint32_t i;
#if (CLOCK_SETUP)
#if ((SYSPLLCLKSEL_Val & 0x03) == 1)
LPC_SYSCON->PDRUNCFG &= ~(1 << 5);
LPC_SYSCON->SYSOSCCTRL = SYSOSCCTRL_Val;
for (i = 0; i < 200; i++) __NOP();
#endif
LPC_SYSCON->SYSPLLCLKSEL = SYSPLLCLKSEL_Val;
LPC_SYSCON->SYSPLLCLKUEN = 0x01;
LPC_SYSCON->SYSPLLCLKUEN = 0x00;
LPC_SYSCON->SYSPLLCLKUEN = 0x01;
while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01));
#if ((MAINCLKSEL_Val & 0x03) == 3)
LPC_SYSCON->SYSPLLCTRL = SYSPLLCTRL_Val;
LPC_SYSCON->PDRUNCFG &= ~(1 << 7);
while (!(LPC_SYSCON->SYSPLLSTAT & 0x01));
#endif
#if (((MAINCLKSEL_Val & 0x03) == 2) )
LPC_SYSCON->WDTOSCCTRL = WDTOSCCTRL_Val;
LPC_SYSCON->PDRUNCFG &= ~(1 << 6);
for (i = 0; i < 200; i++) __NOP();
#endif
LPC_SYSCON->MAINCLKSEL = MAINCLKSEL_Val;
LPC_SYSCON->MAINCLKUEN = 0x01;
LPC_SYSCON->MAINCLKUEN = 0x00;
LPC_SYSCON->MAINCLKUEN = 0x01;
while (!(LPC_SYSCON->MAINCLKUEN & 0x01));
LPC_SYSCON->SYSAHBCLKDIV = SYSAHBCLKDIV_Val;
#if ((USBCLKDIV_Val & 0x1FF) != 0)
LPC_SYSCON->PDRUNCFG &= ~(1 << 10);
#if ((USBCLKSEL_Val & 0x003) == 0)
LPC_SYSCON->PDRUNCFG &= ~(1 << 8);
LPC_SYSCON->USBPLLCLKSEL = USBPLLCLKSEL_Val;
LPC_SYSCON->USBPLLCLKUEN = 0x01;
LPC_SYSCON->USBPLLCLKUEN = 0x00;
LPC_SYSCON->USBPLLCLKUEN = 0x01;
while (!(LPC_SYSCON->USBPLLCLKUEN & 0x01));
LPC_SYSCON->USBPLLCTRL = USBPLLCTRL_Val;
while (!(LPC_SYSCON->USBPLLSTAT & 0x01));
LPC_SYSCON->USBCLKSEL = 0x00;
#endif
LPC_SYSCON->USBCLKSEL = USBCLKSEL_Val;
LPC_SYSCON->USBCLKDIV = USBCLKDIV_Val;
#else
LPC_SYSCON->PDRUNCFG |= (1 << 10);
LPC_SYSCON->PDRUNCFG |= (1 << 8);
#endif
#endif
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16);
}
Program stops here:
#if ((MAINCLKSEL_Val & 0x03) == 3)
LPC_SYSCON->SYSPLLCTRL = SYSPLLCTRL_Val;
LPC_SYSCON->PDRUNCFG &= ~(1 << 7);
while (!(LPC_SYSCON->SYSPLLSTAT & 0x01));
#endif
Why never PLL loked ???
My program only:
#include "LPC11Uxx.h"
void delay(uint32_t delay_ticks)
{
for(; delay_ticks != 0; delay_ticks--)
__NOP;
}
int main(void) {
volatile static int i = 0 ;
LPC_GPIO->DIR[2] |= 1<<18;
while(1) {
LPC_GPIO->CLR[2] = 1<<18;
delay(2000000);
LPC_GPIO->SET[2] = 1<<18;
delay(2000000);
i++''
}
return 0 ;
}