Como soy nuevo en la programación de microcontroladores procedentes del mundo C ++, he estado estudiando cómo hacer que el código se ejecute en una placa de microcontroladores para trabajar con muchas entradas y salidas.
Para el primer proyecto, estoy trabajando en un chip ARM9 (STR912FAW44) con Rowley Crossworks para que ARM programe mi placa. Entiendo que tengo que configurar el puerto 7.3 en modo de salida para conducir un LED. También entiendo que el puerto GPIO tiene múltiples modos en este pin, por defecto a GP Input. También sé que la configuración de la salida 1 alternativa es la salida GP.
Ahora el manual para el chip dice:
Hay hasta 80 pines GPIO disponibles en 10 puertos de E / S para dispositivos de 128 pines y 144 bolas, y hasta 40 pines GPIO en 5 puertos de E / S para dispositivos de 80 pines. Cada pin GPIO por defecto (durante y justo después de una condición de reinicio) está en modo de entrada de alta impedancia, y algunos GPIO Los pines se enrutan adicionalmente a ciertas entradas de funciones periféricas. El firmware de la CPU puede inicializar los pines GPIO para tener funciones de entrada o salida alternativas como se indica en la Tabla 8.
Esto suena maravilloso. La pregunta es ¿cómo puedo hacer que el puerto acepte una función diferente?
Tengo un código de muestra para una placa similar, pero diferente, donde el LED (el más fácil de probar) está en el puerto 9, pero esto no funciona cuando se ajusta al puerto 7 como esperaba.
Aquí está la muestra:
void
ctl_board_init(void)
{
// leds are connected to GPIO9.0-GPIO9.3
SCU_PCGR1 |= SCU_PCGR1_GPIO9_MASK; // turn on GPIO9
SCU_PRR1 |= SCU_PRR1_RST_GPIO9_MASK;
GPIO9_DIR = 0x01; // select output direction
}
void
ctl_board_on_button_pressed(CTL_ISR_FN_t buttonFn)
{
}
void
ctl_board_set_leds(unsigned v)
{
*((&GPIO9_DATA)+(0x01<<2)) = v ? 0x01 : 0;
}
Las macros provienen de archivos de encabezado, pero ¿alguien puede ayudarme a encontrar una referencia a los bits que debo configurar para manejar el puerto GPIO 7.3 como salida?