mirror of
https://github.com/sergeyyarkov/attiny24a_led-blink-example.git
synced 2026-10-11 02:08:53 +03:00
refactor: makefile & blink program
This commit is contained in:
parent
2d18dcd014
commit
514ff44d31
8
Makefile
8
Makefile
@ -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
|
||||||
71
firmware.asm
71
firmware.asm
@ -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
|
||||||
@ -1,7 +1,6 @@
|
|||||||
:020000020000FC
|
:020000020000FC
|
||||||
:100000000FED0DBF06D00BD0D8980CD0D89A0AD0DF
|
:100000000FED0DBF08D012D014D002D008D0FDCF14
|
||||||
:10001000FBCF01E010E000000ABB1BBB089588EE97
|
:1000100010271BBB089501E00ABB089507D0019784
|
||||||
:100020009DEF08950197F1F70000F9DF01D00895E1
|
:10002000F1F704D02A95D1F704D0089580E197E242
|
||||||
:100030000197F1F7F4DF01D008950197F1F7EFDFB1
|
:06003000089524E108958B
|
||||||
:02004000089521
|
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user