Si tu veux écrire simultanément sur 4 broches de type PBx, c'est très simple:
Dans le setup():
1/ Tu actives PIOB avec PMC : PMC->PMC_PCER0 |= PMC_PCER0_PID12;
2/ Tu valides le fait que les broches numéros x0, x1, x2 et x3 sont commandées par le GPIO:
PIOB->PIO_PER |= PIO_PER_Px0 | PIO_PER_Px1 | ....
3/ Tu déclares que toutes les broches qui n'ont pas pour numéros x0, ..... ne doivent pas être affectées par une écriture dans PIO_ODSR : PIOB->PIO_OWDR = PIO_OWDR_Py | ....
4/ Tu déclares que les broches x0, .... doivent être affectées par une écriture dans PIO_ODSR:
PIOB->PIO_OWER = PIO_OWER_Px0 | ....
Dans la loop():
Tu écris sur les broches x0,... avec PIOB->PIO_ODSR en plaçant un 0 ou un 1 sur les 4 broches sélectionnées, ailleurs c'est indifférent.
Un exemple de ce qui précède avec 2 broches activées:
const uint32_t PinSelection = PIO_ODSR_P13 | PIO_ODSR_P27;
void setup() {
PMC->PMC_PCER0 |= PMC_PCER0_PID12; // PIOB power ON
PIOB->PIO_PER |= PinSelection;
PIOB->PIO_OER = PinSelection;
PIOB->PIO_OWDR = ~PinSelection;
PIOB->PIO_OWER = PinSelection;
}
void loop() {
PIOB->PIO_ODSR = PinSelection;
delay(1000);
PIOB->PIO_ODSR = ~PinSelection;
delay(1000);
}