FACC

HAL FACC module provides hardware acceleration for 8bit/16bit convolution, FIR and IIR filtering. FIR and convolution also add support for CMSIS-DSP.

Note

55x does not support this module. 58x has one FACC module each in HCPU/LCPU, 56x only provides one FACC module in HCPU.

For detailed API documentation, refer to FACC

Using HAL FACC

// Convolution example
// facc_out = dsp_conv_conv_coef_b * dsp_conv_conv_input;
uint32_t dsp_conv_conv_param = 0x200;                     // Parameter structure reference #FACC_ConfigTypeDef
param = (FACC_ConfigTypeDef *)&dsp_conv_conv_param;
param->last_sel = 1;                                      // This is the last input block
HAL_FACC_Config(&hfacc, param);                                     // Set FACC
HAL_FACC_SetCoeff(&hfacc, dsp_conv_conv_coef_b, (uint16_t)sizeof(dsp_conv_conv_coef_b), NULL, 0, 0); // Input dsp_conv_conv_coef_b
HAL_FACC_Start(&hfacc, dsp_conv_conv_input, facc_out, sizeof(dsp_conv_conv_input)); // Start convolution calculation. Synchronous completion.


// FIR example, using interrupt mode, signal needs to be set in interrupt.
uint32_t fir_fir_param = 0x0;
param = (FACC_ConfigTypeDef *)&fir_fir_param;                       // Parameter structure reference #FACC_ConfigTypeDef
HAL_FACC_Config(&hfacc, param);                                     
HAL_FACC_SetCoeff(&hfacc, fir_fir_coef_b, (uint16_t)sizeof(fir_fir_coef_b), NULL, 0, 0); // Input filter function coefficients
NVIC_EnableIRQ(FACC1_IRQn);
HAL_FACC_Start_IT(&hfacc, fir_fir_input, facc_out, sizeof(fir_fir_input)); // Start FIR calculation, using interrupt mode, interrupt completion will generate FACC1 interrupt
...         // Synchronous completion interrupt

// IIR example
uint32_t iir_iir_param = 0x42;
param = (FACC_ConfigTypeDef *)&iir_iir_param;                       // Parameter structure reference #FACC_ConfigTypeDef
HAL_FACC_Config(&hfacc, param);                                     
HAL_FACC_SetCoeff(&hfacc, iir_iir_coef_b, (uint16_t)sizeof(iir_iir_coef_b), iir_iir_coef_a, (uint16_t)sizeof(iir_iir_coef_a), 0); // Input filter function coefficients
HAL_FACC_Start(&hfacc, iir_iir_input, facc_out, sizeof(iir_iir_input)); // Start IIR calculation. Synchronous completion.

API Reference

bf0_hal_facc.h