75 lines
2.1 KiB
C
75 lines
2.1 KiB
C
/*
|
|
******************************************************************************
|
|
* @file driver_iir.c
|
|
* @author FreqChip Firmware Team
|
|
* @version V1.0.0
|
|
* @date 2023
|
|
* @brief IIR module driver.
|
|
* This file provides firmware functions to manage the
|
|
* IIR filter peripheral
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2023 FreqChip.
|
|
* All rights reserved.
|
|
******************************************************************************
|
|
*/
|
|
#include "fr30xx.h"
|
|
|
|
/******************************************************************************
|
|
* @fn iir_init
|
|
*
|
|
* @brief Initialize the IIR according to the specified parameters
|
|
* in the IIR_HandleTypeDef
|
|
*
|
|
* @param hiir : IIR Handle.
|
|
*/
|
|
void iir_init(IIR_InitTypeDef *hiir)
|
|
{
|
|
__IIR_SOFTRST_SET();
|
|
__IIR_SOFTRST_CLEAR();
|
|
|
|
for(int i = 0; i < 20; i++)
|
|
{
|
|
IIR_FILTER->IIR_COEF[i] = hiir->IIRCoef[i];
|
|
}
|
|
|
|
IIR_FILTER->IIR_CTRL.N_DIV = hiir->N_Div;
|
|
IIR_FILTER->IIR_CTRL.ORDER_SEL = hiir->Order_Sel;
|
|
IIR_FILTER->IIR_CTRL.NODE_SEL = hiir->Node_Sel;
|
|
IIR_FILTER->IIR_CTRL.NBYTE_SEL = hiir->Nbytes_Sel;
|
|
|
|
__IIR_RxFIFO_THRESHOLD_LEVEL(0x20);
|
|
__IIR_TxFIFO_THRESHOLD_LEVEL(0x20);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* @fn iir_filter_start
|
|
*
|
|
* @brief Start iir filter
|
|
*
|
|
* @param fp_Data_In : the data need to handle
|
|
* fp_Data_Out : the output data
|
|
* fu32_Size : the size of data which is need to handle
|
|
*/
|
|
void iir_filter_start(uint32_t *fp_Data_In, uint32_t *fp_Data_Out, uint32_t fu32_Size)
|
|
{
|
|
while(fu32_Size)
|
|
{
|
|
if(!__IIR_GET_FIFO_STATUS(TX_FIFO_FULL))
|
|
{
|
|
IIR_FILTER->IIR_FIFO = *fp_Data_In++;
|
|
fu32_Size--;
|
|
}
|
|
|
|
while(!__IIR_GET_FIFO_STATUS(RX_FIFO_EMPTY))
|
|
{
|
|
*fp_Data_Out++ = IIR_FILTER->IIR_FIFO;
|
|
}
|
|
}
|
|
|
|
__IIR_SOFTRST_SET();
|
|
__IIR_SOFTRST_CLEAR();
|
|
}
|
|
|