From dd7fc7ebd12e6d18a333560e35006eb8189513f3 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Thu, 13 Jun 2024 14:52:23 +0200 Subject: [PATCH] generator stuff --- Makefile | 2 +- gen-driver.S | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ generator.c | 14 ++++++++++ generator.h | 12 +++++++++ main.c | 3 +++ 5 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 gen-driver.S create mode 100644 generator.c create mode 100644 generator.h diff --git a/Makefile b/Makefile index 3d6f7ff..d6aa2f7 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ ASFLAGS=$(COMMONFLAGS) -D__ASSEMBLER__ LDFLAGS=-mmcu=$(MCU) -L $(TOOLCHAIN_PREFIX)/include -$(ARTIFACT).elf: main.o scheduler.o +$(ARTIFACT).elf: main.o scheduler.o generator.o gen-driver.o $(CC) -o $@ $(LDFLAGS) $^ $(OBJDUMP) -D $(ARTIFACT).elf > $(ARTIFACT).txt diff --git a/gen-driver.S b/gen-driver.S new file mode 100644 index 0000000..d645917 --- /dev/null +++ b/gen-driver.S @@ -0,0 +1,72 @@ +#include + + +#define DATA_REGISTER r13 +#define CHIP_ID_REGISTER r12 + +#define PORT_REG P1OUT +#define PORT_SID_BIT BIT0 +#define PORT_SCK_BIT BIT1 +#define PORT_LATI0_BIT BIT2 +#define PORT_LATI1_BIT BIT3 + + + .macro set_data_bit + bic #PORT_SID_BIT, &PORT_REG + .endm + .macro clear_data_bit + bis #PORT_SID_BIT, &PORT_REG + .endm + .macro clock_cycle + bic #PORT_SCK_BIT, &PORT_REG + bis #PORT_SCK_BIT, &PORT_REG + .endm + .macro lati_cycle chip + bic #\chip\(), &PORT_REG + bis #\chip\(), &PORT_REG + .endm + + .macro data_cycle id +genShifter_\id\(): + rla.w DATA_REGISTER + jnc genShifter_false_\id\() + set_data_bit + jmp genShifter_clock_\id\() +genShifter_false_\id\(): + clear_data_bit +genShifter_clock_\id\(): + clock_cycle + .endm + + .section ".text","ax",@progbits + .global genShifter +genShifter: + // arguments + // R12 aka CHIP_ID_REGISTER: chip id, 0 or 1 + // R13 aka DATA_REGISTER: frequency code, full 16 bit + + data_cycle 0 + data_cycle 1 + data_cycle 2 + data_cycle 3 + data_cycle 4 + data_cycle 5 + data_cycle 6 + data_cycle 7 + data_cycle 8 + data_cycle 9 + data_cycle a + data_cycle b + data_cycle c + data_cycle d + data_cycle e + data_cycle f + + tst.w CHIP_ID_REGISTER + jnz genShifter_chip_1 + lati_cycle PORT_LATI0_BIT +genShifter_chip_1: + lati_cycle PORT_LATI1_BIT + + ret + diff --git a/generator.c b/generator.c new file mode 100644 index 0000000..1f39469 --- /dev/null +++ b/generator.c @@ -0,0 +1,14 @@ +#include +#include +#include +#include "generator.h" + + +void generatorInit() { + P1DIR |= BIT0 | BIT1 | BIT2 | BIT3; + P1OUT |= BIT0 | BIT1 | BIT2 | BIT3; + + + genShifter(0, 0x8001); +} + diff --git a/generator.h b/generator.h new file mode 100644 index 0000000..41d6c96 --- /dev/null +++ b/generator.h @@ -0,0 +1,12 @@ +#ifndef _GENERATOR_H_ +#define _GENERATOR_H_ + +#include + + +void generatorInit(); +void genShifter(uint16_t chipId, uint16_t frequencyCode); + + + +#endif // _GENERATOR_H_ diff --git a/main.c b/main.c index 62c52b6..b4ccdbb 100644 --- a/main.c +++ b/main.c @@ -3,6 +3,8 @@ #include #include "scheduler.h" +#include "generator.h" + int main() { WDTCTL = WDTPW | WDTHOLD; @@ -18,6 +20,7 @@ int main() { schInit(); + generatorInit(); __enable_interrupt();