Basado en la hoja de datos página 17:
Los registros GPIO están ubicados en el bus ARM Cortex M0 + IO para una sincronización de E / S de un solo ciclo lo más rápida posible, permitiendo que GPIO alterne con velocidades de hasta 15 MHz.
Y utilicé un pequeño código (basado en la biblioteca LPCOPEN) para probar su velocidad:
Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 0, 12);
while(1)
{
Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, 12, true);
Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, 12, false);
}
Cuando rastreo este pin GPIO por el analizador lógico, está alternando alrededor de 250 kHz, que está lejos del valor mencionado en la hoja de datos.
También usé PLL para aumentar el reloj principal y el reloj del sistema para lograr una mejor velocidad:
Chip_IRC_SetFreq(96000000, 24000000);
pero incluso para diferentes valores 250 kHz es la frecuencia más alta que puedo alcanzar. La disminución de la velocidad de PLL causa una disminución en la frecuencia de salida de GPIO y también sé que puedo lograr una mejor velocidad con el código de ensamblaje, pero 250 kHz está muy lejos de la hoja de datos, y parece que la MCU no puede superar este límite (hay la misma sustancia para 60 MHz / 30MHz - 60MHz / 15MHz y así también) 250 kHz es la velocidad máxima que los pines en el estado periférico SPI pueden alternar.
EDITAR: Soy consciente de que para la prueba de velocidad completa, es necesario codificar en el ensamblaje directamente con los registros, pero como dije antes, el problema es después de aumentar el reloj principal de 12 MHz, GPIO no puede alternar más rápido y la velocidad de conmutación para SPI CLOCK es limitada a esta velocidad también.