I am using LPC11C14 board with 12Mhz crystal. Most of ASM instructions are 1 cycle, with entering C function takes 3 cycles and exiting takes 3 cycles.
__asm void test () { //3 cycles MOVS R1, #1 //1 cycle SUBS R1, R1, #1 //1 cycle CMP R1, #0 //1 cycle BEQ endf //3 cycles endf BX lr }
So this function should take exactly 12 cycles which means it should take 1us to execute, but if I use oscilloscope and put gpio turn on-off i get around 3-4uS toggle. Although simulator says that for gpio set/clear it takes 10 cycles, it is still missing some 20 cycles.
LPC_GPIO0->DATA |= (1<<0); test (); LPC_GPIO0->DATA &= ~(1<<0); test (); LPC_GPIO0->DATA |= (1<<0);
I guess issue is somewhere in crystal settings or ? I was looking at settings for main clock, but I couldnt figured out whether it is defaulted to IRC oscillator and how to change it to use external crystal.
As Per mentioned in an earlier post, you should look at the flash timing. The default flash access time is 3 clocks for this device. The default value allows you to run the processor up to 50 Mhz. Since you are only running at 12Mhz, you can set this to 1 clock. Take a look at the Flash Programming chapter in the user manual. Once you set the flash access to 1 clock your timings should be closer to what you are expecting.