void RMBD01Init( void ) { // // Configure the ADC for Pitch and Roll // sequence 3 means a single sample // sequence 1, 2 means up to 4 samples // sequence 0 means up to 8 samples // we use sequence 1 // if (SysCtlPeripheralPresent(SYSCTL_PERIPH_ADC0)) { SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_TIMER, 0); // 1 captures up to 4 samples // // Select the external reference for greatest accuracy. // ADCReferenceSet(ADC0_BASE, ADC_REF_EXT_3V); ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ENCODER_CHANNEL_PITCH); // sample pitch ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ENCODER_CHANNEL_ROLL | ADC_CTL_IE | ADC_CTL_END); // sample roll ADCIntRegister(ADC0_BASE,1,ADCIntHandler); ADCSequenceEnable(ADC0_BASE, 1); ADCIntEnable(ADC0_BASE, 1); // // Setup timer for ADC_TRIGGER_TIMER // SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); // // Configure the second timer to generate triggers to the ADC // TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER); TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet() / 1000); // 2 ms TimerControlStall(TIMER1_BASE, TIMER_A, true); TimerControlTrigger(TIMER1_BASE, TIMER_A, true); // // Enable the timers. // TimerEnable(TIMER1_BASE, TIMER_A); new_adc = false; // } // // Clear outstanding ADC interrupt and enable // ADCIntClear(ADC0_BASE, 1); IntEnable(INT_ADC0); } // InitADC
void initHW_ADC(){ SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); //SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); ADCReferenceSet(ADC0_BASE, ADC_REF_INT); //Set reference to the internal reference ,You can set it to 1V or 3 V //ADCReferenceSet(ADC1_BASE, ADC_REF_INT); GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3); //Ain0 GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_2); //Ain1 GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_1); //Ain2 GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0); //Ain3 GPIOPinTypeADC(GPIO_PORTD_BASE, GPIO_PIN_3); //Ain4 /// imposta il sequencer 0, che ha 8 letture ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); //i sensori vengono numerati da quello davanti in senso antiorario ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0); /// PE.2 ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1); // PE.1 ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH2 ); //GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0); //Ain3 // PE.0 ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH3 ); /// PD.3 ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH4 ); /// PD.2 ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_CH5 | ADC_CTL_IE | ADC_CTL_END); /// abilita il sequencer 0 ADCSequenceEnable(ADC0_BASE, 0); /// messaggio di benvenuto PRINTF("Ciao: stai provando il converntitore AD!\n"); /// abilta l'interruzione del sequencer 0 ADCIntClear(ADC0_BASE, 0); // // Enable the ADC interrupt. // IntEnable(INT_ADC0SS0); ADCIntEnable(ADC0_BASE, 0); // // Enable processor interrupts. // IntMasterEnable(); }
/** * Configure the processor's A/D converter subsystem. */ static void adc_setup(void) { ADCHardwareOversampleConfigure(ADC0_BASE, ADC_SAC_AVG_OFF); ADCReferenceSet(ADC0_BASE, ADC_REF_INT); /* * Create a sample sequence for our A/D (what inputs to sample). */ ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0); ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1); ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH2); ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH3); /* The last conversion is the internal temperature sensor */ ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); }