hello,
i posted earlier but till now i am unable to resolve problem.
my problem is explained below
i have a waveform which is addition of 1KHz and 10KHz. i want to remove 10KHz using fir filter . idesigned filter using fdatool in matlab. it gave me 27 coefficient. now i tried it to implement on tm4c129x board with a dac 7731 . i am not getting output as i want . can you please suggest any mistake or sin which i am doing in program.
/*
* main.c
*/
#include "stdbool.h"
#include "stdint.h"
#include "gpio.h"
#include "rom_map.h"
#include "driverlib/sysctl.h"
#include "inc/hw_memmap.h"
#include "pin_map.h"
#include "emac.h"
#include "systick.h"
#include "drivers/pinout.h"
#include "utils/ustdlib.h"
#include "driverlib/adc.h"
#include "math.h"
#include "driverlib/ssi.h"
#include "inc/tm4c129xnczad.h"
#include "grlib/grlib.h"
#include "grlib/widget.h"
#include "grlib/canvas.h"
#include "grlib/slider.h"
#include "drivers/frame.h"
#include "drivers/kentec320x240x16_ssd2119.h"
#include "drivers/sound.h"
#include "drivers/touch.h"
#include "driverlib/rom.h"
#include "driverlib/udma.h"
#include "driverlib/timer.h"
#include "driverlib/interrupt.h"
//#include "inc/hw_ints.h"
#define GPIO_PA2_SSI0CLK 0x0000080F
#define GPIO_PA3_SSI0FSS 0x00000C0F
#define GPIO_PA4_SSI0TX 0x0000100F
#define GPIO_PA5_SSI0RX 0x0000140F
void MT_SSIConfigure(void);
void MT_ADCConfigure(void);
//void Timer0IntHandler(void);
float xval[61],dac_count,value;
float sum,temp,voltage,value;
uint32_t pui32ADC0Value[2];
void DAC_ldac(void);
uint32_t ui32Period;
uint32_t ui32SysClock;
uint32_t pui32DataTx;
const double firCoeffs32[26] = {
0.00042786716307723429,
0.002919136775687219,
0.0087411768920698726,
0.01728389646188545,
0.023790092406399139,
0.020625746649647263,
0.0026178235631764959,
-0.025784577131922413,
-0.047619527772776261,
-0.039756341015621199,
0.012766667411548112,
0.10310658429302662,
0.20045692369728618,
0.26366156038852501,
0.26366156038852501,
0.20045692369728618,
0.10310658429302662,
0.012766667411548112,
-0.039756341015621199,
-0.047619527772776261,
-0.025784577131922413,
0.0026178235631764959,
0.020625746649647263,
0.023790092406399139,
0.01728389646188545,
0.0087411768920698726,
0.002919136775687219,
0.00042786716307723429,
};
void MT_ADCConfigure()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
GPIOPinTypeADC(GPIO_PORTK_BASE, GPIO_PIN_1);
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_TIMER, 0);
ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH17 | ADC_CTL_IE |
ADC_CTL_END);
ADCSequenceEnable(ADC0_BASE, 3);
ADCIntClear(ADC0_BASE, 3);
}
void 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_MODE_3,
SSI_MODE_MASTER, 10000, 16);
SSIEnable(SSI0_BASE);
}
int main(void)
{
int i,k;
float xval[27],dac_count,value;
float sum,temp,voltage;
uint32_t ui32SysClock,l;
ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480),120000000);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
ROM_TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
ui32Period = (SysCtlClockGet() / 10000);
TimerLoadSet(TIMER0_BASE, TIMER_A, ui32Period -1);
TimerControlTrigger(TIMER0_BASE,TIMER_A,true);
MT_ADCConfigure();
MT_SSIConfigure();
DAC_ldac();
for(i=0;i<=26;i++)
{
xval[i]=0;
}
// IntEnable(INT_TIMER0A); //
// TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); //
//
ROM_IntEnable(INT_TIMER0A);
ROM_TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
ROM_IntEnable(INT_ADC0SS3);
ROM_ADCIntEnable(ADC0_BASE,3);
ROM_IntMasterEnable();
ROM_TimerEnable(TIMER0_BASE,TIMER_A);
while(1)
{
MAP_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5,GPIO_PIN_5);
MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,GPIO_PIN_3);
// SysCtlDelay(8000);
// ADCProcessorTrigger(ADC0_BASE, 3);
// while(!ADCIntStatus(ADC0_BASE, 3, false))
// {
// }
// ADCIntClear(ADC0_BASE, 3);
sum=0;
for(k=0;k<=26;k++)
{
temp = (xval[k])*(firCoeffs32[k]);
sum = sum + temp;
}
for(i=27;i>=1;i--)
{
xval[i] = xval[i-1];
}
xval[0]=value;
dac_count= (sum*8190);
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);
//
MAP_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5,GPIO_PIN_5);
}
//return 0;
}
void DAC_ldac()
{
/// LDAC Signal
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
MAP_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_5);
MAP_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_PIN_5);
// Reset Signal
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
MAP_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3);
MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0);
}
void ADC0SS3IntHandler(void)
{
ADCIntClear(ADC0_BASE, 3);
ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);
value=(*pui32ADC0Value*3.3)/4096;
}
void Timer0IntHandler(void)
{
ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
}
please help me to complete it. now i am getting frustation. i saw many youtube video. but desire output is still missing