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

댓글을 달아 주세요

[Microchip]/PIC24F2013. 1. 12. 22:30

[PIC24F16KA EVM] 클럭설정(OSC) 및 MCU속도 측정

[PIC24F16KA EVM] 클럭설정(OSC) 및 MCU속도 측정

 

 

PIC24F16KA, PIC24F08KA는 내부 8Mhz RC Oscillator가 있고 4채배 PLL이 있어 32Mhz로 구동할 수 있다.
하나의 명령어 수행하는데 2싸이클이 필요하므로 32Mhz에서 16MIPS로 동작한다.

 

CPU의 동작클럭은 CLKO (OSCO/CLKO/AN5/C1INA/C2INC/CN29/RA3) 핀에서 확인 가능하다.

디폴트 구동시 CPUCLK가 8Mhz이므로 CLKO는 4Mhz가 출력된다.

 

 

 

 

32Mhz로 구동하기 위해 FNOSC_FRCPLL으로 설정한다.

 

    _FOSCSEL(FNOSC_FRCPLL & IESO_OFF)
    _FOSC(FCKSM_CSDCMD & POSCFREQ_HS & OSCIOFNC_OFF & POSCMOD_NONE)

 

 

void SystemInit(void)
{
    CLKDIVbits.RCDIV = 0;                   //Set FRCDIV to 8 MHz operation

 

 _COSC0 = 1;
 _COSC1 = 0;
 _COSC2 = 0;

 

 _NOSC0 = 1;
 _NOSC1 = 0;
 _NOSC2 = 0;

 

CLKDIV = 0x0000;
}

 

 

32Mhz로 설정시 CLKO 를 확인해 보면 16Mhz가 출력되는것을 확인할 수 있다.

2 OSC클럭에 하나의 명령이 수행된다. 

(처음에 16Mhz가 정상적으로 출력되지 않고 출력되다 리셋 걸리는 현상이 있었다.

 레지스터 설정이 잘못 되었는나 싶어 그쪽만 확인 했는데, 문제는 PICKIT3에서 전원을 공급해 주어서 그런 현상이 발생 했다. 외부 전원 인가시 잘 동작 하는것을 확인했다.)

 

 

 


 

PIC24F16KA 성능 측정

32Mhz 구동하고 GPIO 토글 시 2.6Mhz가 출력된다.

LATA ^= BIT4

 

다른 16MIPS MCU와 비교해 보면 좀더 빠른 느낌은 있다. 다만 토글 레지스터가 없어 단순 GPIO토글의 성능은 좀 떨어진다.

8bit AVR Xmega 와 속도를 비교해 보면 좋을것 같다.

 

 

 

단순히 GPIO On/Off구동만 했을때 4Mhz 가 출력되고 57ns정도 걸린다.

LATA = BIT4;

LATA = 0;

 

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 5. 14. 00:54

[PIC16F723] 클럭 설정 - 성능 측정

 

[PIC16F723] 클럭 설정 - 성능 측정

 

 

 

PIC16F723  은 최대 20Mhz로 동작 가능하고 내부 오실레이터 이용시 16Mhz로 동작한다.

입력 클럭의 설정은 Config레지스터를 이용하여 설정 가능하다. 디폴트는 내부 오실레이터이다.

 

 

__CONFIG(WDTE_OFF&PLLEN_ON&FOSC_INTOSCCLK&MCLRE_ON);

 

 

 

내부 오실레이터 구조

PIC16F72x 는 내부에 1%정밀도의 오실레이터가 있기 때문에 외부 실레이터 연결할 필요 없이 간단히 사용할 수 있다.

최대 16Mhz까지 가능하고 디폴트 8Mhz로 동작한다.

 

오실레이터 관련 설정은  OSCCON 레지스터에서 가능하다.

 

void SystemInit(void)
{
 //grobal interrupt disable
 disable();   

 

 // Set internal oscillator frequency

//16MHz Internal Clock Select : 
 OSCCON = 0x30; 

}

 

 

 

 

 

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP60002012. 1. 29. 16:19

[TMS320C6720] 성능 테스트

[TMS320C6720] 성능 테스트

TMS320C6720성능 테스트를 위해 우선 가장 기본이 되는 GPIO토글 속도 테스트를 진행 해 보았다.

아무 설정없이 GPIO토글 하는 코드 로 테스트 했는데 500Khz도 안나온다...
기본 클럭으로 해서 그런것 같다.
 //SystemInit();

 while(1)
 {
  Led1On();
  Led1Off();
}

PLL설정 ( [TMS320C62720] 개발기 - PLL테스트 참고) 후,  페리 클럭을 50Mhz로 설정하고 GPIO On/Off토글 속도는 1Mhz정도 나온다.

그래도 좀 느린데...

GPIO를 Set/Clear 레지스터를 이용하여 옵티마이즈 하니 4Mhz까지 나온다.



TMS320C6720은 최대 200Mhz로 구동 가능하고 페리는 100Mhz까지 가능하기 때문에 PLL을 수정하여 최대한 올려보니GPIO토글 속도는 10Mhz 까지 나온다.
 PLLDIV0  = 0x08000;  // 20MHz/1 = 20MHz
 PLLM     = 10;     // 20MHz * 10 = 200MHz
 PLLDIV1  = 0x08000;  // SYSCLK1 = 200MHz/1 = 200MHz
 PLLDIV2  = 0x08001;  // SYSCLK2 = 200MHz/2 = 100MHz // Peripheral Clock
 PLLDIV3  = 0x08000;  // SYSCLK3 = 100MHz/1 =  100MHz // SDRAM Clock






Posted by nexp

댓글을 달아 주세요