Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

prompt-arm-bbb

Projeto final desenvolvido para a disciplina de Organização de Computadores e Linguagens de Montagem II do curso de Engenharia de Computação da UFC Quixadá.

Este repositório contém a implementação bare-metal de um Interpretador de Comandos (CLI) em linguagem Assembly para a placa BeagleBone Black (arquitetura ARM Cortex-A8). O sistema comunica-se via terminal serial (UART0), aguarda a entrada de comandos pelo usuário e executa ações diretamente no hardware, explorando a manipulação de registradores e o tratamento de interrupções.

Comportamento do Sistema e Demonstração

Ao iniciar a placa, o firmware opera com o seguinte fluxo de execução:

  1. Inicialização (Boot): Configura o hardware (GPIO, UART0, Timers) e exibe imediatamente a mensagem de boas-vindas ("Hello world!!! Projeto Bare Metal BBB") no terminal. Em seguida, testa uma interrupção de software (SWI), imprimindo seu número de chamada.
  2. Segundo Plano (Main Loop): O processador principal entra em um laço contínuo que pisca os LEDs internos de usuário (USR0 a USR3) da BeagleBone Black a cada 1 segundo, demonstrando que o sistema está ativo.
  3. CLI Baseada em Interrupções: Enquanto a rotina principal roda, o sistema utiliza interrupções (IRQ) na UART0 para ler comandos digitados. O terminal ecoa os caracteres em tempo real e apresenta o prompt bbb> . Quando um comando é enviado (Enter), o interpretador avalia o buffer e executa a ação correspondente sem travar a rotina dos LEDs (a menos que seja um comando de bloqueio como o goto).

Vídeo de Funcionamento

🔗 Clique aqui para assistir ao vídeo de demonstração do projeto rodando na placa

Funcionalidades e Comandos Suportados

O interpretador de comandos reconhece as seguintes entradas no terminal:

  • hello: Imprime a mensagem de boas-vindas do sistema.
  • led on: Acende o LED configurado (USR0) da placa.
  • led off: Apaga o LED da placa.
  • blink: Inicia uma sequência de acendimento e apagamento do LED.
  • time: Exibe a hora atual do sistema (implementação via RTC).
  • set time: Ajusta a hora do sistema para um valor padrão de inicialização.
  • cache: Invalida a memória de instruções (I-Cache) comunicando-se com o coprocessador CP15.
  • goto: Executa um salto condicional para o endereço-base de memória (0x80000000).
  • reset: Realiza um hard reset na placa manipulando o Watchdog Timer (WDT).

Estrutura do Repositório

O código fonte foi completamente modularizado para separar responsabilidades lógicas e acesso a periféricos:

  • bin/: Diretório de saída dos binários finais gerados (.bin, .elf).
  • obj/: Diretório contendo os arquivos objetos (.o) gerados durante a compilação.
  • src/: Códigos-fonte em Assembly ARM (.s).
    • uart.s: Lógica de configuração da UART0, buffer de recepção/transmissão e a máquina de estados do CLI.
    • gpio.s: Manipulação direta dos registradores para controle do GPIO e LEDs internos.
    • wdt.s: Rotinas de desativação e reset utilizando o Watchdog Timer.
    • rtc.s: Configuração e stubs do Real-Time Clock.
    • cp15.s: Manipulação do vetor VBAR e gerenciamento de cache no coprocessador CP15.
    • utils.s: Utilitários globais como delays, memory dumps, funções matemáticas e conversão (ASCII/HEX).
  • memmap.ld: Script do Linker que mapeia as seções do código para a RAM (0x80000000), alinhando-se à carga do U-Boot.
  • Makefile: Script para automação da montagem (Assembler) e Linkagem via Cross-Compiler.

Como Compilar e Executar

Para compilar o projeto, certifique-se de ter a toolchain arm-none-eabi- instalada no seu ambiente Linux.

  1. Clone este repositório:

    git clone https://github.com/sua-conta/prompt-arm-bbb.git
    cd prompt-arm-bbb
  2. Compile os módulos utilizando o Makefile:

    make
  3. O processo irá gerar o arquivo de imagem baremetal.bin dentro da pasta bin/, que pode ser transferido via protocolo TFTP para a BeagleBone Black através do U-Boot.

Autoria

About

Projeto final desenvolvido para a disciplina de Organização de Computadores e Linguagens de Montagem II do curso de Engenharia de Computação da UFC Quixadá.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages