Stap 3: Inschakelen interrupt
Maximaliseren van de prestaties, moet CPU-belasting zo laag mogelijk. Maar als gevolg van de niet-1to1 correspondentie tussen de CPU-pin en de Due-pin, beetje operatie noodzakelijk is.
U kunt verder optimaliseren van het algoritme, maar de kamer is zeer beperkt.
VOID TC7_Handler(void)
{TC_GetStatus(TC2,1);
t = t % monsters; Gebruik t % monsters in plaats van 'als' om overloop van t
phaseAInc = (vooraf ingestelde * t) % 5376; % 5376 gebruiken om te voorkomen dat array index overloop
phaseBInc = (phaseAInc + 1792) % 5376;
phaseCInc = (phaseAInc + 3584) % 5376;
p_A = sin768 [phaseAInc] << 1; verwijzen naar PIOC: PC1 te PC8, corresponderende pin van de Arduino Due: pin 33-40, vandaar verschuiving links voor 1 cijfer
p_B = sin768 [phaseBInc] << 12; verwijzen naar PIOC: PC12 naar PC19, corresponderende pin van de Arduino Due: pin 51-44, vandaar verschuiving links 12 cijfers
p_C = sin768 [phaseCInc]; fase C medewerker PIOC uitgang: PC21, PC22, PC23, PC24, PC25, PC26, PC28 en PC29, corresponderende pin van de Arduino Due: digitale pin: 9,8,7,6,5,4,3,10, respectievelijk
p_C2 = (p_C & B11000000) << 22; Dit leidt tot PC28 en PC29
p_C3 = (p_C & B00111111) << 21; Dit genereert PC21-PC26
p_C = p_C2|p_C3; Dit genereert parallelle uitvoer van fase C
p_A = p_A|p_B|p_C; 32 bit output = fase A (8 bits) |phase B|phase C
PIOC -> PIO_ODSR = p_A; uitgang register = p_A
t ++; }