From 2d532a6403e7cab49bfa445324a35e8823c5dc3f Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Tue, 5 Mar 2024 15:06:42 +0100 Subject: [PATCH 1/6] this is working --- colors.S | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++----- main.S | 12 +++++------ 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/colors.S b/colors.S index 0b77aee..0c91c7c 100644 --- a/colors.S +++ b/colors.S @@ -3,12 +3,66 @@ .section ".rodata","a" screendata_tmpl: .global screendata_tmpl - .byte _red - .byte _magenta - .byte _blue - .byte _cyan .byte _green - .byte _yellow + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green + .byte _green screendataend_tmpl: .byte 0xff diff --git a/main.S b/main.S index 318e5d8..23c090b 100644 --- a/main.S +++ b/main.S @@ -1,5 +1,3 @@ - .file "main.S" - #include #include "colors.h" @@ -52,7 +50,7 @@ .section ".data" screendata: - .rept 6 + .rept 60 .byte 0 .endr screendataend: @@ -181,9 +179,11 @@ mainloop_wait_for_isr_2: mainloop_data_done: ;; signal all data processed, isr finish bis #SIGNAL_ALL_DATA_DONE, SIGNAL_REGISTER - set_debug - ;; continue - jmp mainloop + + + jmp mainloop_data_done + + From c502303a36bfa2d152843c1bf6aa59bbd212171b Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Tue, 5 Mar 2024 15:27:34 +0100 Subject: [PATCH 2/6] use of subroutines work --- colors.S | 120 +++++++++++++++++++++++++++---------------------------- main.S | 91 ++++++++++++++++++++++++++--------------- 2 files changed, 118 insertions(+), 93 deletions(-) diff --git a/colors.S b/colors.S index 0c91c7c..12b39ea 100644 --- a/colors.S +++ b/colors.S @@ -3,66 +3,66 @@ .section ".rodata","a" screendata_tmpl: .global screendata_tmpl - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green - .byte _green + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red + .byte _red screendataend_tmpl: .byte 0xff diff --git a/main.S b/main.S index 23c090b..2a7926a 100644 --- a/main.S +++ b/main.S @@ -76,20 +76,21 @@ _start: ;; initialize stack pointer with value from linker mov.w #__stack, SP - ;; ---------------------------------------------- - ;; load data from template area in rom into ram - ;; uses arbitrary register before loading registers - ;; for later use - mov.w #screendata, r7 - mov.w #screendataend, r8 - mov.w #screendata_tmpl, r9 -_start_load_next: - mov.b @r9, @r7 - inc.w r7 - inc.w r9 - cmp.w r7, r8 - jnz _start_load_next - ;; ---------------------------------------------- +; ;; ---------------------------------------------- +; ;; load data from template area in rom into ram +; ;; uses arbitrary register before loading registers +; ;; for later use +; mov.w #screendata, r7 +; mov.w #screendataend, r8 +; mov.w #screendata_tmpl, r9 +;_start_load_next: +; mov.b @r9, @r7 +; inc.w r7 +; inc.w r9 +; cmp.w r7, r8 +; jnz _start_load_next +; ;; ---------------------------------------------- + init: ;; configuration of GPIO Ports @@ -117,6 +118,38 @@ init: mov.w #OUTMOD_7,&TA1CCTL1 mov.w #OUTMOD_7,&TA1CCTL2 + + ;; initialize bit-counter for isr + mov.b #BIT_COUNTER_INIT_VALUE, BIT_COUNTER_REGISTER + ;; initialize isr-sync register, signal BYTE_DONE for the first start + mov.b #SIGNAL_OCTET_DONE, SIGNAL_REGISTER + + ;; start timer in up mode + bis.w #MC0,&TA1CTL + ;; enable interrupts + eint + +mainloop: + call #resetscreen + call #drawscreen + + jmp mainloop + + +resetscreen: + ;; reset screen data + mov.w #screendata, r7 + mov.w #screendataend, r8 +resetscreen_continue: + mov.b #_off, @r7 + inc.w r7 + cmp.w r7, r8 + jnz resetscreen_continue + ret + + + +drawscreen: ;; initialize bit-counter for isr mov.b #BIT_COUNTER_INIT_VALUE, BIT_COUNTER_REGISTER ;; initialize isr-sync register, signal BYTE_DONE for the first start @@ -127,15 +160,10 @@ init: ;; screen data end into r8 mov.w #screendataend, DATA_END_ADDRESS_REGISTER - ;; start timer in up mode - bis.w #MC0,&TA1CTL - ;; enable interrupts - eint - -mainloop: +drawscreen_continue: ;; prepare next byte to handle by isr cmp.w DATA_NEXT_ADDRESS_REGISTER, DATA_END_ADDRESS_REGISTER - jz mainloop_data_done + jz drawscreen_data_done ;; load next data byte mov.b @DATA_NEXT_ADDRESS_REGISTER, NEXT_DATA_REGISTER @@ -148,42 +176,39 @@ mainloop: ;; enable isr bis #SIGNAL_ISR_ENABLE, SIGNAL_REGISTER -mainloop_wait_for_isr_0: +drawscreen_wait_for_isr_0: ;; check bit0 in sync register bit #SIGNAL_OCTET_DONE, SIGNAL_REGISTER - jz mainloop_wait_for_isr_0 + jz drawscreen_wait_for_isr_0 ;; load data mov.b colors(NEXT_DATA_REGISTER), DATA_REGISTER ;; clear BYTE_DONE bic #SIGNAL_OCTET_DONE, SIGNAL_REGISTER -mainloop_wait_for_isr_1: +drawscreen_wait_for_isr_1: ;; check bit0 in sync register bit #SIGNAL_OCTET_DONE, SIGNAL_REGISTER - jz mainloop_wait_for_isr_1 + jz drawscreen_wait_for_isr_1 ;; load data mov.b colors+1(NEXT_DATA_REGISTER), DATA_REGISTER ;; clear BYTE_DONE bic #SIGNAL_OCTET_DONE, SIGNAL_REGISTER -mainloop_wait_for_isr_2: +drawscreen_wait_for_isr_2: ;; check bit0 in sync register bit #SIGNAL_OCTET_DONE, SIGNAL_REGISTER - jz mainloop_wait_for_isr_2 + jz drawscreen_wait_for_isr_2 ;; load data mov.b colors+2(NEXT_DATA_REGISTER), DATA_REGISTER ;; clear BYTE_DONE bic #SIGNAL_OCTET_DONE, SIGNAL_REGISTER ;; continue - jmp mainloop + jmp drawscreen_continue -mainloop_data_done: +drawscreen_data_done: ;; signal all data processed, isr finish bis #SIGNAL_ALL_DATA_DONE, SIGNAL_REGISTER - - jmp mainloop_data_done - - + ret From 49d78662e206128c27c733946de8ff3042884296 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Tue, 5 Mar 2024 16:14:13 +0100 Subject: [PATCH 3/6] rolling led --- main.S | 103 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 79 insertions(+), 24 deletions(-) diff --git a/main.S b/main.S index 2a7926a..4ad2399 100644 --- a/main.S +++ b/main.S @@ -6,19 +6,25 @@ #define SR r2 +;; ---------------------------------------------------- +;; --- r4, r5 and r6 must not be used for any other --- +;; --- purpose --- +;; required for communication between drawscreen and isr #define SIGNAL_REGISTER r4 #define SIGNAL_OCTET_DONE 0x01 #define SIGNAL_ISR_ENABLE 0x02 #define SIGNAL_ALL_DATA_DONE 0x04 +#define SIGNAL_INIT_VALUE SIGNAL_OCTET_DONE - -#define DATA_NEXT_ADDRESS_REGISTER r7 -#define DATA_END_ADDRESS_REGISTER r8 +;; required for handover of data between drawscreen and isr #define DATA_REGISTER r5 -#define NEXT_DATA_REGISTER r9 +;; required for sequencing of isr #define BIT_COUNTER_REGISTER r6 #define BIT_COUNTER_INIT_VALUE 0x01 +;; ---------------------------------------------------- + + @@ -55,6 +61,8 @@ screendata: .endr screendataend: .byte 0xff +data_forward_pointer: + .word 0 ;; .text is the name of the section, it is a hint for the linker to @@ -76,20 +84,6 @@ _start: ;; initialize stack pointer with value from linker mov.w #__stack, SP -; ;; ---------------------------------------------- -; ;; load data from template area in rom into ram -; ;; uses arbitrary register before loading registers -; ;; for later use -; mov.w #screendata, r7 -; mov.w #screendataend, r8 -; mov.w #screendata_tmpl, r9 -;_start_load_next: -; mov.b @r9, @r7 -; inc.w r7 -; inc.w r9 -; cmp.w r7, r8 -; jnz _start_load_next -; ;; ---------------------------------------------- init: @@ -119,10 +113,8 @@ init: mov.w #OUTMOD_7,&TA1CCTL2 - ;; initialize bit-counter for isr - mov.b #BIT_COUNTER_INIT_VALUE, BIT_COUNTER_REGISTER - ;; initialize isr-sync register, signal BYTE_DONE for the first start - mov.b #SIGNAL_OCTET_DONE, SIGNAL_REGISTER + ;; make sure the isr will not immediately start + mov.b #SIGNAL_INIT_VALUE, SIGNAL_REGISTER ;; start timer in up mode bis.w #MC0,&TA1CTL @@ -130,13 +122,63 @@ init: eint mainloop: + call #forwardscreen_init call #resetscreen + +mainloop_draw: call #drawscreen + call #forwardscreen - jmp mainloop + call #wait + jmp mainloop_draw + + +wait: + push r11 + push r12 + + mov.w #0x0040, r11 +wait_continue_1: + mov.w #0xffff, r12 +wait_continue_2: + dec.w r12 + jnz wait_continue_2 + dec.w r11 + jnz wait_continue_1 + + pop r12 + pop r11 + ret + +forwardscreen_init: + mov.w #screendata, &data_forward_pointer + ret + +forwardscreen: + push r8 + push r10 + + mov.w #screendataend, r8 + mov.w data_forward_pointer, r10 + mov.b #_off, @r10 + inc.w r10 + mov.b #_red, @r10 + cmp.w r10, r8 + jnz forwardscreen_done + mov.w #screendata, r10 +forwardscreen_done: + mov.w r10, data_forward_pointer + + pop r10 + pop r8 + ret + resetscreen: + push r7 + push r8 + ;; reset screen data mov.w #screendata, r7 mov.w #screendataend, r8 @@ -145,11 +187,21 @@ resetscreen_continue: inc.w r7 cmp.w r7, r8 jnz resetscreen_continue + + pop r8 + pop r7 ret - drawscreen: + push r7 + push r8 + push r9 + +#define DATA_NEXT_ADDRESS_REGISTER r7 +#define DATA_END_ADDRESS_REGISTER r8 +#define NEXT_DATA_REGISTER r9 + ;; initialize bit-counter for isr mov.b #BIT_COUNTER_INIT_VALUE, BIT_COUNTER_REGISTER ;; initialize isr-sync register, signal BYTE_DONE for the first start @@ -208,6 +260,9 @@ drawscreen_data_done: ;; signal all data processed, isr finish bis #SIGNAL_ALL_DATA_DONE, SIGNAL_REGISTER + pop r9 + pop r8 + pop r7 ret From fbe779d3b8c632ae363fe6841ee6574cbd15e764 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Tue, 5 Mar 2024 16:18:19 +0100 Subject: [PATCH 4/6] code beautified --- colors.S | 65 -------------------------------------------------------- main.S | 22 ++++++++++--------- 2 files changed, 12 insertions(+), 75 deletions(-) diff --git a/colors.S b/colors.S index 12b39ea..dfc94b9 100644 --- a/colors.S +++ b/colors.S @@ -1,71 +1,6 @@ #include "colors.h" .section ".rodata","a" -screendata_tmpl: - .global screendata_tmpl - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red - .byte _red -screendataend_tmpl: - .byte 0xff - ;; color definitions according to ;; https://learn.sparkfun.com/tutorials/lilypad-protosnap-plus-activity-guide/3-custom-color-mixing colors: diff --git a/main.S b/main.S index 4ad2399..7897021 100644 --- a/main.S +++ b/main.S @@ -25,9 +25,6 @@ ;; ---------------------------------------------------- - - - ;; 2.48us #define TIMER_COMPLETE 45 ;; 1.18us @@ -71,6 +68,7 @@ data_forward_pointer: ;; @progbits is a hint for the linker to allocate this section into ;; program memory (flash) .section ".text","ax",@progbits +;; ---------------------------------------------------- _start: ;; disable watchdog mov.w #WDTPW|WDTHOLD,&WDTCTL @@ -84,8 +82,6 @@ _start: ;; initialize stack pointer with value from linker mov.w #__stack, SP - - init: ;; configuration of GPIO Ports ;; BIT0: data bit @@ -112,7 +108,6 @@ init: mov.w #OUTMOD_7,&TA1CCTL1 mov.w #OUTMOD_7,&TA1CCTL2 - ;; make sure the isr will not immediately start mov.b #SIGNAL_INIT_VALUE, SIGNAL_REGISTER @@ -121,6 +116,8 @@ init: ;; enable interrupts eint + +;; ---------------------------------------------------- mainloop: call #forwardscreen_init call #resetscreen @@ -134,6 +131,7 @@ mainloop_draw: jmp mainloop_draw +;; ---------------------------------------------------- wait: push r11 push r12 @@ -151,10 +149,13 @@ wait_continue_2: pop r11 ret + +;; ---------------------------------------------------- forwardscreen_init: mov.w #screendata, &data_forward_pointer ret +;; ---------------------------------------------------- forwardscreen: push r8 push r10 @@ -163,7 +164,7 @@ forwardscreen: mov.w data_forward_pointer, r10 mov.b #_off, @r10 inc.w r10 - mov.b #_red, @r10 + mov.b #_green, @r10 cmp.w r10, r8 jnz forwardscreen_done mov.w #screendata, r10 @@ -175,6 +176,7 @@ forwardscreen_done: ret +;; ---------------------------------------------------- resetscreen: push r7 push r8 @@ -193,6 +195,7 @@ resetscreen_continue: ret +;; ---------------------------------------------------- drawscreen: push r7 push r8 @@ -266,8 +269,7 @@ drawscreen_data_done: ret - - +;; ---------------------------------------------------- ; --- timer isr --- ;; r6: exclusively used by isr as bit-counter timer1_a0_isr: @@ -308,7 +310,7 @@ timer1_a0_isr_exit: reti - +;; ---------------------------------------------------- .section "__interrupt_vector_14","ax",@progbits .word timer1_a0_isr From 584e834b0dd1067d646ab42e65831feb24c20d1a Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Tue, 5 Mar 2024 16:21:56 +0100 Subject: [PATCH 5/6] comment --- main.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.S b/main.S index 7897021..977cf2d 100644 --- a/main.S +++ b/main.S @@ -53,7 +53,7 @@ .section ".data" screendata: - .rept 60 + .rept 60 ;; number of leds in hardward .byte 0 .endr screendataend: From c35ec0991c581f8c91ced705d04773c2e536d9c6 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Tue, 5 Mar 2024 17:01:53 +0100 Subject: [PATCH 6/6] dimm factor introduced --- colors.S | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/colors.S b/colors.S index dfc94b9..397f3cf 100644 --- a/colors.S +++ b/colors.S @@ -1,5 +1,6 @@ #include "colors.h" +#define DIMM_FACTOR 3 .section ".rodata","a" ;; color definitions according to ;; https://learn.sparkfun.com/tutorials/lilypad-protosnap-plus-activity-guide/3-custom-color-mixing @@ -9,29 +10,29 @@ colors: off: .byte 0x00, 0x00, 0x00, 0 blue: - .byte 0x00, 0x00, 0xff, 0 + .byte 0x00>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0 green: - .byte 0x00, 0xff, 0x00, 0 + .byte 0x00>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0 orange: - .byte 0xff, 0x80, 0x00, 0 + .byte 0xff>>DIMM_FACTOR, 0x80>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0 rose: - .byte 0xff, 0x00, 0x80, 0 + .byte 0xff>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0x80>>DIMM_FACTOR, 0 magenta: - .byte 0xff, 0x00, 0xff, 0 + .byte 0xff>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0 violet: - .byte 0x80, 0x00, 0xff, 0 + .byte 0x80>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0 azure: - .byte 0x00, 0x80, 0xff, 0 + .byte 0x00>>DIMM_FACTOR, 0x80>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0 cyan: - .byte 0x00, 0xff, 0xff, 0 + .byte 0x00>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0 springgreen: - .byte 0x00, 0xff, 0x80, 0 + .byte 0x00>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0x80>>DIMM_FACTOR, 0 chartreuse: - .byte 0x80, 0xff, 0x00, 0 + .byte 0x80>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0 yellow: - .byte 0xff, 0xff, 0x00, 0 + .byte 0xff>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0 white: - .byte 0xff, 0xff, 0xff, 0 + .byte 0xff>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0xff>>DIMM_FACTOR, 0 red: - .byte 0xff, 0x00, 0x00, 0 + .byte 0xff>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0x00>>DIMM_FACTOR, 0