본문 바로가기

[Microchip]/PIC32

PIC32 속도 측정

PIC32 속도 측정


최대 PIC32는 80Mhz에 0 Waite Flash이다. 물론 코어 속어클럭과 페리 클럭은 분리되어 있고 페리 클럭은 훨신더 느리지만 다른 MCU에 비하면 상당히 빠른 결과가 나왔다. 다른 MCU속도 측정 결과 참고.

우선 기본적인 IO속도 측정을위해 IO토글하는 코드로 테스트 해보자.
8Mhz 클럭을 PLL로 80Mhz로 설정하고 테스트 하였다.
#pragma config FNOSC    = PRIPLL        // Oscillator Selection
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider (PIC32 Starter Kit: use divide by 2 only)
#pragma config FPLLMUL  = MUL_20        // PLL Multiplier
#pragma config FPLLODIV = DIV_1         // PLL Output Divider
#pragma config FPBDIV   = DIV_1         // Peripheral Clock divisor
:

main()
{
  SystemInit();

   TRISB = 0;

    while( 1)
    {
       LATB ^= 0xFF;
    } // main loop
}



코드 효율을 보기위해 Disasembly Listing를  Open한다.






옵티마이즈 옵션을 설정한다.



Os 일때  6.6Mhz 출력된다. 40Mhz dsPIC보다 조금 빠르다.

옵티마이즈를 O3으로 바꿔보자.  8Mhz 나온다. 상당히 빠르다.
18:                    LATB ^= 0xFF;
9D000058  8C6B6060   lw          t3,24672(v1)
9D00005C  396A00FF   xori        t2,t3,0xff
9D000060  AC6A6060   sw          t2,24672(v1)
9D000064  8C6B6060   lw          t3,24672(v1)
9D000068  396A00FF   xori        t2,t3,0xff
9D00006C  AC6A6060   sw          t2,24672(v1


코드를 수정해 Port On/Off 만 해보자
Os 일때 20Mhz 가 나온다.
19:                    LATB=0;
9D00005C  AC406060   sw          zero,24672(v0)
20:                    LATB=1;
9D000060  AC436060   sw          v1,24672(v0)


O3일 때 40Mhz 나온다. 멋지다! 이정도 속도면 딜레이를 주어야 할 상황이다.
19:                    LATB=0;
9D00005C  AC406060   sw          zero,24672(v0)
9D000064  AC406060   sw          zero,24672(v0)
20:                    LATB=1;
9D000060  AC436060   sw          v1,24672(v0)
9D000068  AC436060   sw          v1,24672(v0)


저렴한 MCU급에서 이정도 속도는 지금것 못본것같다. 저렴한 가격에 이정도면 쓰일곳이 많을것 같다.

반응형