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

댓글을 달아 주세요

Cortex-M/INFINEON2013. 11. 23. 21:46

XMC1300 EVM - 성능측정 GPIO토글 테스트

[XMC1300 EVM] - 성능측정 GPIO토글 테스트


Infineon사의 저렴한 Cortex-M0 XMC1302를 이용하여 간단히 성능 테스트를 해 보았다. 물론 요즘에 출시되는 MCU들은 각각의 용도별 특징이 있기 때문에 절대 성능을 측정하기는 무리가 있지만 기록해 두면 여러모로 쓸모는 있을것 같다.


XMC1300은 다른 Cortex시즈와 달리 GPIO 셋, 클리어, 토글레지스터가 따로 없고 OMR(Output Modification Register)레지스트라고하는 출력 상태를 변경하는 레지스터에서 토글이나 셋, 클리어 가능하다.

이렇게 레지스터가 하나로 되면 하드웨어적으로는 간단해 지지만 소프트웨어적으로는 한번의 연산이 더 필요기 때문에 코드상에서는 불리한것 같다.



XMC1300 GPIO 블록도

아래 그림은 XMC1300의 GPIO 구조도 이다.




우선 최대 32Mhz로 구동하고 GPIO출력 레지스터를 토글해 보니 1.25Mhz정도 된다. 


1.25Mhz

              while(1)

                   {

               

                       PORT0->OUT ^=  BIT13;

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

   \   00000038   0x4041             EORS     R1,R1,R0

   \   0000003A   0xE7FB             B        ??main_1

   \                     ??main_0:

   \   0000003C   0x40040000         DC32     0x40040000

   \   00000040   0xFFFFEFFF         DC32     0xffffefff

                  }



GPIO상태 변경 레지스터를 이용해 보면 좀더 빨라지지만 다른 MCU들의 성능 측정 결과와 비교하면 만족할 만한 수준은 아닌것 같다.

2.9Mhz

                   while(1)

                   {

                       PORT0->OMR = (0x00010001UL << 13);

   \                     ??main_1: (+1)

   \   00000038   0x6060             STR      R0,[R4, #+4]

   \   0000003A   0xE7FD             B        ??main_1

   \                     ??main_0:

   \   0000003C   0x40040000         DC32     0x40040000

   \   00000040   0xFFFFEFFF         DC32     0xffffefff

   \   00000044   0x20002000         DC32     0x20002000

                   }


Posted by nexp

댓글을 달아 주세요