[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

댓글을 달아 주세요

Cortex-M/EFM322013. 4. 30. 20:00

EFM32 성능테스트 - 클럭 설정 및 소비 전류 테스트

EFM32 성능테스트 - 클럭 설정 및 소비 전류 테스트

 

EFM32 는 Cortex-M3코어의 저전력 기능이 강화된 MCU이다. 저전력을 위해 여러가지 기능들이 많이 있다.

저전력 기능중 가장 큰 부분인 클럭 부분을 살펴 보면 칩내부에 있는 HFRCO, LFRCO 와, 칩외부에서 공급할수 있는 HFXO, LFXO로 나누어 진다.
초기에 리셋되면 디폴트로 내부 28Mhz를 2분주한 14Mhz로 구동이 된다.

 

HFRCO : 1-28 Mhz High Frequency RC Oscillator

LFRCO: 32.768 kHz Low Frequency RC Oscillator


HFXO: 4-32 Mhz High Frequency Crystal Oscillator

LFXO: 32.768 kHz Low Frequency Crystal Oscillator

 

 

 EFM32 클럭 구조

 

 

EFM32 클럭 블록도



 

클럭 설정은 CMU_HFRCOBandSet() 함수를 이용하여 설정 가능하고 1Mhz ~ 28Mhz 로 설정할 수 있다.

typedef enum
{
  /** 1MHz RC band. */
  cmuHFRCOBand_1MHz  = _CMU_HFRCOCTRL_BAND_1MHZ,
  /** 7MHz RC band. */
  cmuHFRCOBand_7MHz  = _CMU_HFRCOCTRL_BAND_7MHZ,
  /** 11MHz RC band. */
  cmuHFRCOBand_11MHz = _CMU_HFRCOCTRL_BAND_11MHZ,
  /** 14MHz RC band. */
  cmuHFRCOBand_14MHz = _CMU_HFRCOCTRL_BAND_14MHZ,
  /** 21MHz RC band. */
  cmuHFRCOBand_21MHz = _CMU_HFRCOCTRL_BAND_21MHZ,
  /** 28MHz RC band. */
  cmuHFRCOBand_28MHz = _CMU_HFRCOCTRL_BAND_28MHZ
} CMU_HFRCOBand_TypeDef;

 

 

CMU_ClockDivSet() 함수로 클럭 분주를 아주 세밀하고 자유롭게 설정할 수 있다.

typedef enum
{
  cmuClkDiv_1     = 0,  /**< Divide clock by 1. */
  cmuClkDiv_2     = 1,  /**< Divide clock by 2. */
  cmuClkDiv_4     = 2,  /**< Divide clock by 4. */
  cmuClkDiv_8     = 3,  /**< Divide clock by 8. */
  cmuClkDiv_16    = 4,  /**< Divide clock by 16. */
  cmuClkDiv_32    = 5,  /**< Divide clock by 32. */
  cmuClkDiv_64    = 6,  /**< Divide clock by 64. */
  cmuClkDiv_128   = 7,  /**< Divide clock by 128. */
  cmuClkDiv_256   = 8,  /**< Divide clock by 256. */
  cmuClkDiv_512   = 9,  /**< Divide clock by 512. */
  cmuClkDiv_1024  = 10, /**< Divide clock by 1024. */
  cmuClkDiv_2048  = 11, /**< Divide clock by 2048. */
  cmuClkDiv_4096  = 12, /**< Divide clock by 4096. */
  cmuClkDiv_8192  = 13, /**< Divide clock by 8192. */
  cmuClkDiv_16384 = 14, /**< Divide clock by 16384. */
  cmuClkDiv_32768 = 15  /**< Divide clock by 32768. */
} CMU_ClkDiv_TypeDef;

 

 

 

 

프로젝트 별로 구동 속도를 쉽게 변경할 수 있도록 config.h 에 정의해 두었다.

// Prescale the HFPERCLK -> HF/4 = 28/1 = 28Mhz
#define _SET_MCU_CLK_()                    CMU_HFRCOBandSet(cmuHFRCOBand_28MHz);\
                                                                   CMU_ClockDivSet(cmuClock_HFPER, cmuClkDiv_1)


 

 


우선 아무 설정 없이 기본 동작 시킨후 GPIO 토글 속도를 측정해 보았다.

14Mhz 구동에서  1.17Mhz 로 측정된다.

 

 

최고 속도인 28Mhz로 구동시 테스트

28Mhz -> 2.35Mhz

 

GPIO토글이 아닌 On/Off 만 했을때 3Mhz 정도 나온다.

이때 소비 전류는 7mA 이다.

 

속도 면으로 보면 동급 클럭의 MCU에 비해 그렇게 빠르지는 않은데 소비 전류는 확실히 적은것 같다.

[참고] MCU속도 측정 결과 

 

클럭을 더 낮추어 1Mhz로 구동시 소비 전류 특정 결과

500uA

 


 

 

 


 

Posted by nexp

댓글을 달아 주세요