velocidad GPIO en LPC812 MCU Cortex-M0 de NXP

1

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.

    
pregunta MHD

1 respuesta

-1

No tiene forma de SABER porque un reloj es lo que cree que es. Recomiendo usar un temporizador, con una interrupción activada al alcanzar un conteo o desbordamiento que simplemente alterna un poco para verificar el reloj del sistema.

Debe configurar la interrupción para que se active a una velocidad razonable, tal vez 1 kHz.

La configuración incorrecta del reloj puede o no ser tu problema, pero en realidad es un primer paso obligatorio para depurar tales problemas. Muchos procesadores ARM tienen arranques bastante complicados que implican cambiar los modos de reloj cuando el reloj intenta hacer algo pero no puede.

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas