Assemblea sull'Arduino: registri IO


13

Domanda: Quali registri devo usare per accedere all'IO su Arduino Uno quando utilizzo assembly per la programmazione?

Background: ero interessato a mettere in pratica le mie abilità linguistiche di assemblaggio su Arduino (ho pensato che sarebbe stato più facile accendere / spegnere i LED piuttosto che preoccuparmi dell'IO della console). Da una ricerca preliminare , ho scoperto che la toolchain AVR può essere utilizzata per programmare Arduino. Tuttavia, non so come trovare i registri corrispondenti per i pin IO.

Risposte:


8

I fogli dati per i microcontrollori AVR sono ragionevolmente buoni da leggere. Basta Google per il controller esatto sul tuo Arduino (ad es. ATmege328) e trovare la scheda tecnica "Completa" sul sito Web atmel.com . Non scaricare il "Riepilogo", non include molte informazioni. Scarica la scheda tecnica da atmel.com, l'unica posizione con la documentazione più recente.

Esistono tre registri utilizzati nell'IO di base (consultare il capitolo "Porte I / O"):

Dove n è un identificatore di porta, una lettera che varia da A, B, C, ... a seconda del numero di pin IO del controller. Ogni bit in ciascun registro rappresenta un singolo pin GPIO (sì, per comprendere appieno ciò sono necessarie alcune conoscenze di base sul binario).

  • DDR n , Data Direction Register: fondamentalmente configura un pin per input (0) o output (1).
  • PORT n , Port n Registro dati: quando un pin è impostato come output, il bit relativo commuta il pin di output alto (1) o basso (0). Se configurato come input, questo abilita una resistenza pull-up debole sul pin di uscita.
  • PIN n , Port n Registro input: utilizzare questo registro per leggere il livello corrente su un pin configurato come input.

3
Questo. Step 1: Smetti di pensarlo come un arduino. Non è. È un MCU ATmega su un PCB. 2. Leggi la scheda tecnica. 3. No davvero, leggi la scheda tecnica .
Connor Wolf,

Ah ... è esattamente quello di cui avevo bisogno. Penso di aver passato così tanto tempo a cercare tutorial mirati su Arduino, che mi ero dimenticato di programmare semplicemente un controller AVR e potevo usare il suo foglio dati.
apnorton

1

Dai un'occhiata a: http://arduino.cc/en/Reference/PortManipulation

Inoltre: http://arduino.cc/en/Hacking/PinMapping168

Per quanto riguarda le altre porte e pin, controlla la scheda tecnica per il tuo controller, sono davvero utili per le persone che possono capirli! :)


3
Le risposte ai soli link non sono utili per il sito, poiché non stiamo cercando di creare un repository di link. Inoltre, la sola risposta al link è inutile se il link dovesse scendere in futuro. Sarebbe meglio sintetizzare o parafrasare il contenuto all'interno della risposta stessa in modo che gli utenti possano trovare ciò di cui hanno bisogno qui o ottenere almeno un contesto sufficiente per poter trovare soluzioni da soli.
asheeshr,
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.