This is an old revision of the document!


Laboratorul 07 - GPIO 2: Intrări

3. TL;DR

Pentru a modifica valoarea unui registru I/O putem sa folosim:

  • instructiunea OUT cu masca de biti:
 LDI R16, 7 
 OUT 0x01, R16 ; DDRA = 00001111
  • instructiunile SBI si CBI pentru a modifica un singur bit
 LDI R16 0 
 OUT 0x01, R16 ; DDRA = 00000000
 SBI 0x01, 5   ; DDRA = 00100000
 SBI 0x01, 4   ; DDRA = 00110000
 CBI 0x01, 5   ; DDRA = 00010000

4. Exerciții

Task 01 (4p) Extindeți modulul gpio astfel încât să suporte și intrări și ieșiri. Urmăriți comentariile marcate cu TODO 1 din gpio.v și cpu.v.

Task 02 (2p) Decodificați instrucțiunile sbi și cbi și completați logica necesară execuției lor. Urmăriți comentariile marcate cu TODO 2 din signal_generation_unit.v, decode_unit.v și control_unit.v.

Task 03 (1p) Scrieți un program care setează portul A ca ieșire, portul B ca intrare, apoi, într-o buclă, citește valoarea de pe portul B și o scrie pe portul A.

Task 04 (1p) Urcați programul de la punctul precedent pe placa de dezvoltare. Portul A va fi mapat pe cele 8 led-uri astfel: PA0 - LED0, …, PA7 - LED7. Portul B va fi mapat pe cele 8 switch-uri astfel: PB0 - SW0, …, PB7 - SW7.

Task 05 (2p) Scrieți un program care să aprindă led-urile în următoarea secvență folosind instructiunle SBI si CBI. Încărcați-l pe placa de dezvoltare:

  t0   *------*
  t1   -*----*-
  t2   --*--*--
  t3   ---**---
  t4   ---**---
  t5   --*--*--
  t6   -*----*-
  t7   *------*

Task 06 (Bonus 2p) Modificați programul de la punctul 5 astfel încât viteza de derulare a secvenței să fie controlată prin intermediul portului B. Încărcați-l pe placa de dezvoltare.

5. Resurse

cn2/laboratoare/07.1574053654.txt.gz · Last modified: 2019/11/18 07:07 by tudor.visan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0