working processing and transferring data to PC via TX_buff. TX_buff is still limited in size because it is located in a small L1, not in SDRAM

This commit is contained in:
2025-07-17 19:08:56 +03:00
parent 25742203e9
commit f19d963f09
19 changed files with 4188 additions and 3432 deletions

View File

@ -21,11 +21,50 @@
#include "l502_stream.h"
uint32_t streams_cnt[4] = {0,};
uint32_t sport_rx_copy[1024] = {0,};
#define LFSM_val_ON 0b01100111
#define LFSM_val_OFF 0b01101000
#define LFSM_val_X 0b01101001
//#define TX_BUFF_SIZE 1024*1024
#define TX_BUFF_SIZE 100
#define LFSM_DATALEN 1024
#define dbg_sport_rx_copy_size 10
//#define LFSM_DATALEN 1024
//#pragma section("sdram_noinit", NO_INIT)
//#include "l502_sdram_noinit.h"
//__attribute__((section(".sdram_noinit"), far))
//static volatile uint32_t dbg_sport_rx_copy[TX_BUFF_SIZE];
//uint32_t dbg_sport_rx_copy[TX_BUFF_SIZE];// = {0,};
uint32_t dbg_sport_rx_copy[dbg_sport_rx_copy_size];// = {0,};
//*
//#include "l502_sdram_noinit.h"
//static volatile uint32_t LFSM_data[LFSM_DATALEN] = {0,};
#include "l502_sdram_noinit.h"
volatile uint32_t TX_buff[TX_BUFF_SIZE];// __attribute__((section(".sdram_noinit")));
// = {0,};
uint32_t streams_succes_flag = 0;
/*
struct dataprocess_typedef {
uint8_t config = 0;
uint32_t datapoints_max_N = 0;
uint32_t datapoint_curr_I = 0;
uint32_t data_raw;
};
*/
//int f_sport_test(void);
void l502_stream_init(void);
@ -57,15 +96,83 @@ uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
/* если есть свободные дескрипторы на передачу по HDMA - ставим блок на
передачу. Иначе возвращаем 0, чтобы на обработку этих данных функцию
вызвали бы позже */
++streams_cnt[0];
/*
for (int i = 0; i < TX_BUFF_SIZE; ++i){
TX_buff[i] = 0x00000000;
}
*/
//for (int i = 0; i < dbg_sport_rx_copy; ++i){
// dbg_sport_rx_copy[i] = data[i];
//}
//*
uint32_t radar_word_I = 0;
uint32_t TX_buff_I = 0;
for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){
uint32_t word = data[data_I];
uint32_t val = word & 0x00FFFFFF;
uint8_t header = (uint8_t)(word >> 24);
//11010000
if (((header & 0b10000000) == 0b10000000)){ //it`s ADC word
if (header == 0XD0){ //phy channel № 1 in common mode
//TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_ON) << 24) & val;
TX_buff[TX_buff_I++] = 0xD0ADEFEA;
}else if (header == 0xD1){//phy channel № 2 in common mode
//TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_OFF) << 24) & val;
TX_buff[TX_buff_I++] = 0xD0ADEFEB;
}else{
//TX_buff[TX_buff_I++] = word;
//TX_buff[TX_buff_I++] = 0xD0AAAAAA;
}
} else if ( header == 0b00000000){ //it`s digital
if (word & (0b11 << 16)){
TX_buff[TX_buff_I++] = 0b01101010 << 24;
}
} else{
TX_buff[TX_buff_I++] = word;
}
// }else if ((header & 0b00000000) == ){
// }else if ((header & 0b00000000) == ){
// }else if ((header & 0b00000000) == ){
// }else if ((header & 0b00000000) == ){
// }else if ((header & 0b00000000) == ){
for (int i = 0; i < 1024; ++i){
sport_rx_copy[i] = data[i];
}
//stream_in_buf_free(size);
/*
//int i = 0;
//uint8_t
//while
for (int i = 0; i < LFSM_DATALEN; ++i){
uint32_t msg;
if (i % 2){
msg = (LFSM_val_ON << 24) + data[i];
}else{
msg = (LFSM_val_OFF << 24) + data[i];
}
LFSM_data[i] = msg;
}
*/
if (hdma_send_req_rdy()) {
streams_cnt[0] = hdma_send_req_start(data, size, 0);
//streams_cnt[0]
hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0);
//hdma_send_req_start(data, size, 0);
//hdma_send_req_start(data, size, 0);
//streams_cnt[0] = hdma_send_req_start(LFSM_data, LFSM_DATALEN, 0);
return size;
}
return 0;
@ -219,7 +326,7 @@ void usr_cmd_process(t_l502_bf_cmd *cmd) {
uint32_t err_codes[15] = {0,};
err_codes[0] = params_set_lch_cnt(1);
//err_codes[1] = params_set_lch(1, 1, L502_LCH_MODE_COMM, L502_ADC_RANGE_5, 1, 0);// chan index 1, chan 1, mode L502_LCH_MODE_COMM (=1),range L502_ADC_RANGE_5 (=1), avg, flags
err_codes[1] = params_set_lch(1, 1, L502_LCH_MODE_COMM, L502_ADC_RANGE_5, 1, 0);// chan index 1, chan 1, mode L502_LCH_MODE_COMM (=1),range L502_ADC_RANGE_5 (=1), avg, flags
err_codes[1] = params_set_lch(0, 0, L502_LCH_MODE_COMM, L502_ADC_RANGE_5, 1, 0);// chan index 1, chan 1, mode L502_LCH_MODE_COMM (=1),range L502_ADC_RANGE_5 (=1), avg, flags
err_codes[2] = params_set_adc_freq_div(1);
err_codes[3] = params_set_ref_freq(2000000);
err_codes[4] = params_set_adc_interframe_delay(0);
@ -261,19 +368,22 @@ void usr_cmd_process(t_l502_bf_cmd *cmd) {
l502_cmd_done(streams_sum, streams_cnt, 4);
break;
}
case 0x8006:{ //get data from SPORT_RX copied arr
uint32_t sport_rx_nonzero_sum = 0;
for (int i = 0; i < 1024; ++i){
if (sport_rx_copy[i]){
for (int i = 0; i < dbg_sport_rx_copy_size; ++i){
if (dbg_sport_rx_copy[i]){
++sport_rx_nonzero_sum;
}
}
l502_cmd_done(sport_rx_nonzero_sum, sport_rx_copy, 1024);
l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024);
break;
}
case 0x8007:{ //get data from SPORT_RX copied arr
case 0x8007:{ //start data processing
l502_cmd_done(cmd-> param, NULL, 0);
break;
}