/* This interrupt is fired whenever a conversion is completed and placed in * ADC_MEM0 */ void adc_isr(void) { uint64_t status; MAP_Timer_A_clearTimer(TIMER_A0_MODULE); status = MAP_ADC14_getEnabledInterruptStatus(); MAP_ADC14_clearInterruptFlag(status); if (status & ADC_INT0) { resultsBuffer[resPos++] = MAP_ADC14_getResult(ADC_MEM0); } }
void GetLightValue(uint16_t *luxValue,int8_t *lightIndex) { int err = 0; int16_t photoGain = 1.0, photoOffset = -1450.0; photoGain = 1.0; photoOffset = -1450.0; memset(resultsBuffer, 0, sizeof(resultsBuffer)); resultsBuffer = MAP_ADC14_getResult(ADC_MEM0); //MAP_ADC14_getMultiSequenceResult(resultsBuffer); photoRAW = resultsBuffer; photoCON[0] = (photoGain*((3.3*1000)/((photoRAW)*3.3/16384)) * 1.3) + photoOffset; calculateLighting(photoCON[0], lightString, &index[0]); *luxValue = photoCON[0]; *lightIndex = index[0]; return err; }
int main(void) { WDT_A_holdTimer(); //Configure Timer unsigned int dcoFrequency = 3E+6; MAP_CS_setDCOFrequency(dcoFrequency); MAP_CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1); // ( 3Mhz / 64 ) / (Period = 46875) = 1 second //Set LED's as outputs and turn off MAP_GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0); MAP_GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN0); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0); //////////////////////////////////////////////////////////////////////////////////////////////////// // ADC INITILIZATION P5.5 //////////////////////////////////////////////////////////////////////////////////////////////////// /* Initializing ADC */ MAP_ADC14_enableModule(); GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN5, GPIO_TERTIARY_MODULE_FUNCTION); //writes 0's in PXSEL registers for pins 1.2 and 1.3 MAP_ADC14_setResolution(ADC_10BIT); // initialize to use a 10 Bit ADC MAP_ADC14_initModule(ADC_CLOCKSOURCE_SMCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_1,0); /* Configuring ADC Memory */ MAP_ADC14_configureSingleSampleMode(ADC_MEM0, false); //put results in this 16 bit register location to hold results, false means we are manually triggering MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_AVCC_VREFNEG_VSS, ADC_INPUT_A0, false); //pin 5.5 is tied to channel 0 (A0) /* Configuring Sample Timer */ MAP_ADC14_enableSampleTimer(ADC_MANUAL_ITERATION); //Timer A setup MAP_Timer_A_configureUpMode(TIMER_A0_MODULE, &upConfig0); Interrupt_enableInterrupt(INT_TA0_0); Timer_A_startCounter(TIMER_A0_MODULE, TIMER_A_UP_MODE); /* Enabling/Toggling Conversion */ MAP_ADC14_enableConversion(); MAP_ADC14_toggleConversionTrigger(); //////////////////////////////////////////////////////////////////////////////////////////////////// // END ADC //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Timer A 2 and PWM on P5.6 //////////////////////////////////////////////////////////////////////////////////////////////////// GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN6, GPIO_PRIMARY_MODULE_FUNCTION); //writes 0's in PXSEL registers for pins 1.2 and 1.3 // Set Timer A period (PWM signal period) TA2CCR0 = 10000 ; // i think i wrote this wring, his example he showed in class is is 10000 // Set Duty cycle TA2CCR1 = DUTY_CYCLE * 10000; //inital DutyCycle of 0%.. Duty_Cycle is macro // Set output mode to Reset/Set TA2CCTL1 = OUTMOD_7 ; // Macro which is equal to 0x00e0, defined in msp432p401r.h // Initialize Timer A TA2CTL = TASSEL__SMCLK | MC__UP | TACLR ; // this bitwise or’s multiple settings at the same time (this just sets different bits in the register to set these functionalities/settings) //Does this start the timer?? (is next line necessary?) Timer_A_startCounter(TIMER_A2_MODULE, TIMER_A_UP_MODE); //////////////////////////////////////////////////////////////////////////////////////////////////// // END Timer A 2 and PWM on 5.6 //////////////////////////////////////////////////////////////////////////////////////////////////// Interrupt_enableMaster() ; while(1){ while(MAP_ADC14_isBusy()==0){ // poll the busy flag. we have a conversion going bc we already triggerted it above, so we are waiting for the conversion to be done, when it is, we are going to call the get result function. this just returns the 16 bit value rsults ADC_result = (uint16_t)MAP_ADC14_getResult(ADC_MEM0); //just goes to memory location takes results and returns the 16 bit value... this just continues to get repopulted. MAP_ADC14_toggleConversionTrigger(); ////once we got the result we start a new conversion and we go back to top and begin wiaitng until its dones again }//end nested while }//end inf while }//end main