From e2003fcc93d8cc25a85e55f12ef1044ca3a3bd1d Mon Sep 17 00:00:00 2001 From: sejo Date: Thu, 20 May 2021 17:58:00 -0500 Subject: acomodando sitio --- src/avr-asm.gmo | 319 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 319 insertions(+) create mode 100644 src/avr-asm.gmo (limited to 'src/avr-asm.gmo') diff --git a/src/avr-asm.gmo b/src/avr-asm.gmo new file mode 100644 index 0000000..dbe5869 --- /dev/null +++ b/src/avr-asm.gmo @@ -0,0 +1,319 @@ +# avr-asm + +explorando programación de microcontroladores avr a través de asm, en attiny85. {s-camino} + +# attiny85 + +## diagrama de pines + +```diagrama de pines + ┌──────┐ +PB5 │1 8│ VCC +PB3 │2 7│ PB2 +PB4 │3 6│ PB1 +GND │4 5│ PB0 + └──────┘ +``` + +además, cada pin es: + +* 1: PB5 / PCINT5 / ~RESET / ADC0 / dW +* 2: PB3 / PCINT3 / XTAL1 / CLKI / ~OC1B / ADC3 +* 3: PB4 / PCINT4 / XTAL2 / CLKO / OC1B / ADC2 +* 5: PB0 / MOSI / DI / SDA / AIN0 / OC0A / ~OC1A / AREF / PCINT0 +* 6: PB1 / MISO / DO / AIN1 / OC0B / OC1A / PCINT1 +* 7: PB2 / SCK / USCK / SCL / ADC1 / T0 / INT0 / PCINT2 + +para flashear nos interesan los pines desde el punto de vista de SPI: + +```pines spi + ┌──────┐ +~RESET │1 8│ VCC + │2 7│ SCK + │3 6│ MISO +GND │4 5│ MOSI + └──────┘ +``` + +## programador + +=> https://www.fischl.de/usbasp/ USBasp - USB programmer for Atmel AVR controllers (web) + +## makefile + +para ensamblar y flashear + +```makefile +# Makefile +# nombre del programa sin .S : +PROG = test +# config hardware +BOARD = attiny85 +PROGRAMMER = usbasp + +# ensambla programa a .hex +hex: + avr-gcc -Os -DF_CPU=8000000 -mmcu=$(BOARD) -c $(PROG).S + avr-ld -o $(PROG).elf $(PROG).o + avr-objcopy $(PROG).elf -O ihex $(PROG).hex + rm $(PROG).o $(PROG).elf + +# flashea +flash: + avrdude -c $(PROGRAMMER) -p $(BOARD) -U flash:w:$(PROG).hex:i + +# lee la memoria flash a read.hex +read: + avrdude -c $(PROGRAMMER) -p $(BOARD) -U flash:r:read.hex:i + +# prueba conexión con programador y micro +test: + avrdude -c $(PROGRAMMER) -p $(BOARD) +``` + + + +# programas + +software experimental, compartido como referencia y sin garantía de ningún tipo :) + + +## test.S + +enciende un el pin PB0 — conecta un led + +``` +; test.S +; enciende un pin +#include +.org 0x0000 + + ldi r17, (1< +; *********************** +; vectores de interrupts: +; *********************** +; Reset +.org 0x0000 + rjmp main + +; *********************** +; Main +; *********************** +.org 0x0010 +main: + ; pin PB0 (OC0A) como pin de salida + ldi r16, (1< +; *********************** +; vectores de interrupts: +; *********************** +; Reset +.org 0x0000 + rjmp main + +; *********************** +; Main +; *********************** +.org 0x0010 +main: + ; pin PB0 (OC0A) como pin de salida + ldi r16, (1< +; *********************** +; vectores de interrupts: +; *********************** +; Reset +.org 0x0000 + rjmp main + +; dirección 0x0003 * 2 +.org 0x0006 + rjmp timer1compareA_isr + +; dirección 0x0004 * 2 +.org 0x0008 + rjmp timer1overflow_isr + +; *********************** +; Main +; *********************** +.org 0x001E +main: + ;---------------------------------- + ; configuración general + ;---------------------------------- + + ; habilita interrupciones + sei + + ; pin PB0 (OC0A) como pin de salida + ldi r16, (1<