본문 바로가기

[TI]/TM4C

TM4C123 - MCU 성능측정

TM4C123 - MCU 성능측정



TM4C123은 Cortex-M4코어에 80Mhz로 동작한다. M4코어이고 페리가 막강하기 때문에 단순 비교하기는 좀 한계가 있긴하지만 일단 GPIO토글 속도로 성능 측정을 해 보았다.


TI에서 제공하는 함수를 이용하니 2.2Mhz 의 속도가 나온다.

너무 느리다 옵티마이즈 해도 동일하다.

#define Led1Off() GPIOPinWrite(GPIO_PORTB_BASE, LED1_BIT, LED1_BIT);

#define Led1On() GPIOPinWrite(GPIO_PORTB_BASE, LED1_BIT, 0);



     12              while(1)

     13              {

     14                  Led1On();

   \   00000044   0x2200             MOVS     R2,#+0

   \   00000046   0x2104             MOVS     R1,#+4

   \   00000048   0x4628             MOV      R0,R5

   \   0000004A   0x.... 0x....      BL       GPIOPinWrite

     15                  Led1Off();

   \   0000004E   0x2204             MOVS     R2,#+4

   \   00000050   0x2104             MOVS     R1,#+4

   \   00000052   0xE7F4             B.N      ??main_1

   \                     ??main_0:

   \   00000054   0x01000020         DC32     0x1000020

   \   00000058   0xF0000801         DC32     0xf0000801

   \   0000005C   0x40005000         DC32     0x40005000

     16              }




레지스터를 직접 제어해서 GPIO를 On/Off 해보니 10Mhz 로 빨라졌다.

     13              while(1)

     14              {

     17                  HWREG(PORTB + (GPIO_O_DATA + (BIT2 << 2))) = 0;

   \                     ??main_1: (+1)

   \   00000046   0x2100             MOVS     R1,#+0

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

     18                  HWREG(PORTB + (GPIO_O_DATA + (BIT2 << 2))) = BIT2;

   \   0000004A   0x2104             MOVS     R1,#+4

   \   0000004C   0x6001             STR      R1,[R0, #+0]

   \   0000004E   0xE7FA             B.N      ??main_1

   \                     ??main_0:

   \   00000050   0x01000020         DC32     0x1000020

   \   00000054   0xF0000801         DC32     0xf0000801

   \   00000058   0x40005000         DC32     0x40005000

   \   0000005C   0x40005010         DC32     0x40005010

     19              }




하지만 80Mhz로 구동하는데... 속도가 너무 느리다. 

릴리즈 모드로 변경하니 코드사이즈가 줄어든다.

     37              while(1)

     38              {

     39                  //Led1On();

     40                  //Led1Off();

     41                  PB2 = 0;

   \                     ??main_0: (+1)

   \   00000052   0x600A             STR      R2,[R1, #+0]

     42                  PB2 = 1;

   \   00000054   0x6008             STR      R0,[R1, #+0]

   \   00000056   0xE7FC             B        ??main_0

     43              }



GPIO 세트, 클리어, 토글 레지스터가 없다.

물론 GPIO 비트제어는 GPIO데이터 레지스터에서 2비트 시프트된 주세에 맵핑되어 있으므로 소프트웨어 적으로 처리하면 한 명령 사이클 내에 제어 가능하다.





반응형