Cambridge University Raspberry Pi Guía de desarrollo del sistema operativo Preguntas

9

Soy un desarrollador de aplicaciones de alto nivel (C #, python) y me gustaría ensuciarme las manos con el desarrollo de aplicaciones integradas de bajo nivel. La Universidad de Cambridge ha publicado una serie de tutoriales que le enseñan cómo crear un sistema operativo para Raspberry Pi llamado Baking Pi. Tengo la intención de publicar mi pregunta sobre este tutorial aquí y actualizar las respuestas a medida que avance. Tal vez incluso publique algunos puntos que descubrí yo mismo.

Así que he seguido la lección 1 y ya estoy confundido. Aquí está el enlace de la página .

La primera parte del tutorial dice que necesitamos (supongo) encender el controlador GPIO escribiendo el valor 0x20200000 para registrar r0. No puedo encontrar esa información relevante en ninguna parte de la hoja de datos. ( enlace ) Miré la sección GPIO pero no vi ninguna indicación de 16 registros o r0. ¿Dónde está esta información?

ACTUALIZAR

En primer lugar, el tutorial habla sobre encender el LED OK, que es el LED de estado. Quizás se pregunte en qué parte del Manual dice que GPIO 16 está conectado al LED OK. No lo hará. Debe mirar los esquemas de frambuesa y encontrar a qué GPIO está conectado el status_led. Aquí está el enlace de los esquemas. Página 2, Bloque BCM2835.

Entonces, el objetivo es seleccionar el pin GPIO16. (más actualizaciones por venir ...)

ArmenB
fuente

Respuestas:

5

Aquí está la información relevante en ese tutorial:

Las direcciones en las computadoras son solo números, por lo que el número 0x20200000 es la dirección del controlador GPIO. Esta es solo una decisión de diseño tomada por los fabricantes, podrían haber utilizado cualquier otra dirección (siempre que no entrara en conflicto con nada más). Conozco esta dirección solo porque la busqué en un manual [3] , no hay un sistema particular para las direcciones (aparte de que todas son números redondos grandes en hexadecimal).

r0es simplemente una sección de memoria en el procesador donde puede almacenar la información que desee; Estos se denominan registros de propósito general. Escribimos la ubicación del controlador GPIO en esta ubicación para que podamos reutilizarlo más tarde, como lo haríamos normalmente usando una variable en la programación de alto nivel.

Creo que el valor 0x20200000 en realidad se refiere a la primera ubicación de memoria en la tabla en la página 90. Notarás que antes de escribir en el registro lo incrementamos en 4, dándonos Function Select 1(ver tabla), el registro que controla algunos pines , incluido el que queremos escribir.

¿Eso ayuda en absoluto?

Jivings
fuente
Mi pregunta es ¿en qué parte de la hoja de datos pertenece esta información?
ArmenB
@ArmenB .: Sección 6.1, Página 90
Jivings
El documento dice "El GPIO tiene 41 registros". donde el tutorial dice 16. No hay indicación de registro r0 en esa sección, ni el número 0x20200000 para habilitarlo.
ArmenB
@ArmenB .: Lo siento, Armen, voy a entrar un poco más en detalles.
Jivings
3

Gracias a Jivings y emcconville por responder la pregunta.

En la hoja de datos pdf, página 6 sección ARM physicall address , hay una sección que dice

Las direcciones físicas varían de 0x20000000 a 0x20FFFFFF para periféricos. Las direcciones de bus para periféricos están configuradas para correlacionarse en el rango de direcciones de bus periférico a partir de 0x7E000000. Por lo tanto, un periférico anunciado aquí en la dirección del bus 0x7Ennnnnn está disponible en la dirección física 0x20nnnnnn.

Al ir a la página 90, la primera fila de la tabla dice:

0x7E200000 GPFSEL0 GPIO Función Seleccionar 0 32 R / W

entonces el 0x7E200000 se traduce a la dirección física 0x20200000, que es la función GPIO de selección de 0 bits.

En cuanto a r0, hay 16 registros de propósito general en el ARM, que podemos usar para almacenar números, y es por eso que en el tutorial está eligiendo r0 ya que es el primer registro gratuito.

ArmenB
fuente
Me alegro de ayudar, y una buena respuesta, esto resume muy bien los otros dos.
Jivings
No, gracias por tomarse el tiempo para responder. Publiqué esto como un wiki de la comunidad para que otros puedan editar / arreglar / completar la publicación.
ArmenB
1

El registro a r0través r12son de propósito general. Naturalmente, es más fácil comenzar r0. Como Jivings señaló, el manual enumera cada dirección y establece:

Las direcciones físicas varían de 0x20000000 a 0x20FFFFFF para periféricos.

Emcconville
fuente
¡No puedo elegir dos respuestas correctas! esto apesta. Por favor arregle este sitio web ... Gracias por su aporte. Finalmente entendí el significado de RTFM.
ArmenB