#include "hw_reg_api.h" #include "chip_reg_base.h" #include "ada_reg.h" #include "phy_ana.h" #include "phy_tools.h" #include "ada_main.h" #include "iot_config.h" #include "math.h" #include "fft.h" #include "phy_reg.h" #include "hw_phy_init.h" #include "mac_reset.h" #include "phy_bb.h" #include "hw_desc.h" #include "iot_bitops.h" #include "hw_tonemask.h" #include "phy_dfe_reg.h" #include "phy_rx_fd_reg.h" #include "phy_rxtd_reg.h" #include "ahb_rf.h" #include "phy_cal.h" #include "plc_protocol.h" #include "granite_reg.h" #include "mac_sys_reg.h" #include "mac_reset.h" #include "phy_ana_glb.h" #include "flash.h" #include "gpio_mtx.h" #include "apb.h" #include "os_mem.h" #include "mac_rx_reg.h" #include "hw_ada.h" #include "hw_phy_api.h" #include "phy_chn.h" #if HW_PLATFORM > HW_PLATFORM_SIMU #include "dbg_io.h" #endif #include "iot_io.h" uint16_t cur_tone_id = 0; extern void fft(int N,complex f[]); AdaCasePara_t ada_cases_tb[] = { {ADA_TEST_DUMP, "\n[Dtest][ADA][DUMP] Dump ADC data::::::::::::::::::::::::::::::\n"}, {ADA_TEST_VPP, "\n[Dtest][ADA][VPP] Print Tone VPP voltage:::::::::::::::::::::\n"}, {ADA_TEST_SNR, "\n[Dtest][ADA][SNR] Print SIGNAL-NOISE RATIO:::::::::::::::::::\n"}, {ADA_TEST_FA, "\n[Dtest][ADA][FA] Print Freq vs Amp feature::::::::::::::::::\n"}, {ADA_TEST_TONE, "\n[Dtest][ADA][TONE] Gen tone:::::::::::::::::::::::::::::::::::\n"}, {ADA_TEST_FLASH,"\n[Dtest][ADA][FLASH] DUMP write FLASH and print back:::::::::::\n"}, {ADA_FFT_FLASH, "\n[Dtest][ADA][FLASH] FFT write FLASH and print back::::::::::::\n"}, }; /* info: * this API reinit mtx, gpio config may miss. */ void phy_led_set(uint32_t gpio, bool_t on) { gpio_mtx_enable(); apb_enable(APB_GPIO); gpio_pin_select(gpio, 3); if (on) { gpio_pin_wpu(gpio, 1); gpio_pin_wpd(gpio, 0); } else { gpio_pin_wpu(gpio, 0); gpio_pin_wpd(gpio, 1); } } void adc_cal_vpp(uint8_t *mem_buf, int32_t st_offset) { int16_t i = 0; int16_t *p_addr = NULL; int16_t top_peak_ave = 0, bottom_peak_ave = 0; p_addr = (int16_t *)(mem_buf + (st_offset << 2)); /* print the pre-trig buf to the end */ while (i < (ADA_TONE_CYCLE_NUM >> 2)) { if (*p_addr > top_peak_ave) { top_peak_ave = *p_addr; } if (*p_addr < bottom_peak_ave) { bottom_peak_ave = *p_addr; } /* iot_printf("%06d\r\n",*p_addr); */ p_addr++; i++; } #if ADA_DEBUG_LEVEL >= ADA_PRINT_DEBUG i = 0; p_addr = (int16_t *)(mem_buf + (st_offset << 2)); while (i < ADA_TONE_CYCLE_NUM) { #if DATA_INV_EN iot_printf("%06d\n", *(p_addr+1)); iot_printf("%06d\n", *p_addr); #else iot_printf("%06d\n", *p_addr); iot_printf("%06d\n", *(p_addr+1)); #endif i += 2; p_addr += 2; } #endif iot_printf("[*vpp*] tone id=%d, "\ "peak-peak=%06d from %06d, vpp= %06d (***%d mV***)\n", \ cur_tone_id, top_peak_ave, bottom_peak_ave, \ top_peak_ave - bottom_peak_ave, \ ((top_peak_ave-bottom_peak_ave) * VPP_CNT_VOL_A - VPP_CNT_VOL_B)/10); } #if ADA_DTEST_SNR_SUPPORT /* sigPower = sum(abs(X).^2)/length(X) noisePower=sum(abs(Y-X).^2)/length(Y-X) */ void adc_cal_snr(uint8_t *mem_buf, int32_t st_offset) { int16_t i = 0; int16_t *p_addr = NULL; static complex sample_data[ADA_TONE_CYCLE_NUM] = {0}; static float f_amp[ADA_TONE_CYCLE_NUM]={0}; uint32_t ind_lowband=0,ind_highband=0; float max_amp = 0, min_amp = 0, sig_power = 0, noise_pwr = 0; uint32_t max_idx = 0, offset_num = 0; p_addr = (int16_t *)(mem_buf + st_offset << 2); /* print the pre-trig buf to the end */ while (i < ADA_TONE_CYCLE_NUM) { sample_data[i].real = *p_addr; sample_data[i].imag = 0; p_addr++; i++; } fft(ADA_TONE_CYCLE_NUM, sample_data); i = 0; while (i < ADA_TONE_CYCLE_NUM) { f_amp[i] = iot_sqrt( \ iot_pow((int32_t)sample_data[i].real, 2) + \ (iot_pow((int32_t)sample_data[i].imag, 2) ) << 1) / \ ADA_TONE_CYCLE_NUM; /*not support float*/ i++; } /* find max freq */ i = 0; while (i < (ADA_TONE_CYCLE_NUM >> 1)) { if (f_amp[i] > max_amp) { max_amp = f_amp[i]; max_idx = i; } i++; } /* find min freq */ min_amp = f_amp[0]; i = 1; while (i < (ADA_TONE_CYCLE_NUM >> 1)) { if (f_amp[i] < min_amp) { min_amp = f_amp[i]; } i++; } /* find signal,6dB = 1/2 AMP */ i = 1; while ((f_amp[max_idx-i] << 1) > f_amp[max_idx]) { if ((max_idx-i) < 0) { break; } offset_num++; i++; } ind_lowband = \ BW_LOW/ADA_SAMP_FREQ * ADA_TONE_CYCLE_NUM + 1; ind_highband = \ (uint32_t)((float)BW_HIGH/ADA_SAMP_FREQ * ADA_TONE_CYCLE_NUM) + 1; #if ADA_DEBUG_LEVEL >= ADA_PRINT_DEBUG iot_printf("band:%d-%d Point, offset:%d, ", \ ind_lowband,ind_highband,offset_num); #endif /* cal power */ i = ind_lowband; while (i < ind_highband) { if (iot_pow(max_idx-i, 2) < iot_pow(offset_num+SNR_FREQ_NUM, 2)) { sig_power = f_amp[i] * f_amp[i] + sig_power; } else { if (noise_pwr == 0) { noise_pwr = iot_pow(f_amp[i], 2); } else { noise_pwr=(iot_pow(f_amp[i], 2) + noise_pwr) >> 1; } } i++; } /* noise power avg, first find the posedge */ #if 0 i = max_idx; while (i < (ADA_TONE_CYCLE_NUM >> 1)) { if (f_amp[i] < f_amp[i+1]) { noise_pwr = pow(f_amp[i++], 2); int num = (((ADA_TONE_CYCLE_NUM >> 1) - i) >> 1) + i; while(i < num) { noise_pwr=(pow(f_amp[i++], 2) + noise_pwr) >> 1; } break; } i++; } #endif /* SNR */ iot_printf("sig power=%d,noise power=%d,", \ (uint32_t)sig_power, (uint32_t)noise_pwr); iot_printf("SNR=%d\r\n", \ (uint32_t)(10 * Log10(max_amp * max_amp/noise_pwr))); } #endif void mac_rx_dump_init() { uint32_t tmp = 0; /* fc ok only if long pkt */ tmp = RGF_RX_READ_REG(CFG_RX_TIMEOUT_1_ADDR); REG_FIELD_SET(CFG_RX_PB_TIMEOUT, tmp, 2000000); RGF_RX_WRITE_REG(CFG_RX_TIMEOUT_1_ADDR, tmp); } /* ADA adc data dump */ int ada_auto_dump_test(uint32_t b_size, uint32_t s_size) { uint32_t ret = ERR_FAIL; uint32_t trig_offset = 0; #if ADC_DUMP_FROM_DDR_EN uint8_t *adc_buf = (uint8_t *)ADC_DUMP_DDR_ADDR; #else uint8_t *adc_buf = (uint8_t *)ADC_DUMP_RAM_ADDR; #endif #if IOT_DTEST_ONLY_SUPPORT == 1 /* reset mac */ mac_reset(MAC_RST_REASON_COLD); /* reset phy */ phy_reset(PHY_RST_REASON_COLD); /* reset mac */ mac_reset(MAC_RST_REASON_COLD); /* basic data struct init for bit ops */ iot_bitops_init(); /* init gain table */ phy_init(PLC_PROTO_TYPE_SG, \ IOT_PLC_PHY_BAND_DFT, TONE_MASK_ID_NULL, true); /* special config */ mac_rx_dump_init(); #endif /* only for loopback dump */ #if ADA_DUMP_WITH_TX_TONE_EN == 1 cur_tone_id = ADA_TONE_ID; #else cur_tone_id = 0; #endif /* fix gain and disable agc */ phy_agc_gain_lvl_set(1, 0, -24, 0); ret = phy_dump_from_ada(b_size, \ s_size, \ cur_tone_id, \ ADC_DUMP_MODE_SUPPORT, \ PHY_PHASE_OVR_A, \ &trig_offset, \ adc_buf, \ ADC_DUMP_SPEED_SUPPORT, \ NULL); if (ret == ERR_OK) { #if ADC_DUMP_MEM_FROM_MTX == 1 if (b_size == s_size) { /* force dump from 0xfd0000 within 48K word */ dumpMem(adc_buf, trig_offset, b_size); } else { #if ADA_DUMP_FULL_IRAM_SUPPORT == 1 /* dump all from fc8000 */ dumpMem(adc_buf - 0x8000, 0, b_size); #else /* dump from 0xfd0000 with 32K */ dumpMem(adc_buf, 0, b_size); #endif } #else int32_t start_offset = trig_offset - (b_size - s_size); if ( start_offset >= 0) { /* do nothing */ } else { start_offset = trig_offset + s_size; start_offset += 1; /* add some of offset */ } dumpMem(adc_buf, start_offset, b_size); #endif } return ret; } /* ADA tone VPP cal */ int ada_auto_vpp_test(int argc, char **argv) { uint32_t trig_offset; uint8_t *adc_buf = (uint8_t *)ADC_DUMP_DST_ADDR; uint32_t buf_size = 0, sample_size = 0; iot_printf("%s",ada_cases_tb[ADA_TEST_VPP].name); cur_tone_id = TONE_ID_CAL(15); /* get dump size */ phy_dump_size_cal(&buf_size, &sample_size); ada_common_init(cur_tone_id, buf_size, sample_size); phy_adc_en_cfg(true); /* adc trigger */ phy_adc_trig_en_cfg(true); while(1) { /* sample done */ if (phy_adc_is_sample_done()) { trig_offset = phy_adc_trig_addr_get(); break; } } phy_adc_en_cfg(false); #if ADA_DEBUG_LEVEL >= ADA_PRINT_DEBUG /* dump adc buffer */ iot_printf("trigger address:%d\n", trig_offset); #endif adc_cal_vpp(adc_buf, trig_offset); iot_printf("%s\r\n", TEST_END_SPLIT_STR); return 0; } /* ADC SNR/SNDR */ int ada_auto_snr_test(int argc, char **argv) { uint32_t trig_offset; uint32_t buf_size = 0, sample_size = 0; iot_printf("%s",ada_cases_tb[ADA_TEST_SNR].name); cur_tone_id = ADA_TONE_ID; /* get dump size */ phy_dump_size_cal(&buf_size, &sample_size); ada_common_init(cur_tone_id, buf_size, sample_size); phy_adc_en_cfg(true); /* adc trigger */ phy_adc_trig_en_cfg(true); while(1) { /* sample done */ if(phy_adc_is_sample_done()) { trig_offset = phy_adc_trig_addr_get(); break; } } phy_adc_en_cfg(false); #if ADA_DEBUG_LEVEL >= ADA_PRINT_DEBUG /* dump adc buffer */ iot_printf("trigger address:%d\n", trig_offset); #endif #if ADA_DTEST_SNR_SUPPORT uint8_t *adc_buf = (uint8_t *)ADC_DUMP_DST_ADDR; adc_cal_snr(adc_buf, trig_offset); #endif (void)trig_offset; iot_printf("%s\r\n", TEST_END_SPLIT_STR); return 0; } int ada_auto_fa_test(int argc, char **argv) { uint32_t i = 0, tmp = 0; uint32_t tone_num = 0, trig_offset = 0; uint8_t *adc_buf = (uint8_t *)ADC_DUMP_DST_ADDR; uint32_t buf_size = 0, sample_size = 0; iot_printf("%s",ada_cases_tb[ADA_TEST_FA].name); /* get dump size */ phy_dump_size_cal(&buf_size, &sample_size); ada_common_init(cur_tone_id, buf_size, sample_size); phy_adc_mode_cfg(ADC_MODE_FORCE); iot_printf("[ada][1~30 MHz]:\n"); for (i = 1; i < 31; i++) { tone_num = TONE_ID_CAL(i); cur_tone_id = tone_num; tmp = PHY_DFE_READ_REG(CFG_BB_TX_TONE_0_CFG_ADDR); REG_FIELD_SET(SW_TONE_CFG_EN,tmp,1); REG_FIELD_SET(SW_TONE_0_CFG_NUM,tmp,tone_num); PHY_DFE_WRITE_REG(CFG_BB_TX_TONE_0_CFG_ADDR,tmp); /* wait dly */ phy_busy_wait(0x20000); /* adc trigger */ phy_adc_trig_en_cfg(true); phy_adc_en_cfg(true); while (1) { /* sample done */ if (phy_adc_is_sample_done()) { trig_offset = phy_adc_trig_addr_get(); break; } } phy_adc_en_cfg(false); phy_adc_trig_en_cfg(false); adc_cal_vpp(adc_buf,trig_offset); #if ADA_DTEST_SNR_SUPPORT adc_cal_snr(adc_buf,trig_offset); #endif if (i == -1) { int16_t *p_addr = (int16_t *)(adc_buf + (trig_offset << 2)); uint32_t j = 0; while (j < ADA_TONE_CYCLE_NUM) { #if DATA_INV_EN iot_printf("%06d\n", *(p_addr + 1)); iot_printf("%06d\n", *p_addr); #else iot_printf("%06d\n", *p_addr); iot_printf("%06d\n", *(p_addr + 1)); #endif j += 2; p_addr += 2; } } } iot_printf("%s\r\n", TEST_END_SPLIT_STR); return 0; } /* * Must config PLL out 180M and use GREE High band * for generating 30M tone. */ void ada_tone_gen() { uint32_t tmp = 0; /* reset mac */ mac_reset(MAC_RST_REASON_COLD); /* reset phy */ phy_reset(PHY_RST_REASON_COLD); /* reset mac */ mac_reset(MAC_RST_REASON_COLD); /* basic data struct init for bit ops */ iot_bitops_init(); /* init gain table */ phy_init(PLC_PROTO_TYPE_SG, \ IOT_PLC_PHY_BAND_DFT, TONE_MASK_ID_NULL, true); /* force A phase */ tmp = RGF_MAC_READ_REG(CFG_PHY_FORCE_1_ADDR); REG_FIELD_SET(CFG_PHY_TX_ENABLE, tmp, 1); REG_FIELD_SET(CFG_PHY_TX_ENABLE_FORCE_EN, tmp, 1); RGF_MAC_WRITE_REG(CFG_PHY_FORCE_1_ADDR, tmp); tmp = RGF_MAC_READ_REG(CFG_PHY_FORCE_2_ADDR); REG_FIELD_SET(CFG_PHY_TX_PHASE_SEL, tmp, 1); REG_FIELD_SET(CFG_PHY_TX_PHASE_SEL_FORCE_EN, tmp, 1); RGF_MAC_WRITE_REG(CFG_PHY_FORCE_2_ADDR, tmp); /* en analog tx */ uint8_t reg_id = ANA_GRANITE_TOP_REG; uint32_t wdata = TOP_EN_TX_MASK | TOP_EN_DAC_MASK | \ (2 << TOP_ENLIC_OFFSET); uint32_t wmask = TOP_EN_TX_MASK | TOP_EN_DAC_MASK | \ TOP_ENLIC_MASK; phy_ana_i2c_write(reg_id, wdata, wmask); /* att */ phy_dfe_tone_att_cfg(0, 0, 0); /* 40M tone */ phy_dfe_tone_cfg(1, 450, 0); while(1); } /* ADA adc flash dump */ int ada_flash_dump_test(uint32_t b_size, uint32_t s_size) { int16_t gain = 0; uint32_t trig_offset = 0; uint64_t time_span = 0; uint32_t start_time = 0, end_time = 0; uint8_t dump_rty_cnt = 0; #if ADC_DUMP_FROM_DDR_EN uint8_t *adc_buf = (uint8_t *)ADC_DUMP_DDR_ADDR; #else uint8_t *adc_buf = (uint8_t *)ADC_DUMP_RAM_ADDR; #endif uint32_t g_flash_pos = 0; uint32_t ret = ERR_FAIL; static bool_t flash_first_flag = true; /* check param */ IOT_ASSERT(b_size == s_size); /* flash init*/ flash_init(1); /* set buf size */ b_size = 32*K; s_size = b_size; /* read flash and print*/ flash_read(adc_buf, ADC_DUMP_FLASH_START + g_flash_pos, 0x10, 0); if (*adc_buf == ADC_DUMP_FLASH_MG0 && \ *(adc_buf + 1) == ADC_DUMP_FLASH_MG1 && \ *(adc_buf + 2) == ADC_DUMP_FLASH_MG2 && \ *(adc_buf + 3) == ADC_DUMP_FLASH_MG3) { for(uint32_t buf_cnt = 0; \ buf_cnt < (ADC_DUMP_FLASH_END - ADC_DUMP_FLASH_START)/(b_size << 2); \ buf_cnt++) { flash_read(adc_buf, ADC_DUMP_FLASH_START + g_flash_pos, b_size << 2, 0); g_flash_pos += b_size << 2; dumpMem(adc_buf, 0, b_size); } /* led on */ phy_led_set(32, false); phy_led_set(33, false); return 0; } #if IOT_DTEST_ONLY_SUPPORT == 1 /* reset mac */ mac_reset(MAC_RST_REASON_COLD); /* reset phy */ phy_reset(PHY_RST_REASON_COLD); /* reset mac */ mac_reset(MAC_RST_REASON_COLD); /* basic data struct init for bit ops */ iot_bitops_init(); /* init gain table */ phy_init(PLC_PROTO_TYPE_SG, IOT_PLC_PHY_BAND_DFT, TONE_MASK_ID_NULL, true); #endif #if ADA_DUMP_NF_WITH_CSI_BUF_DUMP == 1 /* tone id 0 for trig fft */ cur_tone_id = 0; #else cur_tone_id = ADA_TONE_ID; #endif #if 1 /* get current gain */ gain = phy_gain_get_from_agc(); #else gain = 50; #endif /* fix gain and disable agc */ phy_agc_gain_lvl_set(1, gain, -24, 0); iot_printf("current gain: %u\n", gain); /* prepare flash param */ flash_write_param_t param = {0}; param.read_mode = MOD_SFC_READ_QUAD_IO_FAST; param.write_mode = MOD_SFC_PROG_QUAD; param.is_erase = 1; start_time = RGF_MAC_READ_REG(CFG_RD_NTB_ADDR); dump_rty_cnt = (ADC_DUMP_FLASH_END - ADC_DUMP_FLASH_START)/(b_size << 2); while (dump_rty_cnt--) { do { end_time = RGF_MAC_READ_REG(CFG_RD_NTB_ADDR); time_span = end_time - start_time; if (time_span < 0) { // wrap around time_span = (0x100000000LL) - start_time + end_time; } if ((uint64_t)time_span > 10000*TICKS_MS) { break; } } while(1); start_time = end_time; ret = phy_dump_from_ada(b_size, \ s_size, \ cur_tone_id, \ ADC_DUMP_MODE_FORCE, \ PHY_PHASE_OVR_A, \ &trig_offset, \ adc_buf, \ ADC_DUMP_SPEED_SUPPORT, \ NULL); if (ret == ERR_OK) { if (flash_first_flag) { /* done flag */ *adc_buf = ADC_DUMP_FLASH_MG0; *(adc_buf + 1) = ADC_DUMP_FLASH_MG1; *(adc_buf + 2) = ADC_DUMP_FLASH_MG2; *(adc_buf + 3) = ADC_DUMP_FLASH_MG3; /* clear first flag */ flash_first_flag = 0; } /* current gain */ *(adc_buf + 4) = gain; } /* write flash */ flash_write(adc_buf, ADC_DUMP_FLASH_START + g_flash_pos, b_size << 2, ¶m); g_flash_pos += b_size << 2; iot_printf("size %u write flash done!\n", b_size << 2); } /* led on */ phy_led_set(32, false); phy_led_set(33, false); return 0; } void fft_dump_flash_test() { uint8_t dump_rty_cnt = 0; uint64_t time_span = 0; uint32_t start_time = 0, end_time = 0; uint32_t *csi_buf = NULL; uint16_t tone_idx = 0; int16_t csi_i = 0, csi_q = 0; static bool_t fft_first_flag = true; uint8_t *fft_buf = (uint8_t *)ADC_DUMP_DST_ADDR; uint32_t g_flash_pos = 0; /* flash init*/ flash_init(1); /* read flash and print*/ flash_read(fft_buf, ADC_DUMP_FLASH_START + g_flash_pos, 0x10, 0); if (*fft_buf == ADC_DUMP_FLASH_MG0 && \ *(fft_buf + 1) == ADC_DUMP_FLASH_MG1 && \ *(fft_buf + 2) == ADC_DUMP_FLASH_MG2 && \ *(fft_buf + 3) == ADC_DUMP_FLASH_MG3) { for (uint32_t buf_cnt = 0; \ buf_cnt < (ADC_DUMP_FLASH_END - ADC_DUMP_FLASH_START)/(6 * K); buf_cnt++) { flash_read(fft_buf, ADC_DUMP_FLASH_START + g_flash_pos, 6 * K, 0); g_flash_pos += 6 * K; csi_buf = (uint32_t *)fft_buf; for (tone_idx = 0; tone_idx < TOTAL_TONE_MASK_NUM; tone_idx++ ) { csi_i = (int16_t)(*(csi_buf + tone_idx) & 0xFFFF); csi_q = (int16_t)(*(csi_buf + tone_idx) >> 16); iot_printf("%u %d %d\n", tone_idx, csi_i, csi_q); } } /* led on */ phy_led_set(32, false); phy_led_set(33, false); return; } #if IOT_DTEST_ONLY_SUPPORT == 1 /* reset mac */ mac_reset(MAC_RST_REASON_COLD); /* reset phy */ phy_reset(PHY_RST_REASON_COLD); /* reset mac */ mac_reset(MAC_RST_REASON_COLD); /* basic data struct init for bit ops */ iot_bitops_init(); /* init gain table */ phy_init(PLC_PROTO_TYPE_SG, IOT_PLC_PHY_BAND_DFT, TONE_MASK_ID_NULL, true); #endif #if ADA_DUMP_NF_WITH_CSI_BUF_DUMP == 1 /* tone id 0 for trig fft */ cur_tone_id = 0; #else cur_tone_id = ADA_TONE_ID; #endif /* delay 10s */ start_time = RGF_MAC_READ_REG(CFG_RD_NTB_ADDR); do { end_time = RGF_MAC_READ_REG(CFG_RD_NTB_ADDR); time_span = end_time - start_time; if (time_span < 0) { // wrap around time_span = (0x100000000LL) - start_time + end_time; } if ((uint64_t)time_span > 10000*TICKS_MS) { break; } } while(1); /* prepare para */ flash_write_param_t param = {0}; param.read_mode = MOD_SFC_READ_QUAD_IO_FAST; param.write_mode = MOD_SFC_PROG_QUAD; param.is_erase = 1; param.sw_mode = MOD_SW_MODE_DIS; dump_rty_cnt = (ADC_DUMP_FLASH_END - ADC_DUMP_FLASH_START)/(6 * K); while (dump_rty_cnt--) { csi_buf = (uint32_t *)fft_buf; phy_fft_flash_dump(csi_buf); if (fft_first_flag) { /* done flag */ *fft_buf = ADC_DUMP_FLASH_MG0; *(fft_buf + 1) = ADC_DUMP_FLASH_MG1; *(fft_buf + 2) = ADC_DUMP_FLASH_MG2; *(fft_buf + 3) = ADC_DUMP_FLASH_MG3; /* clear first flag */ fft_first_flag = 0; } flash_write(fft_buf, ADC_DUMP_FLASH_START + g_flash_pos, 6 * K, ¶m); g_flash_pos += 6 * K; #if PHY_DBG_EN for (tone_idx = 0; tone_idx < TOTAL_TONE_MASK_NUM; tone_idx++ ) { csi_i = (int16_t)(*(csi_buf + tone_idx) & 0xFFFF); csi_q = (int16_t)(*(csi_buf + tone_idx) >> 16); iot_printf("tone_id:%u, csi_i:%d, csi_q:%d\n", tone_idx, csi_i, csi_q); } #endif } /* led on */ phy_led_set(32, false); phy_led_set(33, false); } #ifdef __GNUC__ #if !MODULE_EN int main(int argc, char **argv) { /* hw platform parameters init */ dtest_platform_ada_pre_init(); #if HW_PLATFORM > HW_PLATFORM_SIMU #if EDA_SIMU_SUPPORT != 1 iot_print_config(true); dbg_uart_init(); #endif #endif /* ada soft reset */ warm_rst_ada(); /* get dump size */ uint32_t buf_size = 0, sample_size = 0; phy_dump_size_cal(&buf_size, &sample_size); /* trig dump from phy */ ada_auto_dump_test(buf_size,sample_size); while(1);//run away return 0; } #endif #endif // __GCC__