dear
i am not getting actual output when adc in interrupt mode . i want to sample adc at 10KHz . i used timer to generate interrupt please suggest me any modification.
/* * 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 Timer_configure(void); void Interrupt_configure(void); //void Timer0IntHandler(void); float dac_count,value,xval[27]; float sum,temp,voltage,value; uint32_t pui32ADC0Value[2]; void DAC_ldac(void); uint32_t ui32Period1, ui32Period2; 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); } void Timer_configure() { ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); ROM_TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC); ui32Period1 = SysCtlClockGet(); ui32Period2 = (ui32SysClock / 10000); TimerLoadSet(TIMER0_BASE, TIMER_A, ui32Period2 -1); TimerControlTrigger(TIMER0_BASE,TIMER_A,true); } void Interrupt_configure() { 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); } int main(void) { int i,k; float 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); MT_ADCConfigure(); Timer_configure(); Interrupt_configure(); MT_SSIConfigure(); DAC_ldac(); for(i=0;i<=26;i++) { xval[i]=0; } while(1) { MAP_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5,GPIO_PIN_5); MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,GPIO_PIN_3); 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); xval[0]=(*pui32ADC0Value*3.3)/4096; } void Timer0IntHandler(void) { ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); }