From 6e8c0f2b00d94278ca04e73771b2e634c56f0a00 Mon Sep 17 00:00:00 2001 From: jz13138 Date: Sun, 12 May 2024 17:47:39 +0200 Subject: [PATCH] Attempt to make Serial_HelloWorld compatible with SDCC 4.4.0 --- README.md | 1 - Serial_HelloWorld/Makefile | 2 +- SleepWake/Makefile | 6 +++--- SleepWake/main.c | 5 +++-- include/delay.h | 4 ++-- include/pdk/util.h | 7 ++++--- include/serial.h | 4 ++-- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 81592d1..6a93986 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,6 @@ Code Examples for Padauk MCUs using the free-pdk toolchain ### Toolchain: - The open-source [Small Device C Compiler (SDCC)](http://sdcc.sourceforge.net/) - Requires version 3.9.0 or newer - version 4.0.0+ preferred - - **Some of the examples don't work with the neweset version of SDCC (4.4.0). Revert to SDCC 4.1.0 please** - The open-source [Easy PDK Programmer](https://github.com/free-pdk/easy-pdk-programmer-software) - Requires version 1.3 or newer - The open-source [pdk-includes](https://github.com/free-pdk/pdk-includes) repository diff --git a/Serial_HelloWorld/Makefile b/Serial_HelloWorld/Makefile index 920f9e9..f025148 100644 --- a/Serial_HelloWorld/Makefile +++ b/Serial_HelloWorld/Makefile @@ -1,5 +1,5 @@ -DEVICE = PFS154 +DEVICE = PFS173 F_CPU = 8000000 TARGET_VDD_MV = 4000 TARGET_VDD = 4.0 diff --git a/SleepWake/Makefile b/SleepWake/Makefile index 49bf6ee..531d2e6 100644 --- a/SleepWake/Makefile +++ b/SleepWake/Makefile @@ -1,6 +1,6 @@ -DEVICE = PFS154 -F_CPU = 70000 +DEVICE = PFS173 +F_CPU = 8000000 TARGET_VDD_MV = 4000 TARGET_VDD = 4.0 @@ -20,7 +20,7 @@ SOURCES = main.c OBJECTS = $(patsubst %.c,$(BUILD_DIR)/%.rel,$(SOURCES)) # http://sdcc.sourceforge.net/doc/sdccman.pdf -COMPILE = sdcc -m$(ARCH) -c --std-sdcc11 --opt-code-size -D$(DEVICE) -DF_CPU=$(F_CPU) -DTARGET_VDD_MV=$(TARGET_VDD_MV) -I. -I$(ROOT_DIR)/include +COMPILE = sdcc -m$(ARCH) -c --std-sdcc11 --opt-code-size --fverbose-asm -D$(DEVICE) -DF_CPU=$(F_CPU) -DTARGET_VDD_MV=$(TARGET_VDD_MV) -I. -I$(ROOT_DIR)/include LINK = sdcc -m$(ARCH) EASYPDKPROG = easypdkprog diff --git a/SleepWake/main.c b/SleepWake/main.c index a07ddd9..1ae9963 100644 --- a/SleepWake/main.c +++ b/SleepWake/main.c @@ -43,7 +43,8 @@ void main(void) { setup(); // Main processing loop - while (1) { + while (1) + { for (int i = 0; i < 3; i++) { turnLedOn(); _delay_ms(400); @@ -51,7 +52,7 @@ void main(void) { _delay_ms(400); } - sleep(); + //sleep(); } } diff --git a/include/delay.h b/include/delay.h index d189df9..d577a37 100644 --- a/include/delay.h +++ b/include/delay.h @@ -59,7 +59,7 @@ __asm subc __delay_loop_16_PARM_1+1 ; 1 cycle mov a, __delay_loop_16_PARM_1+0 ; 1 cycle or a, __delay_loop_16_PARM_1+1 ; 1 cycle - t1sn f, z ; 1 cycle + 1 cycle for final skip + t1sn.io f, z ; 1 cycle + 1 cycle for final skip goto 00001$ ; 2 cycles // ret ; 2 cycles __endasm; @@ -88,7 +88,7 @@ __asm or a, __delay_loop_32_PARM_1+1 ; 1 cycle or a, __delay_loop_32_PARM_1+2 ; 1 cycle or a, __delay_loop_32_PARM_1+3 ; 1 cycle - t1sn f, z ; 1 cycle + 1 cycle for final skip + t1sn.io f, z ; 1 cycle + 1 cycle for final skip goto 00001$ ; 2 cycles // ret ; 2 cycles __endasm; diff --git a/include/pdk/util.h b/include/pdk/util.h index 0838541..7b5563d 100644 --- a/include/pdk/util.h +++ b/include/pdk/util.h @@ -29,9 +29,10 @@ //macros so we can use defines in assembler strings #define _STRINGIFY(x) #x -#define _STR(x) _STRINGIFY(x) #define _STR_VAR(x) "_"_STRINGIFY(x) +#define _STR(x) _STRINGIFY(x) #define _VAR(x) _ ## x +#define _ASMS(x) VAR(x) //definitions for built in opcodes #define __nop() __asm__("nop\n") @@ -41,8 +42,8 @@ #define __stopexe() __asm__("stopexe\nnop\n") #define __reset() __asm__("reset\n") #define __wdreset() __asm__("wdreset\n") -#define __set0(var,bit) __asm__("set0 "_STR_VAR(var)", #"_STR(bit)"\n") -#define __set1(var,bit) __asm__("set1 "_STR_VAR(var)", #"_STR(bit)"\n") +#define __set0io(x,y) __asm__("set0.io "_STR_VAR(x)", #"_STR(y)"\n") +#define __set1io(x,y) __asm__("set1.io "_STR_VAR(x)", #"_STR(y)"\n") // BIT definitions #define BIT0 (1) diff --git a/include/serial.h b/include/serial.h index 913d32f..16b7eeb 100644 --- a/include/serial.h +++ b/include/serial.h @@ -23,9 +23,9 @@ void serial_setup() { void serial_irq_handler() { if (txdata) { // Does txdata contains bits to send? if (txdata & 0x01) // Check bit (1/0) for sending - __set1(PA, SERIAL_TX_PIN); // Send 1 on TX Pin + __set1io(PA, 7); // Send 1 on TX Pin else - __set0(PA, SERIAL_TX_PIN); // Send 0 on TX Pin + __set0io(PA, SERIAL_TX_PIN); // Send 0 on TX Pin txdata >>= 1; // Shift txdata } }