refactor: makefile & blink program

This commit is contained in:
Sergey Yarkov 2021-09-26 16:45:17 +03:00
parent 2d18dcd014
commit 514ff44d31
3 changed files with 47 additions and 43 deletions

View File

@ -1,7 +1,13 @@
MCU = t24
SRCFILE = firmware SRCFILE = firmware
TARGET = usbasp
DEVICE = usb
compile: $(SRCFILE).asm build: $(SRCFILE).asm
gavrasm $(SRCFILE) gavrasm $(SRCFILE)
flash:
avrdude -p $(MCU) -c $(TARGET) -P $(DEVICE) -U flash:w:$(SRCFILE).hex:a
clean: clean:
rm -f $(SRCFILE).asm~ $(SRCFILE).hex $(SRCFILE).obj $(SRCFILE).lst $(SRCFILE).cof rm -f $(SRCFILE).asm~ $(SRCFILE).hex $(SRCFILE).obj $(SRCFILE).lst $(SRCFILE).cof

View File

@ -3,16 +3,16 @@
; Description: Blink an led every one second ; Description: Blink an led every one second
; Source code: https://github.com/sergeyyarkov/attiny24a_led-blink-example ; Source code: https://github.com/sergeyyarkov/attiny24a_led-blink-example
; Device: ATtiny24A ; Device: ATtiny24A
; Package: 14-pin-PDIP/SOIC ; Package: 14-pin-PDIP_SOIC
; Assembler: gavrasm v5.0 ; Assembler: gavrasm v5.0
; ;
; Written by Sergey Yarkov 23.09.2021 ; Written by Sergey Yarkov 23.09.2021
.device ATtiny24A .device ATtiny24A ; Setup device name
.list ; Enable listing .list ; Enable listing
.macro init_stack_p ; Setup stack pointer .macro init_stack_p ; Setup stack pointer
ldi @0, low(@1), ldi @0, low(@1)
out SPL, @0 out SPL, @0
.endm .endm
@ -20,7 +20,8 @@
.equ LED_PORT = PORTA ; LED Port .equ LED_PORT = PORTA ; LED Port
.equ LED_PIN = PINA0 ; LED Pin .equ LED_PIN = PINA0 ; LED Pin
.equ iVal = 65000 .equ oVal = 20 ; If set to 0, then this value is decremented to 255
.equ iVal = 10000 ; Value of cycles in inner delay loop
.org 0x00 ; Start program at 0x00 .org 0x00 ; Start program at 0x00
.cseg ; Code segment .cseg ; Code segment
@ -28,45 +29,43 @@
main: ; Start up program main: ; Start up program
init_stack_p r16, RAMEND init_stack_p r16, RAMEND
rcall init_ports ; Initialize MCU ports rcall init_ports ; Initialize MCU ports
rcall delay_loop_reset rcall _r_inner_delay_loop ; Initialize delay inner loop value
rcall _r_outer_delay_loop ; Intialize delay outer loop value
loop: ; Program loop loop: ; Program loop
cbi LED_PORT, LED_PIN rcall toggle_led ; Toggle an LED
rcall delay_loop rcall delay_1s ; Delay for 1 sec
sbi LED_PORT, LED_PIN rjmp loop ; Jump to program loop again
rcall delay_loop
rjmp loop
init_ports: ; Init MCU ports toggle_led: ; Toggle an LED
ldi r16, (1<<LED_PIN) eor r17, r16 ; Toggle bit
ldi r17, (0<<LED_PIN) out LED_PORT, r17 ; Update port of LED
nop
out LED_DIR, r16
out LED_PORT, r17
ret ret
delay_loop_reset: ; Load value to registar pair again init_ports: ; Init MCU ports
ldi r16, (1<<LED_PIN) ; Load to r16 high bit
out LED_DIR, r16 ; Set LED direction to output
ret
delay_1s_outer_l:
rcall _r_inner_delay_loop
delay_1s:
sbiw r24, 1 ; Decrement inner loop value
brne delay_1s ; Jump to inner loop again
rcall _r_inner_delay_loop ; Reset inner loop value
dec r18 ; Decremnt outer loop value
brne delay_1s_outer_l ; Jump to outer loop again
rcall _r_outer_delay_loop
ret
_r_inner_delay_loop: ; Reset inner delay loop
ldi r24, low(iVal) ldi r24, low(iVal)
ldi r25, high(iVal) ldi r25, high(iVal)
ret ret
delay_loop: _r_outer_delay_loop: ; Reset outer delay loop
sbiw r24, 1 ldi r18, oVal
brne delay_loop
nop
rcall delay_loop_reset
rcall delay_loop_2
ret
delay_loop_2:
sbiw r24, 1
brne delay_loop_2
rcall delay_loop_reset
rcall delay_loop_3
ret
delay_loop_3:
sbiw r24, 1
brne delay_loop_3
rcall delay_loop_reset
ret ret

View File

@ -1,7 +1,6 @@
:020000020000FC :020000020000FC
:100000000FED0DBF06D00BD0D8980CD0D89A0AD0DF :100000000FED0DBF08D012D014D002D008D0FDCF14
:10001000FBCF01E010E000000ABB1BBB089588EE97 :1000100010271BBB089501E00ABB089507D0019784
:100020009DEF08950197F1F70000F9DF01D00895E1 :10002000F1F704D02A95D1F704D0089580E197E242
:100030000197F1F7F4DF01D008950197F1F7EFDFB1 :06003000089524E108958B
:02004000089521
:00000001FF :00000001FF