PIC32 속도 측정
최대 PIC32는 80Mhz에 0 Waite Flash이다. 물론 코어 속어클럭과 페리 클럭은 분리되어 있고 페리 클럭은 훨신더 느리지만 다른 MCU에 비하면 상당히 빠른 결과가 나왔다. 다른 MCU속도 측정 결과 참고.
우선 기본적인 IO속도 측정을위해 IO토글하는 코드로 테스트 해보자.
8Mhz 클럭을 PLL로 80Mhz로 설정하고 테스트 하였다.
옵티마이즈 옵션을 설정한다.
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)
최대 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
}
#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급에서 이정도 속도는 지금것 못본것같다. 저렴한 가격에 이정도면 쓰일곳이 많을것 같다.
반응형