This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

LPC11C14 clock frequency problem

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.

Parents
  • If you want to verify crystal frequency, you shouldn't go for this tiny function.

    Either configure a timer and set it to 1Hz and let it drive a LED. Then you know if the timer gets the correct input frequency or not.

    If you really want to count processor cycles, then you could have a function contain a huge number of nop intrinsics after each other to minimize the relative time spent by the actual loop construct.

    Another thing to consider - what speed is the flash running at? The LPC chips have settings to control the MAM feature, i.e. controlling acceleration of flash accesses. You only get one clock cycle per instruction if the memory supplies the machine code data at the full speed the core consumes it.

Reply
  • If you want to verify crystal frequency, you shouldn't go for this tiny function.

    Either configure a timer and set it to 1Hz and let it drive a LED. Then you know if the timer gets the correct input frequency or not.

    If you really want to count processor cycles, then you could have a function contain a huge number of nop intrinsics after each other to minimize the relative time spent by the actual loop construct.

    Another thing to consider - what speed is the flash running at? The LPC chips have settings to control the MAM feature, i.e. controlling acceleration of flash accesses. You only get one clock cycle per instruction if the memory supplies the machine code data at the full speed the core consumes it.

Children