[TI]/LM4F2011. 12. 9. 21:00

[LM4F] LM4F232H 의 GPIO속도 테스트

[LM4F] LM4F232H 의 GPIO속도 테스트



TI사의 Cortex-M4 시리즈 LM4F232 가 출시 되었다. 
기존 Cortex-M3 에 비해 향상된 부분은 속도가 50Mhz에서 80Mhz로 증가 되었고 FPU가 추가 되었다.
그래서 대략적인 속도 체크를 해 보았다.
(같은 Cortex-M4 코어 STM32F4 속도 측정 결과 참고)


시스템 클럭이 변경되었기 때문에 PLL설정 부분에 코드 수정이 필요하다.

void SystemInit(void)
{
    // Set Clock to illegal 100Mhz
   // SysCtlClockSet(SYSCTL_SYSDIV_2 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |  SYSCTL_XTAL_16MHZ);

    // Set Clock to 80Mhz MAX. legal speed
    //SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |  SYSCTL_XTAL_16MHZ);
}

  

메인 클럭 80Mhz에서 GPIO토글 속도는 10Mhz정도의 출력 속도를 보인다.

 가격이 저렴하긴 (5~6$ @1K) 하지만 그렇게 매리트 있지는 않는것 같다.
단순 비교는 좀 그렇지만 8$대의 STM32F4 와비교해 보면 ST가 더 좋은것 같다.

[참고] MCU속도 측정 결과 

Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F42011. 12. 5. 20:00

[STM32F4] 속도 측정 - GPIO 토글 속도 테스트

[STM32F4] 속도 측정 - GPIO 토글 속도 테스트



STM32는 Cortex-M4F 코어로 168Mhz로 동작한다. GPIO 토글 테스트로 MCU의 속도를 테스트 해 보았다.
물론 클럭속도가 중요한 요소는 아지만 마이컴에서 GPIO속도는 중요할 때가 많이 있다. STM32F4는 FPU가 있어 DSP기능도 뛰어난것 같다. [참고] MCU속도 측정 결과  

또는 STM32 CPU속도 테스트 결과와 비교해 보면 ST시리즈 속도를 확인해 볼 수 있다.



클럭 설정없이 그냥 GPIO On/Off 시키니 10Mhz 출력된다. 느린데..
뭔가 이상한것 같다.

PLL설정후 STM32F4의 GPIO토글 속도는  33Mhz 까지 출력된다.
STM32F103에서 12Mhz가 출력 되었던과 비교하면 확실히 빨라진것을 확인 할 수 있다. 메인클럭이 72Mhz -> 168Mhz로 되었기 때문이다.


STM32F4 클럭 테스트를 위한 코드는 비트제어 방식으로  했고 아래 와 같다.

     25              while (1)
     26              {
     27                  Led1On();
   \                     ??main_1:
   \   00000082   3E83               STRH     R6,[R7, #+24]
     30                  Led1Off();
   \   00000084   7E83               STRH     R6,[R7, #+26]
   \   00000086   FCE7               B.N      ??main_1
   \                     ??main_0:
   \   00000088   ........           DC32     GPIO_InitStructure
   \   0000008C   00000240           DC32     0x40020000
   \   00000090   00180240           DC32     0x40021800




레지스터를 접근해서 포트 토글 해 보면 41ns(12Mhz) 정도 측정이 된다.

  while (1)
  {
         GPIOB->ODR ^= GPIO_PIN_1;
  }







비트 제어 명령으로 제어 해 보면 10ns(33.5Mhz) 로 측정된다.
  while (1)
  {
         //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
         GPIOB->BSRR = GPIO_PIN_1;
         GPIOB->BRR = GPIO_PIN_1;
  }






좀더 보기 편하게 하기위해 Delay를 주었다.

  while (1)
  {
         //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
         GPIOB->BSRR = GPIO_PIN_1;
         GPIOB->BRR = GPIO_PIN_1;
         HAL_Delay(1);
  }


On/Off 속도가 9.9ns 정도 측정이 된다.









Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011. 11. 26. 17:30

[MSP430F5529 EVM] GPIO토글 속도 측정

[MSP430F5529 EVM]  GPIO토글 속도 측정



MSP430F55xx 시리즈는 클럭이 최대 32Mhz까지 입력 가능하므로 이전 MSP430보다는 많이 빨라 졌다. USB기능이 추가 되었기 때문에 속도도 중요한 요소가 되었기 때문이지 않을까...
아무튼 저렴하고 저전력의 MSP430코어가 속도도 빨라졌기 때문에 응용해 적용해 볼곳이 많이 있을것 같다.



MSP430F5529/MSP430F5510 GPIO토글 속도 테스트
[참고] MCU속도 측정 결과 

24Mhz 클럭 이용시 -> GPIO 토글 속도 1.7Mhz
33Mhz 클럭 이용시 -> GPIO 토글 속도 2.35Mhz
     39              while(1)
     40              {
     41                  Led1Toggle();
   \                     ??main_1:
   \   00005C   D2E36302     XOR.B   #0x1, &0x263
   \   000060   FD3F         JMP     ??main_1
   \   000062   0343         NOP



단순 On/Off 하는데 걸리는 시간 90 ns 대략 3Mhz
33Mhz 클럭 이용시 -> GPIO On/Off속도 4.1Mhz

     39              while(1)
     40              {
     41                  //Led1Toggle();
     42                  PORT8 = 1;
   \                     ??main_1:
   \   00005C   D2436302     MOV.B   #0x1, &0x263
     43                  PORT8 = 0;
   \   000060   C2436302     MOV.B   #0x0, &0x263
   \   000064   FB3F         JMP     ??main_1
   \   000066   0343         NOP



참고로 외부 클럭을 32Mhz로 사용하기 위해  TI에서 제공하는 코드(HAL_UCS)를 system.c 에 추가 하였다.
#if (__SYS_CLK__ == SYS_CLK_32MHZ_XTAL) 
    // Startup HF XT2 crystal
    P5SEL |= BIT2+BIT3;                       // Port select XT2 
    do{
        status = XT2_Start_Timeout(XT2DRIVE_0, 50000);
    }while(status == UCS_STATUS_ERROR); 

    SELECT_SMCLK(SELS__XT2CLK);               // Select XT2 as SMCLK source
    SELECT_MCLK(SELS__XT2CLK);
#endif

Posted by nexp

댓글을 달아 주세요

[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

댓글을 달아 주세요