HAL FFT 模块提供抽象的软件接口操作硬件FFT模块,实现定点数的FFT和DCT变换
- Note
- SF32LB55x不支持FFT
-
SF32LB58x不支持DCT
详细的API说明参考 FFT .
使用HAL FFT
首先调用 HAL_FFT_Init 初始化HAL_FFT, 需要在 FFT_HandleTypeDef 中指定使用的FFT硬件模块(即FFT实例),FFT实例个数随芯片有所不同,如SF32LB58x系列有两个FFT实例,::hwp_fft1和::hwp_fft2,而 SF32LB56x系列则只有一个FFT实例,即::hwp_fft1。初始化只需做一次,之后就可以调用 HAL_FFT_StartFFT 、::HAL_FFT_StartDCT 等函数处理数据。
- Note
- 源和目的地址需要保证4字节对齐,支持源和目的地址相同
-
在初始化HAL_FFT之前需先执行HAL_RCC_EnableModule使能相应的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)
{
}
}