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비트 시프트된 주세에 맵핑되어 있으므로 소프트웨어 적으로 처리하면 한 명령 사이클 내에 제어 가능하다.