implemented simple dataprocessor function. It (in TRANSPARENT mode) takes averaged data and copies it to the FFT_buff.

This commit is contained in:
2025-10-06 16:08:42 +03:00
parent 9b02f0af1c
commit 6670031bcc
10 changed files with 9975 additions and 9332 deletions

View File

@ -34,7 +34,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 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 FFT_buff[FFT_BUFF_SIZE] __attribute__((section(".sdram_noinit")));
volatile uint32_t FFT_buff[FFT_BUFF_SIZE] __attribute__((section(".sdram_noinit")));
/** Размер буфера на прием данных по SPORT0 в 32-битных словах */

View File

@ -87,7 +87,7 @@ 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 AVG_buff[]; //size: AVG_BUFF_SIZE
//extern volatile uint32_t AVG_buff_B[]; //size: AVG_BUFF_SIZE
//extern volatile uint32_t FFT_buff[]; //size: FFT_BUFF_SIZE
extern volatile uint32_t FFT_buff[]; //size: FFT_BUFF_SIZE
volatile uint32_t TX_marker[10] = {0xFE00000F,0xFE0000F0, 0xFE000F00, 0xFE00F000, 0xFE0F0000,0xFEF00000, 0xFE0F0000,0xFE00F000, 0xFE000F00, 0xFE0000F0};
@ -102,6 +102,7 @@ volatile struct dataprocessor_dypedef{
uint32_t TX_buff_I;
uint8_t TX_buff_state; //0 --blocked, 1 -- filling, 2 -- ready to send
uint32_t AVG_buff_I;
uint32_t AVG_buff_I_last;
uint8_t AVG_state;
uint8_t AVG_buff_state;
uint8_t AVG_buff_active;
@ -138,6 +139,22 @@ uint8_t LFSM_started = 0;
uint8_t DY_SYN_2_value = 0;
uint8_t DY_SYN_2_value_prev = 0;
uint32_t dataprocessor(uint32_t* AVG_buff, uint32_t AVG_buff_I_max, uint32_t* FFT_buff, uint8_t mode){
uint32_t FFT_buff_I = 0;
if (mode == TRANSPARENT){
uint32_t i = 0;
while ((FFT_buff_I < FFT_BUFF_SIZE) && (i < AVG_BUFF_SIZE)){
FFT_buff[FFT_buff_I++] = AVG_buff[i++];
}
}
return FFT_buff_I;
}
/***************************************************************************//**
@brief Обработка принятого массива данных АЦП/DIN.
@ -241,12 +258,23 @@ uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
//Proc_state.average_N = 0;
//if (1){
Proc_state.AVG_state = FULLY_COMPLETED;
for(uint32_t i = 0; i < FFT_BUFF_SIZE; i++){
FFT_buff[i] = 0;
}
uint32_t FFT_res_size = dataprocessor(AVG_buff, Proc_state.AVG_buff_I_last, FFT_buff, TRANSPARENT);
//averaging completed => copy average results to TX_buff and start avg again
TX_buff_I = 0;
// for (uint32_t i = 0; ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)); i++){
uint32_t i = 0;
while ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)){
TX_buff[TX_buff_I++] = AVG_buff[i++];
// while ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)){
// TX_buff[TX_buff_I++] = AVG_buff[i++];
while ((TX_buff_I < TX_BUFF_SIZE) && (i < FFT_BUFF_SIZE)){
TX_buff[TX_buff_I++] = FFT_buff[i++];
//TX_buff[TX_buff_I++] = 0xB0000000 + Proc_state.average_N;
//TX_buff[TX_buff_I++] = 0xC1000000;
}
@ -254,7 +282,7 @@ uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
//clear AVG_buff:
for (uint32_t i = 0; i < AVG_BUFF_SIZE; i++ ){
AVG_buff[i] = 0xC2000000;
AVG_buff[i] = 0xE0000000;
}
TX_buff_state = TODO_TX;
@ -292,12 +320,20 @@ uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
// AVG_buff[Proc_state.AVG_buff_I] = 0xC0000000 | some_i++;
// AVG_buff[Proc_state.AVG_buff_I] = 0xC0000000 | val;
//AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000;
Proc_state.AVG_buff_I_last = Proc_state.AVG_buff_I;
Proc_state.AVG_buff_I++;
if (Proc_state.AVG_buff_I >= AVG_BUFF_SIZE){
Proc_state.AVG_state = STEP_COMPLETED;
}
}
}
}else{
AVG_buff[Proc_state.AVG_buff_I] = 0xC1000000;
Proc_state.AVG_buff_I_last = Proc_state.AVG_buff_I;
Proc_state.AVG_buff_I++;
if (Proc_state.AVG_buff_I >= AVG_BUFF_SIZE){
Proc_state.AVG_state = STEP_COMPLETED;
}
}
}
}
@ -587,7 +623,7 @@ void usr_cmd_process(t_l502_bf_cmd *cmd) {
Proc_state.mode = AVG;
Proc_state.mode_next = AVG;
Proc_state.LFSM_state = CYCLE_UNKNOWN;
Proc_state.average_N_max = 5;
Proc_state.average_N_max = 1;
// Proc_state.average_N_max = cmd->param;
Proc_state.average_N = 0;
Proc_state.TX_buff_I = 0;

View File

@ -12,7 +12,7 @@
//#define TX_BUFF_SIZE 100000
#define RAW_DATA_BUFF_SIZE 1000
#define AVG_BUFF_SIZE 2000
#define FFT_BUFF_SIZE 1000
#define FFT_BUFF_SIZE 2000
//#define L502_SPORT_IN_BUF_SIZE (2048*1024)