ATMega168 을 이용한 오버클럭 속도 측정
ATMega168 을 이용해서 GPIO 토글속도를 측정 했다. Mega168는 20Mhz까지 구동 가능하므로 24Mhz에서 측정해 보았다.
24Mhz -> 209ns/2.4Mhz
[다른 MCU속도 측정 결과]와 비교 하면 저렴한 Mega168에서 상당히 빠른것 같다.
ATMega168 GPIO속도 측정 소스코드
WinAVR(AVR Gcc) 옵티마이즈 옵션
컴파일러의 어샘블 결과는 아래와 같다. 5 머쉰사이클 정도 나온다.
Level-s 209ns/2.4Mhz
Level-0 500ns/1Mhz
ATMega168 을 이용해서 GPIO 토글속도를 측정 했다. Mega168는 20Mhz까지 구동 가능하므로 24Mhz에서 측정해 보았다.
24Mhz -> 209ns/2.4Mhz
[다른 MCU속도 측정 결과]와 비교 하면 저렴한 Mega168에서 상당히 빠른것 같다.
ATMega168 GPIO속도 측정 소스코드
#define Led1Toggle() Tbi(LED1_PORT, LED1_BIT) //PORTB ^= BIT1
int main(void)
{
SystemInit();
Led1Init();
Led1On();
while (1)
{
Led1Toggle();
//Delay(100);
}
}
int main(void)
{
SystemInit();
Led1Init();
Led1On();
while (1)
{
Led1Toggle();
//Delay(100);
}
}
WinAVR(AVR Gcc) 옵티마이즈 옵션
컴파일러의 어샘블 결과는 아래와 같다. 5 머쉰사이클 정도 나온다.
Level-s 209ns/2.4Mhz
while (1)
{
Led1Toggle();
88: 92 e0 ldi r25, 0x02 ; 2
8a: 85 b1 in r24, 0x05 ; 5
8c: 89 27 eor r24, r25
8e: 85 b9 out 0x05, r24 ; 5
90: fc cf rjmp .-8 ; 0x8a <main+0xa>
{
Led1Toggle();
88: 92 e0 ldi r25, 0x02 ; 2
8a: 85 b1 in r24, 0x05 ; 5
8c: 89 27 eor r24, r25
8e: 85 b9 out 0x05, r24 ; 5
90: fc cf rjmp .-8 ; 0x8a <main+0xa>
Level-0 500ns/1Mhz
while (1)
{
Led1Toggle();
a8: a5 e2 ldi r26, 0x25 ; 37
aa: b0 e0 ldi r27, 0x00 ; 0
ac: e5 e2 ldi r30, 0x25 ; 37
ae: f0 e0 ldi r31, 0x00 ; 0
b0: 90 81 ld r25, Z
b2: 82 e0 ldi r24, 0x02 ; 2
b4: 89 27 eor r24, r25
b6: 8c 93 st X, r24
b8: f7 cf rjmp .-18 ; 0xa8 <main+0x28>
{
Led1Toggle();
a8: a5 e2 ldi r26, 0x25 ; 37
aa: b0 e0 ldi r27, 0x00 ; 0
ac: e5 e2 ldi r30, 0x25 ; 37
ae: f0 e0 ldi r31, 0x00 ; 0
b0: 90 81 ld r25, Z
b2: 82 e0 ldi r24, 0x02 ; 2
b4: 89 27 eor r24, r25
b6: 8c 93 st X, r24
b8: f7 cf rjmp .-18 ; 0xa8 <main+0x28>
반응형