HAL FFT 模塊提供抽象的軟件接口操作硬件FFT模塊,實現(xiàn)定點數(shù)的FFT和DCT變換
- Note
- SF32LB55x不支持FFT
-
SF32LB58x不支持DCT
詳細(xì)的API說明參考 FFT .
使用HAL FFT
首先調(diào)用 HAL_FFT_Init 初始化HAL_FFT, 需要在 FFT_HandleTypeDef 中指定使用的FFT硬件模塊(即FFT實例),F(xiàn)FT實例個數(shù)隨芯片有所不同,如SF32LB58x系列有兩個FFT實例,::hwp_fft1和::hwp_fft2,而 SF32LB56x系列則只有一個FFT實例,即::hwp_fft1。初始化只需做一次,之后就可以調(diào)用 HAL_FFT_StartFFT 、::HAL_FFT_StartDCT 等函數(shù)處理數(shù)據(jù)。
- Note
- 源和目的地址需要保證4字節(jié)對齊,支持源和目的地址相同
-
在初始化HAL_FFT之前需先執(zhí)行HAL_RCC_EnableModule使能相應(yīng)的FFT模塊
例如,
輪詢模式
static uint32_t input_data[512];
static uint32_t output_data[512];
void fft_example_polling(void)
{
memset(&config, 0, sizeof(config));
config.bitwidth = FFT_BW_16BIT;
}
中斷模式
volatile static uint8_t fft_done_flag;
static uint32_t input_data[512];
static uint32_t output_data[512];
void FFT1_IRQHandler(void)
{
HAL_FFT_IRQHandler(&fft_handle);
}
{
fft_done_flag = 1;
}
void fft_example_it(void)
{
memset(&config, 0, sizeof(config));
config.bitwidth = FFT_BW_16BIT;
fft_done_flag = 0;
while (0 == fft_done_flag)
{
}
}