본문 바로가기

[NXP]/LPC1k

LPC1313 성능 테스트

LPC1313 성능 테스트



LPC1313은 Cortex-M3코어에 72Mhz로 동작한다. 가격은 1$ 정도로 저렴해서 가격이 민감한 어플리케이션에 좋을것 같다.


LPC1114 의 GPIO 제어 속도와  비교해교 해면 좋을것 같다.

결론적으로는 3Mhz -> 4.5Mhz 로 좋아진것 같다. GPIO On/Off만 했을때 16Mhz로 측정된다.






디폴트로 외부 12Mhz 클럭으로 설정되어 있기 때문에 PLL을 이용하여 72Mhz로 설정해 주었다.

#define CLOCK_SETUP           1

#define SYSCLK_SETUP          1

#define SYSOSC_SETUP          1

#define SYSOSCCTRL_Val        0x00000000

#define WDTOSC_SETUP          0

#define WDTOSCCTRL_Val        0x000000A0


//내부 OSC 사용

#define SYSPLLCLKSEL_Val      0x00000000

#define SYSPLL_SETUP          1

#define SYSPLLCTRL_Val        0x00000025


//메인 클럭으로 PLL 사용

#define MAINCLKSEL_Val        0x00000003


#define USBCLK_SETUP          0

#define USBPLL_SETUP          0

#define USBPLLCLKSEL_Val      0x00000001

#define USBPLLCTRL_Val        0x00000003

#define SYSAHBCLKDIV_Val      0x00000001

#define AHBCLKCTRL_Val        0x0001005F



LPC1313 의 시스템 클럭 블록도






단순 토글 만 했을 경우 4.5Mhz 로 측정된다.

     26              while(1)

     27              {

     28                  LPC_GPIO3->DATA ^= LED1_BIT;

   \   00000024   0x6801             LDR      R1,[R0, #+0]

   \   00000026   0xF081 0x0110      EOR      R1,R1,#0x10

   \   0000002A   0xE7FA             B.N      ??main_1

   \                     ??main_0:

   \   0000002C   0x40048080         DC32     0x40048080

   \   00000030   0x50038000         DC32     0x50038000

   \   00000034   0x50033FFC         DC32     0x50033ffc




아쉬운점은 LPC 1xxxx 시리즈는 Set, Clear, Toggle 레지스터가 없다. 그래서 위애서 처럼 비트 제어하게 되면 두번의 명령어로 처리된다.

대신 MASKED_ACCESS 레지스터를 이용하여 비트제어를 한 명령어에 실행 되도록 할 수 있다.

이렇게 하면 7.2Mhz 정도로 출력된다.



MASKED_ACCESS 레지스터를 이용해 한명령어로 비트 제어 가능하다.

       24              while(1)

     25              {

     26                  LPC_GPIO3->MASKED_ACCESS[BIT4] = BIT4;     

   \                     ??main_0: (+1)

   \   0000003E   0x2110             MOVS     R1,#+16

   \   00000040   0x6001             STR      R1,[R0, #+0]

     27                  LPC_GPIO3->MASKED_ACCESS[BIT4] = 0;

   \   00000042   0x2100             MOVS     R1,#+0

   \   00000044   0x6001             STR      R1,[R0, #+0]

   \   00000046   0xE7FA             B.N      ??main_0




GPIO On/Off 를 했을경우 8Mhz 로 측정된다. 경쟁사 Cortex-M3 코어의 STM32F103 과 속도 비교해 보면 별차이가 없는것 같다. 그리고 가격적으로는 상당히 저렴하다는 장점이 있다.

     24              while(1)

     25              {

     26                  LPC_GPIO3->DATA = BIT4;

   \                     ??main_0: (+1)

   \   0000003C   0x2010             MOVS     R0,#+16

   \   0000003E   0x6020             STR      R0,[R4, #+0]

     27                  LPC_GPIO3->DATA = 0;

   \   00000040   0x2000             MOVS     R0,#+0

   \   00000042   0x6020             STR      R0,[R4, #+0]

   \   00000044   0xE7FA             B.N      ??main_0




GPIO On/Off 후 Main으로 복귀하는 명령어 때문에 실제 속도와는 차이가 있는데 On/Off 를 많이 반복해 보면 평균 속도가 나오는데...

이때 17.8Mhz 로 측정된다. 경쟁사 Cortex-M3 코어의 STM32F103 과 속도 비교해 보면 별차이가 없는것 같다. 그리고 가격적으로는 상당히 저렴하다는 장점이 있다.


     26              while(1)

     27              {

     29                  

     30                  LPC_GPIO3->DATA = 0;

   \   00000024   0x2100             MOVS     R1,#+0

   \   00000026   0x6001             STR      R1,[R0, #+0]

     31                  LPC_GPIO3->DATA = LED1_BIT;

   \   00000028   0x2110             MOVS     R1,#+16

   \   0000002A   0x6001             STR      R1,[R0, #+0]

     32                  

     33                  LPC_GPIO3->DATA = 0;

   \   0000002C   0x2100             MOVS     R1,#+0

   \   0000002E   0x6001             STR      R1,[R0, #+0]

     34                  LPC_GPIO3->DATA = LED1_BIT;

   \   00000030   0x2110             MOVS     R1,#+16

   \   00000032   0x6001             STR      R1,[R0, #+0]

   








반응형