Похоже, дело в последовательности дёргания выводов мегафункции. Попробовал - создал набор коэффициентов из 481 нуля, отдал на обрботку coef_seq. Получил от неё те же нули, только побольше. После загрузки сигнал на выходе фильтра продолжает присутствовать (АЧХ меняется, но не так как требуется).
Вот функция:
Код
// Биты доступа к массиву коэффициентов FIR фильтра в FPGA
#define TARGET_FPGA_FIR_PORT_C(v) do { GPIOH->REGSETRESET_C = (v); __DSB(); } while (0)
#define TARGET_FPGA_FIR_PORT_S(v) do { GPIOH->REGSETRESET_S = (v); __DSB(); } while (0)
#define TARGET_FPGA_FIR_CLK_BIT (1U << 0) /* PH0 - XTAL1 - fir clocl */
#define TARGET_FPGA_FIR_CS_BIT (1U << 1) /* PH1 - XTAL2 - fir nce */
//#define TARGET_FPGA_FIR_CS_BIT (1U << 10) /* PF10 - SPDIF_USER1 */
#define TARGET_FPGA_FIR_INITIALIZE() do { \
arm_hardware_pioh_outputs(TARGET_FPGA_FIR_CS_BIT, TARGET_FPGA_FIR_CS_BIT); \
arm_hardware_pioh_outputs(TARGET_FPGA_FIR_CLK_BIT, 0); \
} while (0)
static void board_fpga_fir_initialize(void)
{
TARGET_FPGA_FIR_INITIALIZE();
}
static void board_fpga_fir_strobe(void)
{
// strobe
TARGET_FPGA_FIR_PORT_S(TARGET_FPGA_FIR_CLK_BIT); __DSB();
TARGET_FPGA_FIR_PORT_C(TARGET_FPGA_FIR_CLK_BIT); __DSB();
}
static const FLASHMEM int_fast32_t board_fir_seq [] =
{
//#include "..\tools\coef_seq\fir_normalized_coeff_lpf_200_reseq.txt"
//#include "..\tools\coef_seq\fir_normalized_coeff_lpf_1550_reseq.txt"
#include "..\tools\coef_seq\fir_normalized_coeff_zero_reseq.txt"
};
/* Выдача расчитанных параметров фильтра в FPGA */
static void board_fpga_fir_send(void)
{
//hardware_spi_connect16w(SPIC_SPEEDUFAST, SPIC_MODE3);
hardware_spi_connect16w(SPIC_SPEEDFAST, SPIC_MODE3);
// strobe
board_fpga_fir_strobe(); // one strobe without WE required
//prog_select(targetfir1);
TARGET_FPGA_FIR_PORT_C(TARGET_FPGA_FIR_CS_BIT);
unsigned i = 0;
{
const int_fast32_t v = board_fir_seq [i]; // here "0" value
hardware_spi_word_p1(v >> 16);
hardware_spi_word_p2(v >> 0);
hardware_spi_complete();
// strobe
board_fpga_fir_strobe(); // 1-st dummy
// strobe
board_fpga_fir_strobe(); // 2-nd dummy
// strobe
board_fpga_fir_strobe();
}
for (i = 1; i < sizeof board_fir_seq / sizeof board_fir_seq [0]; ++ i)
{
const int_fast32_t v = board_fir_seq [i];
hardware_spi_word_p1(v >> 16);
hardware_spi_word_p2(v >> 0);
hardware_spi_complete();
// strobe
board_fpga_fir_strobe();
}
// strobe
board_fpga_fir_strobe();
//prog_unselect(targetfir1);
TARGET_FPGA_FIR_PORT_S(TARGET_FPGA_FIR_CS_BIT);
// strobe
board_fpga_fir_strobe();
hardware_spi_disconnect();
}