¿Las bibliotecas CMSIS también manejan registros GPIO?

1

Actualmente estoy explorando la programación integrada con procesadores ARM. Mi clase de sistemas incorporados nos tiene programando en un Atmel SAMD20 (Cortex M0 +). Nuestro manual de laboratorio explica en detalle cómo utilizar una biblioteca Atmel para acceder a los registros en el procesador para controlar los pines GPIO.

Lo que he estado tratando de aprender en mi tiempo libre es cómo ponerme en marcha con un microcontrolador diferente, sabiendo que el código será algo diferente. Leí sobre CMSIS, que parece ser una forma conveniente de comenzar a programar en nuevos microcontroladores utilizando el mismo núcleo ARM. Sin embargo, diferentes proveedores de silicio tendrán un número diferente de puertos / periféricos GPIO conectados al microcontrolador. ¿Cómo puede CMSIS mantener la coherencia entre estos puertos GPIO cuando son diferentes entre diferentes chips? ¿O es que CMSIS no maneja los puertos GPIO y solo las cosas relacionadas con ARM Core?

Si este último es el caso, ¿significa esto que debo consultar las hojas de datos del proveedor para saber cómo codificar un microcontrolador específico? Estoy viendo los microcontroladores STM32 en este momento y tengo problemas para localizar cualquier cosa que documente sus archivos de encabezado. Estoy un poco perdido y abrumado en este momento, por lo que cualquier consejo y dirección sería apreciado.

    
pregunta Sam D20

2 respuestas

1

Como dice @Arsenal, el CMSIS solo maneja la funcionalidad principal de ARM. El GPIO es implementado por los proveedores específicos de microcontroladores.

Los microcontroladores STM32 tienen bastante buena documentación. ST ofrece algunas opciones para archivos de encabezado de dispositivos, encabezados CMSIS, capas de abstracción, etc.

Recomiendo descargar las bibliotecas periféricas estándar de ST. El SPL para el STM32F10x, por ejemplo, se puede encontrar aquí . Incluye un documento grande, creado por Doxygen, vinculado que cubre sus archivos de encabezado, y también muchas piezas de código de ejemplo.

Debería explicar que el SPL es la "forma antigua" de hacer esto. Es bastante ligero y solo realiza funciones básicas para usar el hardware.

Recientemente, ST está empujando a los usuarios hacia su paquete de desarrollo de firmware STM32Cube en lugar de SPL. No solo tiene archivos de cabecera y funciones básicas, sino que también incluye soporte USB, módulos gráficos, etc. Crea mucho código para usted.

Algunas personas lo aman; algunos obstinadamente siguen usando el SPL. (Soy uno de los testarudos). Si lo desea, puede encontrar STM32Cube (para los STM32F1) aquí .

    
respondido por el bitsmack
4

No. GPIO es un periférico externo al núcleo y, como tal, no tiene un diseño o especificación de registro estandarizado. CMSIS solo maneja los periféricos centrales y centrales que están estandarizados por ARM.

Por lo general (en estos días) los proveedores proporcionan una capa de abstracción de hardware específica para sus modelos.

Para el STM32, ST proporciona el Entorno de cubo . Realmente no puedo decirle mucho al respecto porque no lo usamos en nuestros productos, así que aún no tuve tiempo para jugar con él.

Si recorres la ruta que hicimos (simple, propia HAL), debes consultar el manual de referencia de tu dispositivo específico, la hoja de erratas para decirte si necesitas manejar algunos errores de hardware en el software y la hoja de datos para las asignaciones de pines y otros datos eléctricos.

Los encabezados de los periféricos a menudo son proporcionados por la compañía del compilador y no por el fabricante del chip (o al menos no lo notan porque vienen con el compilador). Por lo general, los encabezados siguen de cerca el esquema de denominación del manual de referencia. Algunos usan una estructura para un periférico, otros definen cada registro como propio. Los bits también suelen estar predefinidos, por lo que puede escribir código legible sin cambiar los bits como locos.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas