This is an old revision of the document!
Pentru a modifica valoarea unui registru I/O putem sa folosim:
LDI R16, 7 OUT 0x01, R16 ; DDRA = 00001111
LDI R16 0 OUT 0x01, R16 ; DDRA = 00000000 SBI 0x01, 5 ; DDRA = 00100000 SBI 0x01, 4 ; DDRA = 00110000 CBI 0x01, 5 ; DDRA = 00010000
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.