working ADC and SPORT0 interface. Some SPORT0 data can be obtained by 0x8006 command.

This commit is contained in:
2025-07-02 15:45:45 +03:00
parent 9d2fb6760b
commit 9f7a38581f
20 changed files with 4364 additions and 3110 deletions

View File

@ -16,6 +16,21 @@
#include <stdlib.h>
#include "l502_defs.h" // import defines of constants
#include "l502_params.h"
#include "l502_stream.h"
uint32_t streams_cnt[4] = {0,};
uint32_t sport_rx_copy[1024] = {0,};
uint32_t streams_succes_flag = 0;
//int f_sport_test(void);
void l502_stream_init(void);
/***************************************************************************//**
@brief Обработка принятого массива данных АЦП/DIN.
@ -42,6 +57,12 @@ uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
/* если есть свободные дескрипторы на передачу по HDMA - ставим блок на
передачу. Иначе возвращаем 0, чтобы на обработку этих данных функцию
вызвали бы позже */
++streams_cnt[0];
for (int i = 0; i < 1024; ++i){
sport_rx_copy[i] = data[i];
}
if (hdma_send_req_rdy()) {
hdma_send_req_start(data, size, 0);
return size;
@ -78,6 +99,8 @@ uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) {
/* если есть свободные дескрипторы на передачу по HDMA - ставим блок на
передачу. Иначе возвращаем 0, чтобы на обработку этих данных функцию
вызвали бы позже */
++streams_cnt[2];
if (sport_tx_req_rdy()) {
/* за один раз можем передать в SPORT не более
@ -108,6 +131,8 @@ uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) {
@param[in] size Размер переданных данных в 32-битных словах
****************************************************************************/
void hdma_send_done(uint32_t* addr, uint32_t size) {
++streams_cnt[3];
stream_in_buf_free(size);
}
@ -124,6 +149,8 @@ void hdma_send_done(uint32_t* addr, uint32_t size) {
@param[in] addr Адрес слова, сразу за последним переданным словом
@param[in] size Размер переданных данных в 32-битных словах */
void sport_tx_done(uint32_t* addr, uint32_t size) {
++streams_cnt[1];
stream_out_buf_free(size);
}
@ -187,6 +214,90 @@ void usr_cmd_process(t_l502_bf_cmd *cmd) {
l502_cmd_done(cmd-> param, rcv_data, cmd->data_size);
break;
}
case 0x8003:{ //configure ADC
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[2] = params_set_adc_freq_div(1);
err_codes[3] = params_set_ref_freq(2000000);
err_codes[4] = params_set_adc_interframe_delay(0);
err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL);
err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL);
//err_codes[7] = params_set_din_freq_div;
//err_codes[8] = params_set_dac_freq_div;
err_codes[9] = sport_in_set_step_size(1024);
//L502_BF_PARAM_ADC_COEF
//err_codes[10] = fpga_reg_write(f_regaddr_k[range], ??);
//err_codes[11] = fpga_reg_write(f_regaddr_offs[range], ??);
err_codes[12] = configure();
uint32_t err_codes_sum = 0;
for (int i = 0; i < 15; ++i){
err_codes_sum += err_codes[i];
}
l502_cmd_done(err_codes_sum, err_codes, 15);
break;
}
case 0x8004:{ //start streams
uint32_t err_codes[5] = {0,};
l502_stream_init();
err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask
err_codes[1] = stream_out_preload();
err_codes[2] = streams_start();
l502_cmd_done(0, err_codes, 5);
break;
}
case 0x8005:{ //get some data from adc buff. Or simple flag, raised inside usr_in_proc_data()
uint32_t streams_sum = streams_cnt[0] + streams_cnt[1] + streams_cnt[2] + streams_cnt[3];
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]){
++sport_rx_nonzero_sum;
}
}
l502_cmd_done(sport_rx_nonzero_sum, sport_rx_copy, 1024);
break;
}
case 0x8007:{ //get data from SPORT_RX copied arr
l502_cmd_done(cmd-> param, NULL, 0);
break;
}
case 0x8008:{ //get data from SPORT_RX copied arr
l502_cmd_done(cmd-> param, NULL, 0);
break;
}
case 0x8009:{ //get data from SPORT_RX copied arr
l502_cmd_done(cmd-> param, NULL, 0);
break;
}
case 0x800A:{ //get data from SPORT_RX copied arr
l502_cmd_done(cmd-> param, NULL, 0);
break;
}
case 0x8010:{ //L502_BF_USR_CMD_CODE_ECHO
//uint32_t test_res = f_sport_test();
l502_cmd_done(cmd-> param, NULL, 0);
break;
}
/*