Waveform interleaving seems to work
This commit is contained in:
parent
e54c5479c3
commit
bf9e310360
4 changed files with 13586 additions and 7346 deletions
19440
driver/driver.kicad_pcb
19440
driver/driver.kicad_pcb
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -30,7 +30,7 @@ DEVICE := STM32G070RB
|
|||
|
||||
ASM_SOURCES := startup.s
|
||||
|
||||
C_SOURCES := src/main.c
|
||||
C_SOURCES := src/main.c $(BUILDDIR)/generated/waveform_tables.c
|
||||
|
||||
CPP_SOURCES := # - none -
|
||||
|
||||
|
|
@ -93,6 +93,8 @@ COMMON_CFLAGS += -O$(OPT) -std=gnu2x -g
|
|||
COMMON_CFLAGS += $(DEVICE_DEFINES)
|
||||
COMMON_CFLAGS += -DDEBUG=$(DEBUG)
|
||||
|
||||
GEN_HEADERS := $(BUILDDIR)/generated/waveform_tables.h
|
||||
|
||||
HOST_CFLAGS += $(COMMON_CFLAGS)
|
||||
|
||||
# for musl
|
||||
|
|
@ -152,7 +154,7 @@ $(BUILDDIR)/src/%.o: src/%.s
|
|||
mkdir -p $(@D)
|
||||
$(CC) $(COMMON_CFLAGS) $(CFLAGS) $(INT_CFLAGS) -o $@ -c $<
|
||||
|
||||
$(BUILDDIR)/src/%.o: src/%.c
|
||||
$(BUILDDIR)/src/%.o: src/%.c $(GEN_HEADERS)
|
||||
mkdir -p $(@D)
|
||||
$(CC) $(COMMON_CFLAGS) $(CFLAGS) $(INT_CFLAGS) -o $@ -c $<
|
||||
|
||||
|
|
@ -168,21 +170,26 @@ $(BUILDDIR)/%.o: %.s
|
|||
mkdir -p $(@D)
|
||||
$(CC) $(COMMON_CFLAGS) $(CFLAGS) $(EXT_CFLAGS) -o $@ -c $<
|
||||
|
||||
$(BUILDDIR)/generated/waveform_tables.c: tools/template_wave_tables.py $(BUILDDIR)/generated/waveform_tables.h
|
||||
mkdir -p $(@D)
|
||||
python $< $@
|
||||
|
||||
$(BUILDDIR)/generated/waveform_tables.h: tools/template_wave_tables.py
|
||||
mkdir -p $(@D)
|
||||
python $< --header $@
|
||||
|
||||
venv:
|
||||
test -d venv || python3 -m venv --system-site-packages venv
|
||||
source venv/bin/activate && pip install cxxfilt pyelftools libarchive matplotlib
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)/src
|
||||
rm -rf $(BUILDDIR)/generated
|
||||
rm -f $(BUILDDIR)/**.o
|
||||
rm -f $(BUILDDIR)/$(BINARY)
|
||||
rm -f $(BUILDDIR)/$(BINARY:.elf=.map)
|
||||
rm -f $(BUILDDIR)/$(BINARY:.elf=-symbol-sizes.dot)
|
||||
rm -f $(BUILDDIR)/$(BINARY:.elf=-symbol-sizes.pdf)
|
||||
rm -f $(BUILDDIR)/crc32_test
|
||||
rm -f $(BUILDDIR)/microcobs_test_sg
|
||||
rm -f $(BUILDDIR)/microcobs_test
|
||||
rm -f $(BUILDDIR)/microcobs_decode_test
|
||||
|
||||
mrproper: clean
|
||||
rm -rf build
|
||||
|
|
|
|||
|
|
@ -1,271 +1,25 @@
|
|||
|
||||
#include <global.h>
|
||||
#include <string.h>
|
||||
#include "generated/waveform_tables.h"
|
||||
|
||||
volatile uint64_t sys_time_us;
|
||||
|
||||
uint32_t read_fuse_monitor(void);
|
||||
void set_rj45_leds(uint32_t leds);
|
||||
void set_status_leds(uint32_t leds);
|
||||
static uint32_t read_fuse_monitor(void);
|
||||
static void set_rj45_leds(uint32_t leds);
|
||||
static void set_status_leds(uint32_t leds);
|
||||
static void dma_tx_constant(size_t table_size, uint16_t constant);
|
||||
static void dma_tx_waveform(size_t table_size, const uint16_t *table);
|
||||
|
||||
uint16_t waveform[512] = {
|
||||
128, 255,
|
||||
131, 255,
|
||||
134, 255,
|
||||
137, 255,
|
||||
140, 254,
|
||||
143, 254,
|
||||
146, 254,
|
||||
149, 253,
|
||||
152, 253,
|
||||
155, 252,
|
||||
158, 251,
|
||||
162, 250,
|
||||
165, 250,
|
||||
167, 249,
|
||||
170, 248,
|
||||
173, 246,
|
||||
176, 245,
|
||||
179, 244,
|
||||
182, 243,
|
||||
185, 241,
|
||||
188, 240,
|
||||
190, 238,
|
||||
193, 237,
|
||||
196, 235,
|
||||
198, 234,
|
||||
201, 232,
|
||||
203, 230,
|
||||
206, 228,
|
||||
208, 226,
|
||||
211, 224,
|
||||
213, 222,
|
||||
215, 220,
|
||||
218, 218,
|
||||
220, 215,
|
||||
222, 213,
|
||||
224, 211,
|
||||
226, 208,
|
||||
228, 206,
|
||||
230, 203,
|
||||
232, 201,
|
||||
234, 198,
|
||||
235, 196,
|
||||
237, 193,
|
||||
238, 190,
|
||||
240, 188,
|
||||
241, 185,
|
||||
243, 182,
|
||||
244, 179,
|
||||
245, 176,
|
||||
246, 173,
|
||||
248, 170,
|
||||
249, 167,
|
||||
250, 165,
|
||||
250, 162,
|
||||
251, 158,
|
||||
252, 155,
|
||||
253, 152,
|
||||
253, 149,
|
||||
254, 146,
|
||||
254, 143,
|
||||
254, 140,
|
||||
255, 137,
|
||||
255, 134,
|
||||
255, 131,
|
||||
255, 128,
|
||||
255, 124,
|
||||
255, 121,
|
||||
255, 118,
|
||||
254, 115,
|
||||
254, 112,
|
||||
254, 109,
|
||||
253, 106,
|
||||
253, 103,
|
||||
252, 100,
|
||||
251, 97,
|
||||
250, 93,
|
||||
250, 90,
|
||||
249, 88,
|
||||
248, 85,
|
||||
246, 82,
|
||||
245, 79,
|
||||
244, 76,
|
||||
243, 73,
|
||||
241, 70,
|
||||
240, 67,
|
||||
238, 65,
|
||||
237, 62,
|
||||
235, 59,
|
||||
234, 57,
|
||||
232, 54,
|
||||
230, 52,
|
||||
228, 49,
|
||||
226, 47,
|
||||
224, 44,
|
||||
222, 42,
|
||||
220, 40,
|
||||
218, 37,
|
||||
215, 35,
|
||||
213, 33,
|
||||
211, 31,
|
||||
208, 29,
|
||||
206, 27,
|
||||
203, 25,
|
||||
201, 23,
|
||||
198, 21,
|
||||
196, 20,
|
||||
193, 18,
|
||||
190, 17,
|
||||
188, 15,
|
||||
185, 14,
|
||||
182, 12,
|
||||
179, 11,
|
||||
176, 10,
|
||||
173, 9,
|
||||
170, 7,
|
||||
167, 6,
|
||||
165, 5,
|
||||
162, 5,
|
||||
158, 4,
|
||||
155, 3,
|
||||
152, 2,
|
||||
149, 2,
|
||||
146, 1,
|
||||
143, 1,
|
||||
140, 1,
|
||||
137, 0,
|
||||
134, 0,
|
||||
131, 0,
|
||||
128, 0,
|
||||
124, 0,
|
||||
121, 0,
|
||||
118, 0,
|
||||
115, 1,
|
||||
112, 1,
|
||||
109, 1,
|
||||
106, 2,
|
||||
103, 2,
|
||||
100, 3,
|
||||
97, 4,
|
||||
93, 5,
|
||||
90, 5,
|
||||
88, 6,
|
||||
85, 7,
|
||||
82, 9,
|
||||
79, 10,
|
||||
76, 11,
|
||||
73, 12,
|
||||
70, 14,
|
||||
67, 15,
|
||||
65, 17,
|
||||
62, 18,
|
||||
59, 20,
|
||||
57, 21,
|
||||
54, 23,
|
||||
52, 25,
|
||||
49, 27,
|
||||
47, 29,
|
||||
44, 31,
|
||||
42, 33,
|
||||
40, 35,
|
||||
37, 37,
|
||||
35, 40,
|
||||
33, 42,
|
||||
31, 44,
|
||||
29, 47,
|
||||
27, 49,
|
||||
25, 52,
|
||||
23, 54,
|
||||
21, 57,
|
||||
20, 59,
|
||||
18, 62,
|
||||
17, 65,
|
||||
15, 67,
|
||||
14, 70,
|
||||
12, 73,
|
||||
11, 76,
|
||||
10, 79,
|
||||
9, 82,
|
||||
7, 85,
|
||||
6, 88,
|
||||
5, 90,
|
||||
5, 93,
|
||||
4, 97,
|
||||
3, 100,
|
||||
2, 103,
|
||||
2, 106,
|
||||
1, 109,
|
||||
1, 112,
|
||||
1, 115,
|
||||
0, 118,
|
||||
0, 121,
|
||||
0, 124,
|
||||
0, 127,
|
||||
0, 131,
|
||||
0, 134,
|
||||
0, 137,
|
||||
1, 140,
|
||||
1, 143,
|
||||
1, 146,
|
||||
2, 149,
|
||||
2, 152,
|
||||
3, 155,
|
||||
4, 158,
|
||||
5, 162,
|
||||
5, 165,
|
||||
6, 167,
|
||||
7, 170,
|
||||
9, 173,
|
||||
10, 176,
|
||||
11, 179,
|
||||
12, 182,
|
||||
14, 185,
|
||||
15, 188,
|
||||
17, 190,
|
||||
18, 193,
|
||||
20, 196,
|
||||
21, 198,
|
||||
23, 201,
|
||||
25, 203,
|
||||
27, 206,
|
||||
29, 208,
|
||||
31, 211,
|
||||
33, 213,
|
||||
35, 215,
|
||||
37, 218,
|
||||
40, 220,
|
||||
42, 222,
|
||||
44, 224,
|
||||
47, 226,
|
||||
49, 228,
|
||||
52, 230,
|
||||
54, 232,
|
||||
57, 234,
|
||||
59, 235,
|
||||
62, 237,
|
||||
65, 238,
|
||||
67, 240,
|
||||
70, 241,
|
||||
73, 243,
|
||||
76, 244,
|
||||
79, 245,
|
||||
82, 246,
|
||||
85, 248,
|
||||
88, 249,
|
||||
90, 250,
|
||||
93, 250,
|
||||
97, 251,
|
||||
100, 252,
|
||||
103, 253,
|
||||
106, 253,
|
||||
109, 254,
|
||||
112, 254,
|
||||
115, 254,
|
||||
118, 255,
|
||||
121, 255,
|
||||
124, 255,
|
||||
};
|
||||
static uint8_t tx_datagram[32] = {
|
||||
/* FIXME test data */
|
||||
0x00, 0xff, 0xAA, 0x55, 0xfe, 0x18, 0xcc, 0x10,
|
||||
0x00, 0xff, 0xAA, 0x55, 0xfe, 0x18, 0xcc, 0x10,
|
||||
0x00, 0xff, 0xAA, 0x55, 0xfe, 0x18, 0xcc, 0x10,
|
||||
0x00, 0xff, 0xAA, 0x55, 0xfe, 0x18, 0xcc, 0x10 };
|
||||
static size_t tx_bitpos = 0;
|
||||
static size_t tx_sympos = 0;
|
||||
static int tx_last_bit = 0;
|
||||
|
||||
|
||||
int main(void) {
|
||||
|
|
@ -401,11 +155,10 @@ int main(void) {
|
|||
TIM1->CR1 |= TIM_CR1_CEN;
|
||||
|
||||
DMAMUX1->CCR = 25;
|
||||
DMA1_Channel1->CCR = (1<<DMA_CCR_MSIZE_Pos) | (1<<DMA_CCR_PSIZE_Pos) | DMA_CCR_MINC | DMA_CCR_CIRC | DMA_CCR_DIR | DMA_CCR_TCIE;
|
||||
DMA1_Channel1->CNDTR = COUNT_OF(waveform);
|
||||
DMA1_Channel1->CPAR = &TIM1->DMAR;
|
||||
DMA1_Channel1->CMAR = &waveform;
|
||||
DMA1_Channel1->CCR |= DMA_CCR_EN;
|
||||
DMA1_Channel1->CPAR = (uint32_t)&TIM1->DMAR;
|
||||
NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
||||
NVIC_SetPriority(DMA1_Channel1_IRQn, 0);
|
||||
dma_tx_constant(COUNT_OF(waveform_zero_one), 0x00);
|
||||
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
|
|
@ -420,6 +173,55 @@ int main(void) {
|
|||
}
|
||||
}
|
||||
|
||||
void dma_tx_waveform(size_t table_size, const uint16_t *table) {
|
||||
DMA1_Channel1->CCR = 0;
|
||||
DMA1_Channel1->CCR = (1<<DMA_CCR_MSIZE_Pos) | (1<<DMA_CCR_PSIZE_Pos) | DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE;
|
||||
DMA1_Channel1->CNDTR = table_size;
|
||||
DMA1_Channel1->CMAR = (uint32_t)table;
|
||||
DMA1_Channel1->CCR |= DMA_CCR_EN;
|
||||
}
|
||||
|
||||
void dma_tx_constant(size_t table_size, uint16_t constant) {
|
||||
static uint16_t tx_constant;
|
||||
tx_constant = constant;
|
||||
|
||||
DMA1_Channel1->CCR = 0;
|
||||
DMA1_Channel1->CCR = (1<<DMA_CCR_MSIZE_Pos) | (1<<DMA_CCR_PSIZE_Pos) | DMA_CCR_DIR | DMA_CCR_TCIE;
|
||||
DMA1_Channel1->CNDTR = table_size;
|
||||
DMA1_Channel1->CMAR = (uint32_t)&tx_constant;
|
||||
DMA1_Channel1->CCR |= DMA_CCR_EN;
|
||||
}
|
||||
|
||||
void DMA1_Channel1_IRQHandler() {
|
||||
static int transfer_errors = 0;
|
||||
if (DMA1->ISR & DMA_ISR_TEIF1) {
|
||||
transfer_errors ++;
|
||||
}
|
||||
|
||||
DMA1->IFCR = DMA_IFCR_CGIF1;
|
||||
|
||||
int bit = !!(tx_datagram[tx_sympos] & (1<<tx_bitpos));
|
||||
|
||||
if (tx_last_bit == bit) {
|
||||
dma_tx_constant(COUNT_OF(waveform_zero_one), bit ? WAVEFORM_CONST_ONE : WAVEFORM_CONST_ZERO);
|
||||
} else if (bit) {
|
||||
dma_tx_waveform(COUNT_OF(waveform_zero_one), waveform_zero_one);
|
||||
} else {
|
||||
dma_tx_waveform(COUNT_OF(waveform_zero_one), waveform_one_zero);
|
||||
}
|
||||
|
||||
tx_last_bit = bit;
|
||||
|
||||
tx_bitpos ++;
|
||||
if (tx_bitpos >= 8) {
|
||||
tx_bitpos = 0;
|
||||
tx_sympos ++;
|
||||
if (tx_sympos >= COUNT_OF(tx_datagram)) {
|
||||
tx_sympos = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t read_fuse_monitor() {
|
||||
uint32_t idr_a = GPIOA->IDR;
|
||||
uint32_t idr_c = GPIOC->IDR;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue