[NXP]/LPC17002011. 11. 6. 06:30

[LPC1756 EVM] Cortex-M3 LPC1700 GPIO 속도 테스트 실험

[LPC1756 EVM] Cortex-M3 LPC1700 GPIO 속도 테스트 실험



NXP사의 100Mhz Corte-M3 LPC1756 의 GPIO토글링 속도 테스트를 실험해 보았다. [다른 MCU속도 측정 결과]와 비교 하면 PIC32정도와 비교할 만하다.

비트 토글시 4.5Mhz정도 출력된다. PLL세팅 하여 100Mhz로 구동하니 8Mhz 정도 나온다.
     14              while(1)
     15              {
     16                  Led1Toggle();   /FIO1PIN ^= BIT9
   \                     ??main_1:
   \   00000034   2068               LDR      R0,[R4, #+0]
   \   00000036   4840               EORS     R0,R1,R0
   \   00000038   2060               STR      R0,[R4, #+0]
   \   0000003A   FBE7               B.N      ??main_1
   \                     ??main_0:
   \   0000003C   34C00920           DC32     0x2009c034
   \   00000040                      REQUIRE _A_FIO1PIN




단순 On/Off 만 했을때 25Mhz까지 출력된다.
     14              while(1)
     15              {
     16                  FIO1SET = BIT9;
   \                     ??main_1:
   \   00000034   6060               STR      R0,[R4, #+4]
     17                  FIO1CLR = BIT9;
   \   00000036   A060               STR      R0,[R4, #+8]
   \   00000038   FCE7               B.N      ??main_1
   \   0000003A   00BF               Nop     
   \                     ??main_0:
   \   0000003C   34C00920           DC32     0x2009c034
   \   00000040                      REQUIRE _A_FIO1PIN
   \   00000040                      REQUIRE _A_FIO1SET
   \   00000040                      REQUIRE _A_FIO1CLR






LPC1756 PLL 설정 코드 - 100Mhz 설정
void ConfigurePLL ( void )
{
DWORD MValue, NValue;

  if ( PLL0STAT & (1 << 25) )
  {
    PLL0CON = 1;     /* Enable PLL, disconnected */
    PLL0FEED = 0xaa;
    PLL0FEED = 0x55;
  }

  PLL0CON = 0;       /* Disable PLL, disconnected */
  PLL0FEED = 0xaa;
  PLL0FEED = 0x55;

  SCS |= 0x20;      /* Enable main OSC */
  while( !(SCS & 0x40) ); /* Wait until main OSC is usable */

  CLKSRCSEL = 0x1;    /* select main OSC, 12MHz, as the PLL clock source */

  PLL0CFG = PLL_MValue | (PLL_NValue << 16);
  PLL0FEED = 0xaa;
  PLL0FEED = 0x55;

  PLL0CON = 1;       /* Enable PLL, disconnected */
  PLL0FEED = 0xaa;
  PLL0FEED = 0x55;
 
 CCLKCFG = CCLKDivValue; /* Set clock divider */
  #if USE_USB
    USBCLKCFG = USBCLKDivValue;   /* usbclk = 288 MHz/6 = 48 MHz */
  #endif

  while ( ((PLL0STAT & (1 << 26)) == 0) ); /* Check lock bit status */

  MValue = PLL0STAT & 0x00007FFF;
  NValue = (PLL0STAT & 0x00FF0000) >> 16;
  while ((MValue != PLL_MValue) && ( NValue != PLL_NValue) );

  PLL0CON = 3;       /* enable and connect */
  PLL0FEED = 0xaa;
  PLL0FEED = 0x55;
  while ( ((PLL0STAT & (1 << 25)) == 0) ); /* Check connect bit status */
  return;
}


void SystemInit(void)
{
  // Flash accelerator init
  FLASHCFG = (0x5UL<<12) | 0x3AUL;
  // Init clock
  InitClock();
#if FCCLK_FREQ < 20000000
  FLASHCFG = (0x0UL<<12) | 0x3AUL;
#elif FCCLK_FREQ < 40000000
  FLASHCFG = (0x1UL<<12) | 0x3AUL;
#elif FCCLK_FREQ < 60000000
  FLASHCFG = (0x2UL<<12) | 0x3AUL;
#elif FCCLK_FREQ < 80000000
  FLASHCFG = (0x3UL<<12) | 0x3AUL;
#elif FCCLK_FREQ < 100000000
  FLASHCFG = (0x4UL<<12) | 0x3AUL;
#endif 
   :
}
Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2011. 5. 1. 19:30

[FX2 EVM] GPIO 속도 측정

[FX2 EVM] GPIO 속도 측정

24Mhz로 구동시 650ns 750kHZ가 출력된다. 상당히 느리군..

void main(void)
{
 Led1Init();
 Led1On();

 while(1)
 {
  //Led1Toggle();
  PC7 ^= 1;
 }
}


000C         ?C0001:
                                           ; SOURCE LINE # 12
                                           ; SOURCE LINE # 13
                                           ; SOURCE LINE # 14
000C A2A7              MOV     C,PC7
000E B3                CPL     C
000F 92A7              MOV     PC7,C
                                           ; SOURCE LINE # 15
0011 80F9              SJMP    ?C0001
             ; FUNCTION main (END)


[참고] MCU속도 측정 결과 
Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 4. 30. 18:30

[TMS320F28069 EVM] GPIO토글 속토 측정

[TMS320F28069 EVM] GPIO토글 속토 측정



TMS320F28069 는 최대 클럭 80Mhz까지 가능하다. GPIO Toggle 속도를 측정해 보았다.

void main(void)
{
 //DSP System Initialize
 SystemInit();

 //LED Initialize
 Led1Init();
 Led1On();

 while(1)
 {
  GpioDataRegs.GPBTOGGLE.all = BIT34;
 }
}


메모리로 제어하기
아래 코드와 같이 비트 단위로 쉽게 제어 하기 위해 메모리로 제어하면  5Mhz정도가 정도가 나온다.
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1;





레지스터로 제어하기
8Mhz정도가 나오는데... 메모리 제어 처럼 보이지만 결국 레지스터 주소를 사용하므로 레지스터만 사용한다.



컴파일러에서 옵티마이즈 해 줄것으로 예상했지만 옵션을 바꿔봐도 메모리 제어, 레지스터 제어 결과가 다르게 나온다.
프로그램작성은 편할지 몰라도 그만큼 속도의 희생이 필요한것 같다.

앞으로 GPIO제어에는 레지스터 접근방법을 사용해야 겠다.
#define Led1Off()      GpioDataRegs.GPBSET.bit.GPIO34 = 1;
#define Led1On()      GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;

[참고] MCU속도 측정 결과 
Posted by nexp

댓글을 달아 주세요

ARM9/S3C64102011. 3. 28. 09:30

[S3C6410] GPIO 속도테스트

[S3C6410] GPIO 속도테스트




간단히 gpio.cpp 에서 제공되는 함수를 이용하여 PORTI를 토글시켜 보았다.
토글 속도가 220ns - 2.2Mhz가 나온다. 느린데..
#define Led1Toggle()            GPIO_SetDataAll(eGPIO_I, GPIO_GetDataAll(eGPIO_I) ^ BIT0)


포트를 S3C6410 GPIO 레지스터로 집접 제어하도록 수정해 보았다.
198ns 2.5Mhz로 조금 더 빨라 졌지만 여전히 느리다.

#define Led1Toggle()           PORTI ^= BIT0

GPIDAT레지스터는 0x7F008104에 할당되어 있다.



#define PORTI      (*(volatile unsigned*)0x7F008104)

while(1)
{
    Led1Toggle();
}


페리 클럭이 느린건지... 설정이 문제인지... 토글레지스터가 없긴하지만 다른 MCU속도 측정 결과 를 참고 하면 GPIOO 만으로 제어는 힘들듯..

참고로 단순 ON/OFF만 했을때는 2배 빨라진다. 다른 MCU는 3~4배 이상 빨라지는것과 비교하면 코드 효율이 좋은것 같다.

while(1)
{
    Led1On();
    Led1Off();
}
Posted by nexp

댓글을 달아 주세요

[NXP]/LPC1k2011. 1. 1. 16:00

[LPC1K-SM EVM] LPC1113 실행속도 측정 테스트

[LPC1K-SM EVM] LPC1113 실행속도 측정 테스트

LPC1113은 저렴한 가격에 50Mhz로 동작가능 하다. 
12Mhz 클럭을 PLL을 이용해 48Mhz로 설정하고 속도 측정을 해 보았다.

LPC1111/12/13/14의 GPIO특징으로 AHB클럭을 페리 클럭으로 사용하기 때문에 GPIO속도가 빠르다고 한다.




간단히 GPIO 토글을 했을때 3Mhz가 출력되는것을 확인할 수 있다.
#define Led1Toggle()                             (LED1_PORT ^= LED1_BIT)

     15              while(1)
     16              {
     17                  Led1Toggle();
   \                     ??main_1:
   \   00000030   2168               LDR      R1,[R4, #+0]
   \   00000032   4140               EORS     R1,R1,R0
   \   00000034   2160               STR      R1,[R4, #+0]
   \   00000036   FBE7               B        ??main_1
   \                     ??main_0:
   \   00000038   FC3F0350           DC32     0x50033ffc
     18              }
     19              return 0;


[다른 MCU속도 측정 결과]와 비교 하면 AVR보다 저렴하면서 속도도 더 빠르게 동작하는것을 확인할 수 있다.



참고로 오버클럭으로 72Mhz로 설정해본 결과 4.5Mhz출력된다.
void SystemInit(void)
{
   _SystemInit();

    //Main Clock Frequenz einstellen - wird aus XTAL generiert*/
    SetMainClockFreq(72);
    
    //Enable AHB clock to the GPIO domain.
    //LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);
}



Posted by nexp

댓글을 달아 주세요