Perguntas frequentes do Guia de desenvolvimento do sistema operacional Cambridge University Raspberry Pi

9

Sou desenvolvedor de aplicativos de alto nível (C #, python) e gostaria de sujar as mãos com o desenvolvimento de aplicativos embarcados de baixo nível. A Universidade de Cambridge publicou uma série de tutoriais ensinando como criar um sistema operacional para o Raspberry Pi chamado Baking Pi. Pretendi postar minha pergunta sobre este tutorial aqui e atualizar as respostas à medida que avanças. Talvez até poste alguns pontos que eu mesmo descobri.

Então, eu tenho acompanhado a lição 1 e já estou confuso. Aqui está o link da página .

A primeira parte do tutorial diz que precisamos (presumo) ativar o controlador GPIO escrevendo o valor 0x20200000 para registrar r0. Não consigo encontrar essas informações relevantes em nenhum lugar da folha de dados. ( link ). Eu olhei para a seção GPIO, mas não vi nenhuma indicação de 16 registros ou r0. Onde esta informação está?

ATUALIZAR

Primeiro de tudo, o tutorial fala sobre como ativar o LED OK, que é o LED de status. Você pode estar se perguntando onde, no Manual, o GPIO 16 está conectado ao LED OK. Não vai. Você precisa olhar para o Raspberry Schematics e descobrir a qual GPIO o status_led está conectado. Aqui está o link dos esquemas. Página 2, Bloco BCM2835.

Portanto, o objetivo é selecionar o pino GPIO16. (mais atualizações por vir ...)

ArmenB
fonte

Respostas:

5

Aqui estão as informações relevantes nesse tutorial:

Os endereços nos computadores são apenas números e, portanto, o número 0x20200000 é o endereço do controlador GPIO. Esta é apenas uma decisão de projeto tomada pelos fabricantes, eles poderiam ter usado qualquer outro endereço (desde que não conflitasse com mais nada). Eu conheço esse endereço apenas porque procurei em um manual [3] , não há um sistema específico para os endereços (além de todos serem grandes números redondos em hexadecimal).

r0é simplesmente uma seção de memória no processador onde você pode armazenar qualquer informação que desejar; estes são chamados registros de uso geral. Escrevemos o local do controlador GPIO nesse local para que possamos reutilizá-lo mais tarde, como usualmente usaria uma variável na programação de alto nível.

Acho que o valor 0x20200000 realmente se refere ao primeiro local da memória na tabela na página 90. Você notará que, antes de escrevermos no registro, aumentamos em 4, fornecendo-nos Function Select 1(consulte a tabela) o registro que controla alguns pinos , incluindo o que queremos escrever.

Isso ajuda em tudo?

Jivings
fonte
Minha pergunta é onde esta informação pertence?
ArmenB
@ArmenB .: Seção 6.1, Página 90
Jivings 5/12/12
O documento diz "O GPIO possui 41 registros". onde o tutorial diz 16. Não há indicação do registro r0 nessa seção, nem o número 0x20200000 para habilitá-lo.
ArmenB
@ArmenB .: Armen, desculpe, vou entrar em mais detalhes.
Jivings
3

Obrigado a Jivings e emcconville por responderem à pergunta.

No pdf da folha de dados, na página 6, seção endereço físico do braço , há uma seção que diz

Os endereços físicos variam de 0x20000000 a 0x20FFFFFF para periféricos. Os endereços de barramento para periféricos são configurados para mapear no intervalo de endereços de barramento periférico, começando em 0x7E000000. Assim, um periférico anunciado aqui no endereço de barramento 0x7Ennnnnn está disponível no endereço físico 0x20nnnnnn.

Indo para a página 90, a primeira linha da tabela declara:

0x7E200000 GPFSEL0 GPIO Function Select 0 32 R / W

portanto, o 0x7E200000 é convertido no endereço físico 0x20200000, que é o bit 0 de seleção da função GPIO.

Quanto ao r0, existem 16 registradores de uso geral no ARM, que podemos usar para armazenar números, e é por isso que no tutorial ele está escolhendo o r0, já que é o primeiro registro gratuito.

ArmenB
fonte
Fico feliz em ajudar e com uma boa resposta pessoal, isso resume bem os outros dois.
Jivings
Não, obrigado por reservar um tempo para responder. Eu postei isso como um wiki da comunidade para que outras pessoas possam editar / corrigir / concluir a postagem.
ArmenB
1

O registo r0através r12são de uso geral. Naturalmente, é mais fácil começar r0. Como Jivings apontou, o manual lista cada endereço e declara:

Os endereços físicos variam de 0x20000000 a 0x20FFFFFF para periféricos.

emcconville
fonte
Não consigo escolher duas respostas corretas! isso é coxo. Corrija este site ... Obrigado pela sua contribuição. Finalmente entendi o significado de RTFM.
ArmenB