MSP432 성능 테스트 - GPIO토글
MSP432는 Cortex-M4 코어의 최대 48Mhz로 동작하는 저전력 MCU이다. 단순 비교는 의미 없기는 하지만 간단히 GPIO토글 속도로 성능 테스트를 진행 해 보았다.
MSP432의 CPU성능 테스트를 위해 TI에서 제공하는 기본 MSP432 GPIO 토글 예제를 구동해 보았다.
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P7, GPIO_PIN6);
GPIO토글 속도는 16khz로 측정 된다.
너무 느리다.
MSP432 클럭 설정을 좀 들여다 볼 필요가 있을것 같다.
MSP432는 10kHz ~ 48Mhz로 구동 가능하고 2개의 외부 클럭과, 5개의 내부 클럭 소스로 구성된다.
MSP432의 클럭 소스
LFXTCLK 외부 클럭 Low-frequency oscillator (LFXT)에서 32768Hz 등을 이용 가능 (32kHz 이하 주파수)
VLOCLK 내부 클럭 : 10KHz 정도의 VLO (Very low power low frequency oscillator) 시계
REFOCLK 내부 클럭 : 32k 또는 128KHz의 REFO (low-power low-frequency oscillator) 시계
DCOCLK 내부 클럭 : DCO (digitally controlled oscillator) 클럭 주파수 선택 가능
MODCLK 내부 클럭 : 24MHz의 low-power oscillator
HFXTCLK 외부 클럭 : 고속 클럭 HFXT (High-frequency oscillator) 1MHz ~ 48MHz 범위
SYSOSC 내부 클럭 : 5MHz
물론 클럭 별로 파워 선택이 필요하고 제약사항도 따른다. 최대한의 저전력 구동을 위해 이런 구조가 된것 같지만 개발자는 신경 써야 할 부분이 많아 져서 부담으로 다가올것 같다.
우선 클럭 속도를 좀더 올리기 위해 코드 수정이 필요한데
system_msp432p401r.c
파일에서 설정 가능하다.
48Mhz로 설정해서 구동해 보자.
// CPU Frequency
// <1500000> 1.5 MHz
// <3000000> 3 MHz
// <12000000> 12 MHz
// <24000000> 24 MHz
// <48000000> 48 MHz
//#define __SYSTEM_CLOCK 1500000
#define __SYSTEM_CLOCK 48000000
48Mhz 설정하고 GPIO 토글 속도를 측정해 보면
1Mhz
로 측정된다.
127 MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P7, GPIO_PIN6);
\ ??main_1: (+1)
\ 00000014 0x2140 MOVS R1,#+64
\ 00000016 0x2007 MOVS R0,#+7
\ 00000018 0x.... 0x.... BL GPIO_toggleOutputOnPin
\ 0000001C 0xE7FA B.N ??main_1
\ 0000001E 0xBF00 Nop
\ ??main_0:
\ 00000020 0x02000864 DC32 0x2000864
TI제공 함수를 이용하지 않고 레제스터 직접 제어 해 보았다.
2Mhz
로 측정된다.
다른 회사의 Cortex-M4 코어에 있는 GPIO토글 레지스터가 있으면 좋을것 같은데...
#define OFS_LIB_PAOUT ((uint32_t)&P1->OUT - (uint32_t)P1)
#define PORT7 ((uint32_t)P7 + OFS_LIB_PAOUT)
98 HWREG16(PORT7) ^= GPIO_PIN6;
\ ??main_1: (+1)
\ 00000016 0x8801 LDRH R1,[R0, #+0]
\ 00000018 0xF081 0x0140 EOR R1,R1,#0x40
\ 0000001C 0x8001 STRH R1,[R0, #+0]
\ 0000001E 0xE7FA B.N ??main_1
\ ??main_0:
\ 00000020 0x02000864 DC32 0x2000864
\ 00000024 0x40004C62 DC32 0x40004c62
토글 하지 않고 직접 On/Off를 반복해서 측정 해 보니
12Mhz로 측정이 된다.
와 비교해 보면 비슷한것 같은데... 저전력 기능을 감안하면 성능면에서는 나쁘지 않은것 같다.