working ADC and SPORT0 interface. Some SPORT0 data can be obtained by 0x8006 command.
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user