尊敬的所有人
我想使用 tm4c129xnczad 设计 FIR 滤波器。 我从函数发生器获取数据,应用算法后,我想将数据发送到 DAC。 尽管 DAC 和 ADC 工作正常、但不知怎么说、我不会获得输出。 我认为问题在算法部分。 请帮助我查找问题。 我正在发布代码。
uint32_t pui32ADC0Value[2];
void DAC_LDAC (void);
const float firCoeffs32[40]={
+0.0088、0.0108、0.0130、+0.0151、0.0173、 0.0195、0.0217、0.0238、
0.0259、0.0279、0.0298、0.0316、0.0333、 0.0348、0.0361、0.0373、
0.0382、0.0390、0.0396、0.0399、0.0400、 0.0399、0.0396、0.0390、
+0.0382、0.0373、0.0361、0.0348、0.0333、 0.0316、0.0298、0.0279、
0.0259、0.0238、0.0217、0.0195、0.0173、 0.0151、0.0130、0.0108、0.0088
};
空 MT_ADCConfigure()
{
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);
ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE |
ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE、3);
ADCIntClear (ADC0_BASE、3);
}
空 MT_SSIConfigure()
{
SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinConfigure (GPIO_PA3_SSI0FSS);
GPIOPinConfigure (GPIO_PA4_SSI0TX);
GPIOPinConfigure (GPIO_PA5_SSI0RX);
GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2);
SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_MODE_3、
SSI_MODE_MASTER、10000、16);
SSIEnable (SSI0_BASE);
}
/*
* main.c
*
int main (空)
{
uint32_t xval[40]、dac_count;
浮点和、温度、电压;
uint32_t ui32SysClock;
uint32_t pui32DataTx;
int i、k;
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |SYSCTL_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_320)、
120000000);
MT_ADCConfigure();
MT_SSIConfigure();
DAC_LDAC ();
对于(i=0;i<40;i++)
{
xval[i]=0;
}
while (1)
{
MAP_GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、GPIO_PIN_3);//复位信号
MAP_GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_5、GPIO_PIN_5);//LDAC 信号
ADCProcessorTrigger (ADC0_BASE、3);
while (!ADCIntStatus (ADC0_BASE、3、false))
{
}
ADCIntClear (ADC0_BASE、3);
ADCSequenceDataGet (ADC0_BASE、3、pui32ADC0Value);
// xval[0]=*pui32ADC0Value;
voltion=(pui32ADC0Value[0]*3.3)/4096;
xval[0]=电压;
总和= 0;
for (k=0;k<40;k++)
{
temp =(xval[k])*(firCoeffs32[k]);
sum = sum + temp;
}
DAC_count=(sum*10000)/4;
pui32DataTx=DAC_COUNT;
SSIDataPut (SSI0_BASE、pui32DataTx);
while (SSIBusy (SSI0_BASE))
{
}
MAP_GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_5、0);
SSIIntClear (SSI0_BASE、SSI_RXFF);
SysCtlDelay (10);
MAP_GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_5、GPIO_PIN_5);
for (i=40;i>=0;i---)
{
xval[i+1]= xval[i];
}
}
}
void DAC_LDAC ()
{
/// LDAC 信号
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
MAP_GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、GPIO_PIN_5);
MAP_GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_5、GPIO_PIN_5);
//复位信号
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
MAP_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_3);
MAP_GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0);
}