void IRDetector_init(void) { ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); ROM_GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); ROM_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, 0x00); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); ROM_ADCHardwareOversampleConfigure(ADC0_BASE, 32); ROM_ADCSequenceConfigure(ADC0_BASE, 2, ADC_TRIGGER_PROCESSOR, 0); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_END | ADC_CTL_CH0 | ADC_CTL_IE); //PE3, enable interrupt ROM_ADCSequenceEnable(ADC0_BASE, 2); ADCIntRegister(ADC0_BASE, 2, &IR_Detector_ISR); ROM_ADCIntEnable(ADC0_BASE, 2); Timer_Init(); ADC_Step = 0; TURN_ON_IRD1(); ir_Runtimeout(&IR_Timer_Timeout, 1); }
//***************************************************************************** // // This function initializes the ADC hardware in preparation for data // acquisition. // //***************************************************************************** void AcquireInit(void) { unsigned long ulChan; // // Enable the ADC peripherals and the associated GPIO port // ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); ROM_SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |GPIO_PIN_7 | GPIO_PIN_3); ROM_GPIOPinTypeADC(GPIO_PORTP_BASE, GPIO_PIN_0); // ROM_ADCReferenceSet(ADC0_BASE, ADC_REF_EXT_3V); //ROM_ADCR ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); HWREG(GPIO_PORTB_BASE + GPIO_O_AMSEL) |= GPIO_PIN_6; ADCSequenceDisable(ADC0_BASE,SEQUENCER); ROM_ADCSequenceConfigure(ADC0_BASE, SEQUENCER, ADC_TRIGGER_TIMER, 0); for(ulChan = 0; ulChan < 2; ulChan++) { unsigned long ulChCtl; if (ulChan ==1) { ROM_ADCSequenceStepConfigure(ADC0_BASE, SEQUENCER, ulChan, ADC_CTL_CH1|ADC_CTL_IE | ADC_CTL_END); } else if(ulChan==0) { ulChCtl = ADC_CTL_CH0; ROM_ADCSequenceStepConfigure(ADC0_BASE, SEQUENCER, ulChan, ADC_CTL_CH0); } } ADCHardwareOversampleConfigure(ADC0_BASE, 1); SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); //SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); ROM_TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER ); //100 micro unsigned long freq=SAMPLING_FREQUENCY; unsigned long period=(2*ROM_SysCtlClockGet()/(freq)); ROM_TimerLoadSet(TIMER0_BASE, TIMER_A,period); ROM_TimerControlTrigger(TIMER0_BASE, TIMER_A, true); //ROM_TimerConfigure(TIMER1_BASE, TIMER_CFG_PERIODIC); //ROM_TimerLoadSet(TIMER1_BASE, TIMER_A, ROM_SysCtlClockGet() /2); CFAL96x64x16Init(); GrContextInit(&sDisplayContext, &g_sCFAL96x64x16); sRect1.sXMin = 0; sRect1.sYMin = 0; sRect1.sXMax = GrContextDpyWidthGet(&sDisplayContext) - 1; sRect1.sYMax = 23; sRect2.sXMin = 0; sRect2.sYMin = 23; sRect2.sXMax = GrContextDpyWidthGet(&sDisplayContext) - 1; sRect2.sYMax = GrContextDpyHeightGet(&sDisplayContext) - 1; snprintf(text,sizeof(text),"STart"); GrContextForegroundSet(&sDisplayContext, ClrDarkBlue); GrRectFill(&sDisplayContext, &sRect1); GrContextForegroundSet(&sDisplayContext, ClrWhite); //GrRectDraw(&sDisplayContext, &sRect1); GrContextFontSet(&sDisplayContext, g_pFontCm12); GrStringDrawCentered(&sDisplayContext,text, -1, GrContextDpyWidthGet(&sDisplayContext) / 2, 10, 0); //GrContextForegroundSet(&sDisplayContext, ClrDarkBlue); //GrRectFill(&sDisplayContext, &sRect1); //GrContextForegroundSet(&sDisplayContext, ClrWhite); //GrRectDraw(&sDisplayContext, &sRect1); /*GrContextForegroundSet(&sDisplayContext, ClrDarkBlue); GrRectFill(&sDisplayContext, &sRect2); GrContextForegroundSet(&sDisplayContext, ClrWhite); GrRectDraw(&sDisplayContext, &sRect2); */ compute_filter(); maxi1=0; maxi2=0; max1=0; max2=0; res=0; res1=0; g_ulADCCount=0; buffer_index=0; ulLastADCCount=0; }
void vTempDriverTask() //Code Credit to Tivaware Example temperature_sensor.c { uint32_t measurement[1]; uint32_t ui32TempValueC; ROM_GPIOPinTypeADC(GPIO_PORTD_BASE, GPIO_PIN_0); ROM_GPIOPinTypeADC(GPIO_PORTD_BASE, GPIO_PIN_1); ROM_ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0); //D0 ROM_ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH15 | ADC_CTL_IE | ADC_CTL_END); ROM_ADCSequenceEnable(ADC0_BASE, 3); ROM_ADCIntClear(ADC0_BASE, 3); for(;;) { xSemaphoreTake(pollTempSem, portMAX_DELAY); ROM_ADCProcessorTrigger(ADC0_BASE, 3); // Wait for conversion to be completed. while(!ROM_ADCIntStatus(ADC0_BASE, 3, false)) {} // Clear the ADC interrupt flag. ROM_ADCIntClear(ADC0_BASE, 3); // Read ADC Value. ROM_ADCSequenceDataGet(ADC0_BASE, 3, measurement); ui32TempValueC = (uint32_t)(log(40960/(29.0*measurement[0]) - 10.0/29) * -1/0.041); outputBuffer.tempR = ui32TempValueC; //Switch to other Thermistor ROM_ADCSequenceDisable(ADC0_BASE, 3); ROM_ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH14 | ADC_CTL_IE | //D1 ADC_CTL_END); ROM_ADCSequenceEnable(ADC0_BASE, 3); //Begin ADC poll ROM_ADCProcessorTrigger(ADC0_BASE, 3); // Wait for conversion to be completed. while(!ROM_ADCIntStatus(ADC0_BASE, 3, false)) {} // Clear the ADC interrupt flag. ROM_ADCIntClear(ADC0_BASE, 3); // Read ADC Value. ROM_ADCSequenceDataGet(ADC0_BASE, 3, measurement); ui32TempValueC = (uint32_t)(log(40960/(29.0*measurement[0]) - 10.0/29) * -1/0.041); outputBuffer.tempL = ui32TempValueC; ROM_ADCSequenceDisable(ADC0_BASE, 3); ROM_ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH15 | ADC_CTL_IE | ADC_CTL_END); ROM_ADCSequenceEnable(ADC0_BASE, 3); } }