Domande dell'Università di Cambridge Raspberry Pi Guida allo sviluppo del sistema operativo


9

Sono uno sviluppatore di app di alto livello (C #, python) e mi piacerebbe sporcarmi le mani con lo sviluppo di applicazioni integrate di basso livello. La Cambridge University ha pubblicato una serie di tutorial che ti insegnano come creare un sistema operativo per il Raspberry Pi chiamato Baking Pi. Ho intenzione di pubblicare la mia domanda su questo tutorial qui e aggiornare le risposte mentre procedo. Forse anche pubblicare alcuni punti che ho capito da solo.

Quindi ho seguito la lezione 1 e sono già confuso. Ecco il link alla pagina .

La prima parte del tutorial dice che dobbiamo (presumo) accendere il controller GPIO scrivendo il valore 0x20200000 per registrare r0. Non riesco a trovare tali informazioni rilevanti da nessuna parte nella scheda tecnica. ( link ). Ho guardato la sezione GPIO ma non ho visto alcuna indicazione di 16 registri o r0. Dov'è questa informazione?

AGGIORNARE

Prima di tutto, il tutorial parla dell'accensione del LED OK, che è il LED di stato. Potresti chiederti dove nel Manuale si dice che GPIO 16 è collegato al LED OK. Non lo farà. È necessario esaminare gli schemi di Raspberry e scoprire a quale GPIO è connesso lo status_led. Ecco il link gli schemi. Pagina 2, blocco BCM2835.

Quindi l'obiettivo è selezionare il pin GPIO16. (altri aggiornamenti a venire ...)

Risposte:


5

Ecco le informazioni rilevanti in quel tutorial:

Gli indirizzi nei computer sono solo numeri e quindi il numero 0x20200000 è l'indirizzo del controller GPIO. Questa è solo una decisione di progettazione presa dai produttori, che avrebbero potuto usare qualsiasi altro indirizzo (a condizione che non fosse in conflitto con nient'altro). Conosco questo indirizzo solo perché l'ho cercato in un manuale [3] , non esiste un sistema particolare per gli indirizzi (a parte il fatto che sono tutti grandi numeri rotondi in esadecimali).

r0è semplicemente una sezione di memoria del processore in cui è possibile archiviare qualsiasi informazione ti piaccia; questi sono chiamati registri di uso generale. Scriviamo la posizione del controller GPIO in questa posizione in modo da poterlo riutilizzare in un secondo momento, come faremmo normalmente usando una variabile nella programmazione di alto livello.

Penso che il valore 0x20200000 si riferisca effettivamente alla prima posizione di memoria nella tabella a pagina 90. Noterai che prima di scrivere nel registro lo incrementiamo di 4, dandoci Function Select 1(vedi tabella), il registro che controlla alcuni pin , incluso quello a cui vogliamo scrivere.

Questo aiuta a tutti?


La mia domanda è: a che punto sono queste informazioni?
ArmenB,

@ArmenB .: Sezione 6.1, Pagina 90
Jivings,

Il documento dice "Il GPIO ha 41 registri". dove dice il tutorial 16. Non c'è alcuna indicazione del registro r0 in quella sezione, né il numero 0x20200000 per abilitarlo.
ArmenB,

@ArmenB .: Mi dispiace Armen, entrerò in un po 'più in dettaglio.
Jivings,

3

Grazie a Jivings ed emcconville per aver risposto alla domanda.

Nella scheda tecnica pdf, pagina 6 sezione indirizzo fisico ARM , c'è una sezione che dice

Gli indirizzi fisici vanno da 0x20000000 a 0x20FFFFFF per le periferiche. Gli indirizzi del bus per le periferiche sono impostati per mappare sull'intervallo di indirizzi del bus periferico a partire da 0x7E000000. Pertanto, una periferica pubblicizzata qui all'indirizzo del bus 0x7Ennnnnn è disponibile all'indirizzo fisico 0x20nnnnnn.

Andando a pagina 90, la prima riga della tabella indica:

0x7E200000 GPFSEL0 Selezione funzione GPIO 0 32 R / W

quindi 0x7E200000 si traduce nell'indirizzo fisico 0x20200000, che è la funzione GPIO selezionare 0 bit.

Per quanto riguarda r0, ci sono 16 registri di uso generale in ARM, che possiamo usare per memorizzare numeri, ed è per questo che nel tutorial sta scegliendo r0 poiché è il primo registro gratuito.


Sono contento di aiutarti e di avere una bella risposta, riassume bene gli altri due.
Jivings,

No grazie per aver tempo di rispondere. L'ho pubblicato come wiki della community in modo che altri possano modificare / correggere / completare il post.
ArmenB,

1

Il registro r0tramite r12è di uso generale. Naturalmente, è più facile iniziare r0. Come sottolineato da Jivings, il manuale elenca ogni indirizzo e afferma:

Gli indirizzi fisici vanno da 0x20000000 a 0x20FFFFFF per le periferiche.


Non riesco a scegliere due risposte corrette! questo è zoppo. Correggi questo sito Web ... Grazie per il tuo contributo. Finalmente ho capito il significato di RTFM.
ArmenB,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.