Configuración de registros en ARM Cortex M3

He estado aprendiendo a programar el microcontrolador LPC2148(ARM7), y hoy conseguí una placa LPC1768(Cortex M3). Al consultar su manual, traté de hacer un programa de parpadeo de LED y lo hice de la siguiente manera, siguiendo los mismos métodos que LPC2148 (configurando el bloque de conexión de pines y los registros GPIO)

#include <LPC17xx.H>
int main()
{
  int i;
  PINSEL0 = 0;
  FIO0DIR = 0XFFFFFFFF;

  while(1)
  {
     FIO0SET = 0XFFFFFFFF;
     for(i=0; i<100000; i++);
     FIO0CLR = 0XFFFFFFFF;
     for(i=0; i<100000; i++);
  }
}

Pero obtuve un error como PINSEL, FI0SET ... como indefinido.

después de referir algunos códigos de ejemplo, tengo que usar

LPC_PINCON->PINSEL0 = 0X00000000;
LPC_GPIO0->FIODIR 

¿De dónde viene este LPC_GPIO y LPC_PINCON? Según un tutorial en línea

Según la convención CMSIS, los registros que vimos se agrupan en estructuras. LPC_GPIOx se define como un puntero a esta estructura en el encabezado LPC17xx.h. Estos registros se definen como miembros de esta estructura. Por lo tanto, para usar cualquier registro, por ejemplo, FIODIR, debemos usar el operador de flecha "->" para quitar la referencia a los miembros de la estructura (dado que la estructura en sí es un puntero) para acceder al registro de la siguiente manera: LPC_GPIO0->FIODIR = algún valor .

No pude encontrar ninguna referencia a esto en el manual.

¿Hay alguna documentación disponible?

Debo asumir que hay un 'incluir' en alguna parte; de ​​lo contrario, ninguno de los códigos debería funcionar.
#incluir <LPC17xx.H>, editado
Aquí hay dos cosas distintas: los periféricos del chip y las fuentes de software base que hacen cosas como definir registros. El uso de este último es opcional: si lo va a usar, debe encontrar el manual del software (o leer los archivos de encabezado y los ejemplos), así como el manual del chip.
Encontré el enlace de GitHub si alguien estaba interesado en mirar la LPC17xx.hbiblioteca. Por favor, dígame si este es el autor correcto de la biblioteca.
El enlace encontró esto en el sitio de Keil. Al final, proporciona declaraciones periféricas.
^^^ Publicaste el mismo código pero desde un enlace diferente.

Respuestas (2)

Mi experiencia es que muchos fabricantes tienen manuales malos o inexistentes para sus archivos de inclusión. A menudo tienen una plétora de programas de ejemplo que usan esas estructuras.

Las GUI modernas tienen soporte para mostrar una lista emergente de todas las subestructuras. Debajo de una captura de pantalla de ejemplo.

ingrese la descripción de la imagen aquí

Pero eso no ayuda a menos que conozcas las 'runas mágicas de inicio' (PIOA en este caso). Incluso entonces es posible que no sepa qué hace "PIO_ABCDSR". (Vea mi comentario sobre las hojas de datos más adelante) Últimamente he estado mirando más y más los archivos incluidos. Al principio cuesta un poco localizar los archivos apropiados, pero al final descubrí que es más rápido que buscar en Internet, los programas de ejemplo o los manuales.

Tengo la hoja de datos junto a mi teclado, ya que los nombres de registro y de campo a menudo (¡pero no siempre!) se corresponden con los nombres utilizados en los archivos de encabezado .

La documentación relevante para esta convención es la documentación de Arm CMSIS-Core, Específicamente Acceso periférico , también puede consultar el Archivo de encabezado del dispositivo . Sin embargo, creo que estos están un poco más dirigidos a los proveedores de dispositivos que a los usuarios finales.