Operácie

MIPS Úvodné cvičenie: Rozdiel medzi revíziami

Z SensorWiki

(AVR Assembler)
(AVR Assembler)
Riadok 37: Riadok 37:
  
 
<source lang='asm'>
 
<source lang='asm'>
; .equiv temp, 16
 
;    .equ PORTB = 0x05
 
;    .equ DDRB = 0x04
 
; upload:
 
; C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:C:\Users\Richard\AppData\Local\Temp\arduino_build_576680/Blink.ino.hex:i
 
; preklad
 
; avr-as asm00.asm
 
; vypis vysledku
 
; avr-objdump -d a.out
 
; a potom uz radsej to iste v avr studio ale mozno este skusime vyrobit .hex a potom to tam avrdude nahrat
 
 
.text
 
.text
START: SBI 0x04,5      ; DDRB.5 = 1 (t.j. Output)                            ; 1 SC
+
START: SBI 0x04,5      ; DDRB.5 = 1 (t.j. Output)                            ; 1 SC
LOOP:
+
LOOP: SBI 0x05,5      ; PORTB.5 = 1 (t.j. High, rozsviet LED)              ; 2 SC
SBI 0x05,5      ; PORTB.5 = 1 (t.j. High, rozsviet LED)              ; 2 SC
 
 
CBI 0x05,5      ; PORTB.5 = 0 (t.j. Low, zhasni LED)                  ; 2 SC
 
CBI 0x05,5      ; PORTB.5 = 0 (t.j. Low, zhasni LED)                  ; 2 SC
 
RJMP LOOP                                                            ; 2 SC
 
RJMP LOOP                                                            ; 2 SC
+
.end ; koniec
ldi r16, 0xCC  ; konfiguracia Portu B DDR = 1111 1111 - vsetko su vystupy
 
out 0x04, r16  ;
 
ldi r16, 0x80  ; rozsvietime LED na najvyssom bite, PORTB = 1000 0000
 
out 0x05, r16  ;
 
rjmp LOOP ; dokola
 
.end
 
 
; koniec
 
 
</source>
 
</source>
  

Verzia zo dňa a času 17:06, 9. január 2021

Cieľom tohoto cvičenia je zistiť, či máte pripravené všetky potrebné nástroje na prácu a otestovať ich.

Arduino

Hoci Arduino nebudeme poižívať bežne, jeho veľkou výhodou je, že to je veľmi rozšírený a preto aj dobre otestovaný systém. To znamená, že po nainštalovaní je všetko pripravené a malo by fungovať na prvý raz.

  1. Stiahnite a naintalujte si najnovšiu verziu prostredia Arduino ([https://www.arduino.cc/ arduino.cc)
  2. Priamo z prostredia si otvorte príklad Blink (File -> Examples -> 01. Basic -> Blink)
  3. Zmeňte parameter funkcie delay z hodnoty 1000 na 200
  4. Nastavte správny typ vašej vývojovej dosky (Tools -> Board -> Arduino AVR Boards -> Arduino Uno / alebo Arduino Nano)
  5. Nastavte správne číslo portu ku ktorému je doska pripojená (Tools -> Port -> ComX)
  6. Skompilujte program a nahrajte ho do dosky (Sketch -> Upload) a vizuálne skontrolujte či je všetko tak ako má byť.

Úlohy:

  • Na základe informácií z prednášky skúste porozmýšľať, na čo slúži príkaz pinMode(13, OUTPUT)? Vedeli by ste povedať, čo a kde nastavuje? A čo digitalWrite(13, HIGH)
  • Ako najrýchlejšie viete blikať LEDkou? (t.j. aký najkratší impulz viete vygenerovať na výstupe)
  • Sledujte na osciloskope [2] priebeh signálov na výstupe

Poznámky:

  • Hodnotu delay meníme preto, lebo tento základný testovací program býva na doske často nahratý už od výrobcu, takže priamo po pripojení k USB sa LED dióda rozbliká s periódou 2sekundy. Zmenou hodnoty sa ubezpečíme, že skutočne funguje celý vývojový cyklus od prekladu cez linkovanie až po nahrávanie do procesora.
  • Najmä čínske klony Arduino Nano majú v sebe nahratú staršiu verziu bootloaderu, preto treba vybrať z menu Tools -> Procesor -> ATmega328 Old Bootloader


AVR Studio

Zo stránky https://www.microchip.com/mplab/avr-support/avr-and-sam-downloads-archive si nainštalujte niektorú verziu vývojového prostredia

  • AVR Studio 5.1 je vhodný kompromis medzi veľkosťou a aktuálnosťou
  • Najnovšia verzia Atmel Studio 7 je pre naše účely zbytočne nafúknutá a nebudeme potrebovať podporu pre všetky procesory, ktoré ponúka
  • Staršia verzia AVR Studio 4 je oproti v5 naozaj malá a jednoduchá, ale treba si k nej doinštalovať zvlášť kompilátor avr-gcc, bez neho vie prostredie prekladať len z assembleru. Preto si predtým nainštalujte samostatný kompilátor WinAVR

AVR Assembler

Pre prvé pokusy si skúsime prácu len s assemblerom.

V ľubovoľnom programátorskom editore napíšte nasledovný program a uložte si ho do C:|Documents pod názvom program01.asm

		.text
START:		SBI 0x04,5      ; DDRB.5 = 1 (t.j. Output)                            ; 1 SC
LOOP:		SBI 0x05,5      ; PORTB.5 = 1 (t.j. High, rozsviet LED)               ; 2 SC
		CBI 0x05,5      ; PORTB.5 = 0 (t.j. Low, zhasni LED)                  ; 2 SC
		RJMP LOOP                                                             ; 2 SC
		.end		; koniec


Pri inštalácii AVR Studio 5 sa vám v zozname programov objavila ikonka AVR Studio Command Prompt ak tam nie je, spustite ručne tento program

C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\application\StudioCommandPrompt.exe

v najnovšej verzii ho nájdete tu

C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\StudioCommandPrompt.exe


Z príkazového riadku program preložíme (prípadne aj s --no-warn)

avr-as -mmcu=atmega328p -o program01.elf program01.asm

a skontrolujeme výsledok prekladu

avr-objdump -d program01.elf

vidno, že tu ešte kompilátor nevie presne kam tento kód príde, preto je .rjmp .+0 a tak musíme spustiť ešte linker

avr-ld program01.elf -o program01.out

a znova skontrolujeme výsledok prekladu

avr-objdump -d aprogram01.out

vyrobíme ešte .hex verziu pre programátor

avr-objcopy -O ihex program01.out program01.hex

a pošleme program do mikroprocesora

"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude.exe" -C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:C:\Users\YourName\Documents\program01.hex:i

Ak by sme niekedy potrebovali disassembler, tak pre uplnost

avr-objdump -m avr -D program01.hex

Knižnica

[1.] Datasheet obvodu Atmel Microchip ATmega328P
[2.] James Lewis: Benchmarking Arduino’s digitalWrite() with a Logic Analyzer
[3.] AVR035: Efficient C Coding for AVR. Application note.