80MHz 클록 속도로 실행되는 PIC32를 구성했습니다. 테스트로서, 그것만 범위에있어서 625kHz에서 토글 DIO있어pic32 가장 빠른 전환 방법 DIO
while(1) {
LATFbits.LATF4 = !LATFbits.LATF4;
}
와 DIO 핀 전환하려고. 해킹 된 목록을보고
9D000118 8C446160 LW A0, 24928(V0)
9D00011C 30840010 ANDI A0, A0, 16
9D000120 2C840001 SLTIU A0, A0, 1
9D000124 8C436160 LW V1, 24928(V0)
9D000128 7C4 INS V1, A0, 4, 1
9D00012C AC436160 SW V1, 24928(V0)
9D000130 0B400046 J 0x9D000118
많은 지침이 아닙니다. 왜 이렇게 느린가요?
==============
마지막으로 조립
#include<p32xxx.h>
.text
.set noreorder
.set nomacro
.global toggle
.ent toggle
toggle:
# void toggle(int mask)
# $a0 - mask
# performs toggles in an infinite loop (never returns)
# la $t0, 0xbf886160 # LATF base address 04:clear 08:set 12:inv
la $t0,LATF
loop:
sw $a0, 4($t0) # write mask to clear
sw $a0, 8($t0) # write mask to set
j loop
nop
.end toggle
가'SYSTEMConfigPerformance을 추가하는 것을 잊지 (예를 들면 인해 MEM 대기 시간에) CPU가 전환 할 수있는 다음 높은 경우, 더 높은 속도에 도달 할 수있을 비교 80000000UL);'처음에는 진술. 이제 3MHz로 토글됩니다. Beryllium의 의견으로 나는 토글 링을'LATFINV = 0x10;'으로 바꾸었다. 이제는 8MHz로 토글한다. 나는 용감한자가'sw '에 직접 어셈블리 코드를 작성할 수 있다고 생각한다. 어떻게 제대로 파이프 라인을해야할지 모르겠다. 시험판과 오류로 11MHz의 어셈블리 코드가 있습니다. –
은 [microchip forum] (http://www.microchip.com/forums/tm.aspx?m=404723&high=)에서 비슷한 토론을 보았습니다. –