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]