Es gibt verschiedene Möglichkeiten, einen Port ein- und auszuschalten. Ich habe mal untersucht, welche Art die Schnellste ist.
1. Art:
//siehe http://asf.atmel.com/docs/latest/sam3x/html/ioport_quickstart.html
#define PIN11 IOPORT_CREATE_PIN(PIOD, 7) // So wird Pin 11 adressiert, siehe Port Layout.
ioport_init();
ioport_set_pin_dir(PIN11, IOPORT_DIR_OUTPUT);
while(1)
{
ioport_set_pin_level(PIN11, HIGH);
ioport_set_pin_level(PIN11, LOW);
}
//Es ergibt sich an PIN 11 ein Rechteck mit 16,7 MHz
2. Art:
#define LED_RED PIO_PB27 //So wird Pin 13 mit der LED adressiert
ioport_init();
pio_set_output(PIOB, LED_RED, LOW, DISABLE, ENABLE);
while(1)
{
PIOB->PIO_SODR = LED_RED;
PIOB->PIO_CODR = LED_RED;
}
Diese Art ist genauso schnell wie die 1.
3. Art:
#define LED_RED PIO_PB27 //So wird Pin 13 mit der LED adressiert
ioport_init();
pio_set_output(PIOB, LED_RED, LOW, DISABLE, ENABLE);
while(1)
{
pio_set(PIOB, LED_RED);// 1,8 MHz
pio_clear(PIOB, LED_RED);
}
Diese Art ist mit 1.8 MHz fast 10 mal so langsam, wie die beiden anderen. So intuitiv diese Schreibweise ist, so langsam ist sie.