This commit is contained in:
awe
2026-04-07 20:20:46 +03:00
parent fe6297d9b9
commit dff65627fe
7 changed files with 129 additions and 59 deletions

0
.codex Normal file
View File

7
local.mk.example Normal file
View File

@ -0,0 +1,7 @@
# Local Blackfin toolchain override for this project.
#
# Option 1: point to the toolchain root that contains bin/bfin-elf-gcc
# BFIN_TOOLCHAIN := /opt/analog/bfin-elf
#
# Option 2: provide the full compiler prefix directly
# CROSS_COMPILE := /opt/analog/bfin-elf/bin/bfin-elf-

118
makefile
View File

@ -1,6 +1,8 @@
BUILDDIR = build BUILDDIR = build
CONFIG ?= release CONFIG ?= release
-include local.mk
CONFIGDIR = $(BUILDDIR)/$(CONFIG) CONFIGDIR = $(BUILDDIR)/$(CONFIG)
@ -11,11 +13,46 @@ LSTDIR = $(CONFIGDIR)/lst
DEPDIR = $(CONFIGDIR)/.dep DEPDIR = $(CONFIGDIR)/.dep
TRGT = bfin-elf- BFIN_TOOLCHAIN ?=
CC = $(TRGT)gcc CROSS_COMPILE ?=
CP = $(TRGT)objcopy
AS = $(TRGT)gcc -x assembler-with-cpp ifeq ($(strip $(CROSS_COMPILE)),)
LDR = $(TRGT)ldr ifneq ($(strip $(BFIN_TOOLCHAIN)),)
ifneq ($(wildcard $(BFIN_TOOLCHAIN)/bin/bfin-elf-gcc),)
TRGT = $(BFIN_TOOLCHAIN)/bin/bfin-elf-
else ifneq ($(wildcard $(BFIN_TOOLCHAIN)/bfin-elf-gcc),)
TRGT = $(BFIN_TOOLCHAIN)/bfin-elf-
else
TRGT = $(BFIN_TOOLCHAIN)/bin/bfin-elf-
endif
else
TRGT = bfin-elf-
endif
else
TRGT = $(CROSS_COMPILE)
endif
CC = $(TRGT)gcc
CP = $(TRGT)objcopy
AS = $(TRGT)gcc -x assembler-with-cpp
LDR = $(TRGT)ldr
TOOLCHAIN_SKIP_CHECK_GOALS = clean help print-toolchain
TOOLCHAIN_CHECK = 1
ifneq ($(strip $(MAKECMDGOALS)),)
ifeq ($(strip $(filter-out $(TOOLCHAIN_SKIP_CHECK_GOALS),$(MAKECMDGOALS))),)
TOOLCHAIN_CHECK = 0
endif
endif
ifeq ($(TOOLCHAIN_CHECK),1)
ifeq ($(strip $(shell command -v $(CC) 2>/dev/null)),)
$(error Blackfin GCC toolchain not found: '$(CC)'. Set BFIN_TOOLCHAIN=/abs/path/to/bfin-elf or CROSS_COMPILE=/abs/path/to/bin/bfin-elf-)
endif
ifeq ($(strip $(shell command -v $(LDR) 2>/dev/null)),)
$(error Blackfin loader tool not found: '$(LDR)'. Set BFIN_TOOLCHAIN=/abs/path/to/bfin-elf or CROSS_COMPILE=/abs/path/to/bin/bfin-elf-)
endif
endif
LDRFLAGS = -T BF527 LDRFLAGS = -T BF527
@ -131,14 +168,29 @@ CPFLAGS += -MD -MP -MF $(DEPDIR)/$(@F).d
#bfin-elf-gcc $(CPFLAGS) -I . $(INCDIR) $(LDFLAGS) $(SRC) -o bf-test.elf #bfin-elf-gcc $(CPFLAGS) -I . $(INCDIR) $(LDFLAGS) $(SRC) -o bf-test.elf
.PHONY: all clean prj dirs .PHONY: all clean prj dirs help print-toolchain
.SECONDEXPANSION: .SECONDEXPANSION:
all: dirs $(RESULT_FILES) all: dirs $(RESULT_FILES)
help:
$(OBJS) : $$(filter %/$$(basename $$(notdir $$@)).c, $$(SRC)) ##$$(patsubst %.o,%.c, $$@) @echo "Blackfin firmware build"
$(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ @echo " make"
@echo " make CONFIG=debug"
@echo " make BFIN_TOOLCHAIN=/abs/path/to/bfin-elf"
@echo " make CROSS_COMPILE=/abs/path/to/bin/bfin-elf-"
@echo " make print-toolchain"
print-toolchain:
@echo "TRGT=$(TRGT)"
@echo "CC=$(CC)"
@echo "AS=$(AS)"
@echo "CP=$(CP)"
@echo "LDR=$(LDR)"
$(OBJS) : $$(filter %/$$(basename $$(notdir $$@)).c, $$(SRC)) ##$$(patsubst %.o,%.c, $$@)
$(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@
$(AOBJS) : $(ASRC) $(AOBJS) : $(ASRC)
$(AS) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ $(AS) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@
@ -153,23 +205,23 @@ dirs: $(BUILDDIR) $(CONFIGDIR) $(DEPDIR) $(OBJDIR) $(LSTDIR) $(BINDIR)
$(BINDIR): $(BINDIR):
mkdir $(BINDIR) mkdir -p $(BINDIR)
$(LSTDIR): $(LSTDIR):
mkdir $(LSTDIR) mkdir -p $(LSTDIR)
$(OBJDIR): $(OBJDIR):
mkdir $(OBJDIR) mkdir -p $(OBJDIR)
$(BUILDDIR): $(BUILDDIR):
mkdir $(BUILDDIR) mkdir -p $(BUILDDIR)
$(CONFIGDIR): $(CONFIGDIR):
mkdir $(CONFIGDIR) mkdir -p $(CONFIGDIR)
$(DEPDIR): $(DEPDIR):
mkdir $(DEPDIR) mkdir -p $(DEPDIR)
clean: clean:
-rm -fR $(CONFIGDIR) -rm -fR $(CONFIGDIR)

20
src/l502_fft_config.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef L502_FFT_CONFIG_H_
#define L502_FFT_CONFIG_H_
#ifndef FP_acc
#define FP_acc 1000
#endif
#ifndef FFT_INP_DATA_L
#define FFT_INP_DATA_L (1 << 9)
#endif
#ifndef DATA_L
#define DATA_L FFT_INP_DATA_L
#endif
#ifndef TWIDDLE_L
#define TWIDDLE_L (DATA_L / 2)
#endif
#endif

View File

@ -48,7 +48,7 @@ volatile uint32_t TX_buff_shadow[TX_BUFF_SIZE] __attribute__((section(".sdram_no
//volatile uint32_t RAW_data_buff[RAW_DATA_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); //volatile uint32_t RAW_data_buff[RAW_DATA_BUFF_SIZE] __attribute__((section(".sdram_noinit")));
volatile uint32_t AVG_buff[AVG_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); volatile uint32_t AVG_buff[AVG_BUFF_SIZE] __attribute__((section(".sdram_noinit")));
//volatile uint32_t AVG_buff_B[AVG_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); //volatile uint32_t AVG_buff_B[AVG_BUFF_SIZE] __attribute__((section(".sdram_noinit")));
volatile uint64_t FFT_buff[FFT_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); volatile int64_t FFT_buff[FFT_BUFF_SIZE] __attribute__((section(".sdram_noinit")));

View File

@ -87,10 +87,10 @@ extern volatile uint32_t TX_buff_shadow[]; //size: TX_BUFF_SIZE
//extern volatile uint32_t RAW_data_buff[]; //size: RAW_DATA_BUFF_SIZE //extern volatile uint32_t RAW_data_buff[]; //size: RAW_DATA_BUFF_SIZE
extern volatile uint32_t AVG_buff[]; //size: AVG_BUFF_SIZE extern volatile uint32_t AVG_buff[]; //size: AVG_BUFF_SIZE
//extern volatile uint32_t AVG_buff_B[]; //size: AVG_BUFF_SIZE //extern volatile uint32_t AVG_buff_B[]; //size: AVG_BUFF_SIZE
extern volatile uint64_t FFT_buff[]; //size: FFT_BUFF_SIZE extern volatile int64_t FFT_buff[]; //size: FFT_BUFF_SIZE
extern volatile int64_t twiddle_re[]; //size: TWIDDLE_L extern int64_t twiddle_re[]; //size: TWIDDLE_L
extern volatile int64_t twiddle_im[]; //size: TWIDDLE_L extern int64_t twiddle_im[]; //size: TWIDDLE_L
volatile uint32_t TX_marker[10] = {0xFE00000F,0xFE0000F0, 0xFE000F00, 0xFE00F000, 0xFE0F0000,0xFEF00000, 0xFE0F0000,0xFE00F000, 0xFE000F00, 0xFE0000F0}; volatile uint32_t TX_marker[10] = {0xFE00000F,0xFE0000F0, 0xFE000F00, 0xFE00F000, 0xFE0F0000,0xFEF00000, 0xFE0F0000,0xFE00F000, 0xFE000F00, 0xFE0000F0};
@ -173,7 +173,7 @@ static int64_t isqrt64(int64_t x) {
uint32_t dataprocessor(uint32_t* AVG_buff, uint32_t AVG_buff_I_max, uint64_t* FFT_buff, uint8_t mode){ uint32_t dataprocessor(uint32_t* AVG_buff, uint32_t AVG_buff_I_max, int64_t* FFT_buff, uint8_t mode){
uint32_t FFT_buff_I = 0; uint32_t FFT_buff_I = 0;
if (mode == TRANSPARENT){ if (mode == TRANSPARENT){
uint32_t i = 0; uint32_t i = 0;
@ -182,7 +182,7 @@ uint32_t dataprocessor(uint32_t* AVG_buff, uint32_t AVG_buff_I_max, uint64_t* FF
} }
}else if (mode == FFT){ }else if (mode == FFT){
//uint32_t i = 0; //uint32_t i = 0;
//void FFT_fp(int64_t* inp, uint32_t inp_L, int64_t* buf) //void FFT_fp(const uint32_t* inp, uint32_t inp_L, int64_t* buf)
//for (uint32_t i = 0; i < FFT_INP_DATA_L; ++i){ //for (uint32_t i = 0; i < FFT_INP_DATA_L; ++i){
//AVG_buff[i] = FP_acc; //AVG_buff[i] = FP_acc;
//} //}

View File

@ -9,26 +9,17 @@
пользователем для написания своих алгоритмов обработки данных и реализации пользователем для написания своих алгоритмов обработки данных и реализации
пользовательских команд. пользовательских команд.
******************************************************************************/ ******************************************************************************/
#include "l502_cmd.h" #include "l502_cmd.h"
#ifndef L502_USER_PROCESS_H_ #include "l502_fft_config.h"
#ifndef L502_USER_PROCESS_H_
#define FP_acc 1000
#define L502_USER_PROCESS_H_ #define L502_USER_PROCESS_H_
#ifndef FFT_FP_EXTERNAL_TWIDDLES #ifndef FFT_FP_EXTERNAL_TWIDDLES
#define FFT_FP_EXTERNAL_TWIDDLES 1 #define FFT_FP_EXTERNAL_TWIDDLES 1
#endif #endif
#ifndef FFT_INP_DATA_L
#define FFT_INP_DATA_L (1 << 9) /* остальной код заголовка */
#endif
#ifndef DATA_L
#define DATA_L FFT_INP_DATA_L
#endif
#ifndef TWIDDLE_L
#define TWIDDLE_L (DATA_L / 2)
#endif
/* остальной код заголовка */
//#endif /* L502_USER_PROCESS_H_ */ //#endif /* L502_USER_PROCESS_H_ */