[TI]/TM4C2014. 7. 20. 22:00

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





Posted by nexp

댓글을 달아 주세요

Cortex-M/NUVOTON2014. 7. 6. 22:00

M052LBN EVM - NUVOTON MCU성능 측정

M052LBN EVM - NUVOTON MCU성능 측정



NUVOTON사의 저렴한 MCU M052LBN 는 최대 클럭 50Mhz로 동작한다. GPIO토글을 이용하여 MCU성능 측정을 해 보았다.



3.2Mhz

#define Led1Toggle() P26 ^= 1


     15              while(1)

     16              {

     17                  Led1Toggle();

   \                     ??main_1: (+1)

   \   00000026   0x6821             LDR      R1,[R4, #+0]

   \   00000028   0x4041             EORS     R1,R1,R0

   \   0000002A   0x6021             STR      R1,[R4, #+0]

   \   0000002C   0xE7FB             B        ??main_1

   \   0000002E   0xBF00             Nop      

   \                     ??main_0:

   \   00000030   0x50004080         DC32     0x50004080

   \   00000034   0x50004258         DC32     0x50004258

     19              }




GPIO On/Off 시 7.2Mhz까지 출력 되는것이 확인된다.

#define Led1Off() P26 = 1

#define Led1On() P26 = 0


     15              while(1)

     16              {

     17                  Led1On();

   \                     ??main_1: (+1)

   \   00000026   0x6025             STR      R5,[R4, #+0]

     18                  Led1Off();

   \   00000028   0x6020             STR      R0,[R4, #+0]

   \   0000002A   0xE7FC             B        ??main_1

   \                     ??main_0:

   \   0000002C   0x50004080         DC32     0x50004080

   \   00000030   0x50004258         DC32     0x50004258

     21              }


1$ 이하 MCU에서 이정도 성는이면 포트도 여유롭고 나쁘지 않다.

 

Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM82014. 5. 4. 18:30

STM8 EVM MCU성능테스트 - CLK 설정

STM8 EVM MCU성능테스트 - CLK 설정


STM8은 최대 24Mhz로 동작하는 8bit MCU이다. STM8SF의영우 16Mhz가 최대 동작 주파수 이다.

속도는 그리 빠르지 않아도 가격대비 성능이 우수한데 간단히 성능 테스트를 해 보았다.



STM8 클럭 블록도

우선 STM8의 클럭 시스템을 보면 외부 오실레이터나 크리스탈을 연결하거나 내부 16Mhz RC 오실레이터를 이용할 수 있다. 사이즈가 워낙 작아서 내부 클럭 사용을 많이 하게되므로 내부 클럭 기준으로 테스트 할 예정이다.


동작 클럭은 외부로 출력 할 수 있는데 PC4-CLK CCO핀으로 출력해서 확인 할 수 있다.


PC4(HS)/TIM1_CH4/CLK_CCO/AIN2/[TIM1_CH2N]





STM8 클럭 설정

void SystemInit(void)

{

    CLK_DeInit();

    CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);                // CPU Prescaler = 1.

    CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);                // Prescaler = 8, 16 MHz.

    //CLK_CCOConfig(CLK_OUTPUT_HSI);                          // Output clock on CCO pin.

    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,              // Automatically switch

                          CLK_SOURCE_HSI,                   // Switch to internal timer.

                          DISABLE,                          // Disable the clock switch interrupt.

                          CLK_CURRENTCLOCKSTATE_DISABLE);   // Disable the previous clock.  

    

    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); /*16 MHz Setting*/    

}




16Mhz로 동시 GPIO토글 속도는 3.2Mhz 정도로 측정된다. 16Mhz대 다른 MCU의 성능과 비교해 보면 나쁘지 않은것 같다. 특히 가격적인 면을 고려 한다면 상당히 만족스럽다.

     32              while(1)

     33              {

     36                  PORTD = 0;

   \                     ??main_0:

   \   000019 35 00 500F   MOV       L:0x500f, #0x0

     37                  PORTD = BIT3;

   \   00001D 35 08 500F   MOV       L:0x500f, #0x8

   \   000021 20 F6        JRA       L:??main_0

     38              }


Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC33E2014. 3. 29. 05:32

dsPIC33E - MCU속도 측정

dsPIC33E - MCU속도 측정





dsPIC33E 시리즈는 최대 70Mhz로 동작 가능하다. 기존 dsPIC33 시리즈가 40Mhz로 동작한것에 비해 거의 2배 정도의 성능이 향상되었다.

기존 dsPIC33시리즈의 MCU속도 측정과 비교해 보면 약 두배 정도 속도가 향상된것 같다. 이정도면 72Mhz STM32(12Mhz)와 비교해 봐도 좋을것 같다.


MCU별 속도 측정 참고



단순히 GPIO On/Off 했을때 속도를 측정해 보면..

-> 7Mhz


34:                 while(1)

35:                 {

36:                 LATA = 0xFF;

  0374  200FF1     mov.w #0xff,0x0002

  0376  20E040     mov.w #0xe04,0x0000

  0378  780801     mov.w 0x0002,[0x0000]

37:                 LATA = 0;

  037A  EB0080     clr.w 0x0002

  037C  20E040     mov.w #0xe04,0x0000

  037E  780801     mov.w 0x0002,[0x0000]

38:                


44:                 }

  0380  37FFF9     bra 0x000374


  

옵티마이즈 후 

 ->11.5Mhz

  34:                 while(1)

35:                 {

36:                 LATA = 0xFF;

  0340  887020     mov.w 0x0000,0x0e04

37:                 LATA = 0;

  0342  EF2E04     clr.w 0x0e04

  0344  37FFFD     bra 0x000340



Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283462014. 1. 5. 16:30

[TMS320C28346] 성능 테스트 - GPIO토글 테스트

[TMS320C28346] 성능 테스트 -  GPIO토글  테스트




DSP28335 EVM 보드와 핀맵을 동일하게 해서 TMS320C28346를 테스트 할 수 있는 보드를 제작 했다. TMS320F28335와 코드가 호환 되므로 기존 예제들을 좀더 좋은 성능으로 테스트 가능하다.

TMS320F28335 EVM에서의 속도 비교를 참고하면 확실히 성능향상이 된것 같다
 
 

메모리방식으로 단순 On/Off
15Mhz

while(1)
{
 GpioDataRegs.GPACLEAR.bit.GPIO4 = 1;
 GpioDataRegs.GPASET.bit.GPIO4 = 1;
}
 



레지스터방식의 토글 레지스터
18Mhz 
GpioDataRegs.GPATOGGLE.all =0x000000FF;
 




레지스터방식의 단순 On/Off 속도 
38Mhz
GpioDataRegs.GPACLEAR.all    =0x000000FF;
GpioDataRegs.GPASET.all      =0x000000FF;

 


Posted by nexp

댓글을 달아 주세요