From 2bf0e01f207e7b28bbd2af93823e6a960b805c3c Mon Sep 17 00:00:00 2001 From: Theodor Chikin Date: Wed, 2 Jul 2025 15:47:24 +0300 Subject: [PATCH] implemented more accurate display of received arrays. Also implemented printing arrays as binary data. Working receive (by command) last piece of SPORT0 data --- BF_companion | Bin 21824 -> 21952 bytes main.c | 255 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 246 insertions(+), 9 deletions(-) diff --git a/BF_companion b/BF_companion index 758024bcb099a19a814440bf6fb2a1b9caabdda6..e6db2f3c629982491cd034ba2a582ddf2a4d9c44 100755 GIT binary patch delta 5320 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 #include +#include "l502_BF_enums.h" +#include "l502_fpga_regs.h" + // количество используемых логических каналов // #define ADC_LCH_CNT 1 @@ -330,6 +333,174 @@ int32_t f_setup_params(t_x502_hnd hnd) { return err; } + +void uin32_t_to_bin(uint32_t val, char* string){ + for (int i = 0; i < 8; ++i){ + if (val & (0b1 << i)){ + string[i] = '1'; + }else{ + string[i] = '0'; + } + } +} + + +uint32_t BF_exec_cmd_simple(t_x502_hnd hnd, uint16_t cmd_code, uint32_t cmd_par, uint8_t verbosity_lvl){ + + uint32_t BF_cmd_receive_code = 0; + //uint16_t cmd_code = 0x8001; //read ADC data + //uint32_t cmd_par = 87; + const uint32_t snd_data[1] = {0,}; + uint32_t snd_size = 0; + uint32_t rcv_data[100] = {0,}; + uint32_t rcv_size = 100; + uint32_t tout = 1; + uint32_t recvd_size = 0; +//*/ + if (verbosity_lvl == 2){ + printf("\n\n"); + + printf("TX cmd_code: 0x%X\n", cmd_code); + printf("TX tout: %u\n", tout); + printf("TX par: %u\n", cmd_par); + printf("TX snd_data size: %u\n", snd_size); + for (int i = 0; i < snd_size; ++i){ + printf(" 0x%0X,", snd_data[i]); + } + printf("\n"); + printf("TX rcv_size: %u\n", rcv_size); + } + + BF_cmd_receive_code = X502_BfExecCmd (hnd, + cmd_code, + cmd_par, + snd_data, + snd_size, + rcv_data, + rcv_size, + tout, + &recvd_size); + + if (verbosity_lvl == 2){ + + printf("\n======================\n\n"); + printf("RX received code dec: %u hex: 0x%3X, %d\n", BF_cmd_receive_code, BF_cmd_receive_code,BF_cmd_receive_code); + printf("RX recvd_size: %u\n", recvd_size); + printf("RX received_data:\n" ); + for (int i = 0; i < recvd_size; ++i){ + printf(" 0x%0X,", rcv_data[i]); + } + printf("\n\n\n\n"); + } + + + + if (verbosity_lvl == 1){ + printf("\ncmd: 0x%0X, par: %d, rcv_code: %d, result[0]: %d (0x%0X) , result_L: %d\n", cmd_code, cmd_par, BF_cmd_receive_code, rcv_data[0],rcv_data[0], recvd_size); + } + return BF_cmd_receive_code; +} + +uint32_t BF_exec_cmd_with_arr(t_x502_hnd hnd, uint16_t cmd_code, uint32_t cmd_par, uint32_t* snd_data, uint32_t snd_data_size, uint8_t verbosity_lvl){ + + uint32_t BF_cmd_receive_code = 0; + //uint16_t cmd_code = 0x8001; //read ADC data + //uint32_t cmd_par = 87; + //const uint32_t snd_data[1] = {0,}; + //uint32_t snd_data_size = 0; + uint32_t rcv_data[100] = {0,}; + uint32_t rcv_size = 100; + uint32_t tout = 1; + uint32_t recvd_size = 0; +//*/ + if (verbosity_lvl == 2){ + printf("\n\n"); + printf("TX cmd_code: 0x%X\n", cmd_code); + printf("TX tout: %u\n", tout); + printf("TX par: %u\n", cmd_par); + printf("TX snd_data size: %u\n", snd_data_size); + for (int i = 0; i < snd_data_size; ++i){ + printf(" 0x%0X,", snd_data[i]); + } + printf("\n"); + printf("TX rcv_size: %u\n", rcv_size); + } + + BF_cmd_receive_code = X502_BfExecCmd (hnd, + cmd_code, + cmd_par, + snd_data, + snd_data_size, + rcv_data, + rcv_size, + tout, + &recvd_size); + + if (verbosity_lvl == 2){ + + printf("\n======================\n\n"); + printf("RX received code dec: %u hex: 0x%3X, %d\n", BF_cmd_receive_code, BF_cmd_receive_code,BF_cmd_receive_code); + printf("RX recvd_size: %u\n", recvd_size); + printf("RX received_data:\n" ); + for (int i = 0; i < recvd_size; ++i){ + printf(" 0x%0X,", rcv_data[i]); + } + printf("\n\n\n\n"); + } + + + + if (verbosity_lvl == 1){ + printf("\n"); + printf("cmd: 0x%0X, par: %d, rcv_code: %d, result[0]: %d (0x%0X) , result_L: %d\n", cmd_code, cmd_par, BF_cmd_receive_code, rcv_data[0],rcv_data[0], recvd_size); + printf(" TX arr: "); + for (int i = 0; i < snd_data_size; ++i){ + printf(" 0x%0X,", snd_data[i]); + } + printf("\n"); + printf(" RX arr: "); + int values_in_line = 0; + + for (int i = 0; i < recvd_size; ++i){ + printf(" 0x%08X,", rcv_data[i]); + ++values_in_line; + if (values_in_line == 10){ + printf("\n"); + values_in_line = 0; + } + } + printf("\n"); + } + + if (verbosity_lvl == 3){ + printf("\n"); + printf("cmd: 0x%0X, par: %d, rcv_code: %d, result[0]: %d (0x%0X) , result_L: %d\n", cmd_code, cmd_par, BF_cmd_receive_code, rcv_data[0],rcv_data[0], recvd_size); + printf(" TX arr: "); + for (int i = 0; i < snd_data_size; ++i){ + printf(" 0x%0X,", snd_data[i]); + } + printf("\n"); + printf(" RX arr: "); + int values_in_line = 0; + for (int i = 0; i < recvd_size; ++i){ + char bin_str_val[9] = {0,}; + uin32_t_to_bin(rcv_data[i], bin_str_val); + //printf(" 0x%0X,", rcv_data[i]); + printf(" 0b%s,", bin_str_val); + ++values_in_line; + if (values_in_line == 10){ + printf("\n"); + values_in_line = 0; + } + } + printf("\n"); + } + + return BF_cmd_receive_code; +} + + + int main(int argc, char** argv) { int32_t err = X502_ERR_OK; uint32_t ver; @@ -416,17 +587,83 @@ int main(int argc, char** argv) { */ printf("\n\n\n"); -//* + //setup ADC: + + //t_x502_hnd hnd, uint16_t cmd_code, uint32_t cmd_arg, uint8_t verbosity_lvl + //BF_exec_cmd_simple(hnd, L502_BF_CMD_CODE_GET_PARAM, 87, 2); + //BF_exec_cmd_simple(hnd, L502_BF_CMD_CODE_GET_PARAM, 87, 1); + //BF_exec_cmd_simple(hnd, L502_BF_CMD_CODE_GET_PARAM, 87, 0); + + + //BF_exec_cmd_simple(hnd, L502_BF_USR_CMD_CODE_ECHO, 87, 1); + //BF_exec_cmd_simple(hnd, L502_BF_USR_CMD_CODE_DATA_ECHO, 87, 1); + + //BF_exec_cmd_with_arr(t_x502_hnd hnd, uint16_t cmd_code, uint32_t cmd_par, uint32_t* snd_data, uint32_t snd_data_size, uint8_t verbosity_lvl); + + //uint32_t tx_data[] = {0,1,2,3,4,53,4,2,2,1,0}; + //uint32_t tx_data_size = 11; + + //BF_exec_cmd_with_arr(hnd, L502_BF_USR_CMD_CODE_DATA_ECHO, 328, tx_data, tx_data_size, 2); + //BF_exec_cmd_with_arr(hnd, L502_BF_USR_CMD_CODE_DATA_ECHO, 328, tx_data, tx_data_size, 1); + + //setup ADC: + uint32_t tx_data[] = {0,1,2,3,4,53,4,2,2,1,0}; + + //set ADC Установка значения опорной частоты + uint32_t tx_data_size = 1; + tx_data[0] = 2000000; //valid values: 2000000, 1500000 Hz + //printf("\n"); + + //BF_exec_cmd_with_arr(hnd, L502_BF_CMD_CODE_SET_PARAM, L502_BF_PARAM_REF_FREQ_SRC, tx_data, tx_data_size, 2); + + //printf("run tests\n"); + //BF_exec_cmd_simple(hnd, 0x8010, 17, 1); //test SPORT0 + + + //BF_exec_cmd_simple(hnd, 0x8003U, 0, 1); + printf("setup ADC\n"); + BF_exec_cmd_with_arr(hnd, 0x8003U, 0, NULL, 0, 1); //setup ADC. Values in array are configuring functions return codes + + //some delay to allow ADC to acquire some data + + //printf("L502_REGS_IOHARD_OUTSWAP_BFCTL reg:"); + //BF_exec_cmd_simple(hnd, 0x8006, L502_REGS_IOHARD_OUTSWAP_BFCTL, 1); //reaf fpga reg + + printf("\n"); + printf("start streams sampling\n"); + BF_exec_cmd_with_arr(hnd, 0x8004U, 0, NULL, 0, 1); //setup and start streams + + + + uint32_t waiting_cnt = 1; + //waiting_cnt = 1000; + printf("\nwaiting %d ...", waiting_cnt); + while(--waiting_cnt){;} + //for(uint32_t timeout = 100000000; timeout; --timeout){;} + printf("done\n"); + + printf("get counters of calls of SPORT_RX, SPORT_TX, HDMA_RX, HDMA_TX\n"); + BF_exec_cmd_with_arr(hnd, 0x8005U, 100, NULL, 0, 1); + + + printf("get a some data made by sport isr handler\n"); + BF_exec_cmd_with_arr(hnd, 0x8006U, 100, NULL, 0, 1); + BF_exec_cmd_with_arr(hnd, 0x8006U, 100, NULL, 0, 3); + + + + +/* //uint16_t cmd_code = 0x80001U; - uint16_t cmd_code = 0x8001; + uint16_t cmd_code = 0x8001; //read ADC data uint32_t par = 87; const uint32_t snd_data[] = {1,1,2,2,3,4,5,56,67,23,1}; - uint32_t snd_size = 11; - uint32_t rcv_data[13] = {0,}; - uint32_t rcv_size = 13; + uint32_t snd_size = 0; + uint32_t rcv_data[100] = {0,}; + uint32_t rcv_size = 100; uint32_t tout = 1; uint32_t recvd_size = 0; -//*/ + printf("TX cmd_code: 0x%X\n", cmd_code); @@ -456,7 +693,7 @@ int main(int argc, char** argv) { printf("RX recvd_size: %u\n", recvd_size); printf("RX received_data:\n" ); for (int i = 0; i < recvd_size; ++i){ - printf(" %u,", rcv_data[i]); + printf(" %0X,", rcv_data[i]); } printf("\n\n\n\n"); @@ -472,7 +709,7 @@ int main(int argc, char** argv) { rcv_size = 13; tout = 1; recvd_size = 0; -//*/ + printf("TX cmd_code: 0x%X\n", cmd_code); @@ -506,7 +743,7 @@ int main(int argc, char** argv) { } printf("\n"); - +*/