Tengo un programa C muy simple que alterna un pin en una placa Cortex-M3 (SAM3X8E) con una velocidad de reloj de 84MHz. Construí esto usando Atmel Studio 6.1.
#include <asf.h>
int main (void)
{
board_init();
PIOB->PIO_PER = PIO_PB27; //Enable PIO
PIOB->PIO_OER = PIO_PB27; //Set to OUTPUT
PIOB->PIO_PUDR = PIO_PB27; //Disable the pull up resistor
while(1) {
PIOB->PIO_SODR = PIO_PB27; //Enable output
PIOB->PIO_CODR = PIO_PB27; //Disable output
}
}
Ahora, cuando cargue esto en la placa y conecto un osciloscopio al pin, veo la señal pulsando a unos 700 kHz. Pensé que la velocidad del ciclo hubiera sido mucho más rápida con este código minimalista.
¿Es posible obtener una frecuencia GPIO superior a un MHz utilizando esta configuración? ¿Es mi entorno de compilación el que no produce un código óptimo? ¿Es posible obtener GPIO más rápido usando otra técnica?