GPIO — fra registre til pinner¶
Læringsmål
Etter denne leksjonen skal du kunne konfigurere en GPIO-pinne som inngang eller utgang, forklare pull-up og active-low, og undersøke instruksjonene som genereres for registeroperasjoner.
GPIO er stedet der AVR-programvaren for første gang møter den fysiske verden.
For hver GPIO-port er tre registre grunnmodellen:
DDRx— datretning;PORTx— utgangsverdi eller styring av intern pull-up;PINx— inngangsverdi og, på AVR-er som støtter det, toggle av utgang.
Utgang¶
PB0 som utgang i C:
Samme maskinvare direkte i AVR-assembler:
Bruk cbi for å nullstille utgangen. På ATmega1284P kan PB0 også toggles gjennom PIN-registeret.
Inngang og pull-up¶
En pinne blir inngang når DDR-biten er null. Settes den tilsvarende PORT-biten, aktiveres intern pull-up.
En knapp kobles derfor ofte active-low: sluppet gir 1, trykket gir 0.
Utled det fra kretsen
Dette skal ikke pugges som en universell regel. Tegn kretsen og utled selv hvilket logikknivå som oppstår.
Read-modify-write¶
Et uttrykk som:
er en read-modify-write-operasjon. Undersøk assembleren kompilatoren lager. Avhengig av register, operasjon og optimalisering kan GCC bruke spesialiserte bitinstruksjoner eller en mer generell sekvens.
Prøv selv¶
Bygg både C- og assembler-eksemplene for GPIO, undersøk disassembly, og finn instruksjonene som konfigurerer og endrer GPIO-registrene.
Forventet resultat
I simulator kan du verifisere registerlogikk og instruksjonsflyt. Dette er ikke dokumentasjon på at en fysisk LED, bryter eller pull-up er elektrisk verifisert.
Kvalifikasjonsgrense¶
Q1 verifiserer registerlogikk og instruksjonsflyt. Den automatiserte C/Assembly-proben kontrollerer deterministisk DDRB og PORTB og observerer PINB i simavr + avr-gdb.
Q2 kreves før vi hevder at en ekte LED lyser, en knapp leses elektrisk, pull-up fungerer på kortet eller ekte kontaktsprett er observert.
Sjekk forståelsen¶
- Hvilke roller har DDRx, PORTx og PINx?
- Hvorfor er en knapp med pull-up ofte active-low?
- Hvilke påstander kan Q1 dokumentere, og hvilke krever Q2?