3 fas sinus våg generator baserat på Arduino förfallodatumet (3 / 5 steg)
Steg 3: Aktivera avbrott
För att maximera dess prestanda bör CPU belastning vara så låg som möjligt. Men på grund av icke-1to1 överensstämmelsen mellan CPU stiftet och vederbörlig stift, bit operation är nödvändig.
Du kan ytterligare optimera algoritmen men rummet är mycket begränsad.
void TC7_Handler(void)
{TC_GetStatus(TC2,1);
t = t % prov; Använd t % prov i stället för "om" att undvika spill av t
phaseAInc = (förinställda * t) % 5376; Använd % 5376 för att undvika array index overflow
phaseBInc = (phaseAInc + 1792) % 5376;
phaseCInc = (phaseAInc + 3584) % 5376;
p_A = sin768 [phaseAInc] << 1; hänvisa till PIOC: PC1 till PC8, motsvarande Arduino vederbörlig pin: pin 33-40, därav flytta vänster för 1 siffra
p_B = sin768 [phaseBInc] << 12; hänvisa till PIOC: PC12 till PC19, motsvarande Arduino vederbörlig pin: pin 51-44, därav flytta vänster 12 tal
p_C = sin768 [phaseCInc]; fas C utgång Employé PIOC: PC21, PC22, PC23, PC24, PC25, PC26, PC28 och PC29, motsvarande Arduino vederbörlig pin: digital pin: 9,8,7,6,5,4,3,10, respektive
p_C2 = (p_C & B11000000) << 22; Detta genererar PC28 och PC29
p_C3 = (p_C & B00111111) << 21; Detta genererar PC21-PC26
p_C = p_C2|p_C3; Detta genererar parallella produktionen av fas C
p_A = p_A|p_B|p_C; 32 bitars utdata = fas A (8 bitar) |phase B|phase C
PIOC -> PIO_ODSR = p_A; utgång register = p_A
t ++; }