본문 바로가기

[MSP430]/MSP432

MSP432 성능 테스트 - GPIO토글

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로 측정이 된다.


와 비교해 보면 비슷한것 같은데... 저전력 기능을 감안하면 성능면에서는 나쁘지 않은것 같다.


반응형