Você está na página 1de 3

//****************************************************************************** //ADC_6_7_test_code //****************************************************************************** //Author: Lic.-Ing. Gonzalo Aceves //Date: 2010 #include "msp430f2274.h" #include "functions.

h" void initializeADC(void) { ADC10CTL0 = REF2_5V + REFON + ADC10ON + ADC10SHT_2 + ADC10IE; //ADC Configuration: //High ref 2.5V, Reference generator ADC ON, ADC ON, Sample and Hold, Interrupt enabled } unsigned short int readADC(char channel) { unsigned short int res6 = 0xFF; //changed from int to volatile int to avoid warnings unsigned short int res7 = 0xFF; //changed from int to volatile int to avoid warnings if (channel == 12) { ADC10CTL0 &= ~(ENC); ADC10CTL1 = INCH_12; ADC10AE0 = BITC; ADC10CTL0 |= ENC + ADC10SC; ADC10SC __bis_SR_register(CPUOFF + GIE); //delay_ms(1); res6 = ADC10MEM; return res6; } else if (channel == 13) { ADC10CTL0 &= ~(ENC); ADC10CTL1 = INCH_13; ADC10AE0 = BITD; ADC10CTL0 |= ENC + ADC10SC; ADC10SC __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit // LPM0, ADC10_ISR will force exit

//Write 0 on ENC in order to reconfigure ADC //Channel 12 ADC enabled //Pin for Channel 12 ADC enabled //Trigger conversion 1 by toggling ENC and //causing high edge on

//Write 0 on ENC in order to reconfigure ADC //Channel 13 ADC enabled //Pin for Channel 13 ADC enabled //Trigger conversion 2 by toggling ENC and //causing high edge on

//delay_ms(1); res7 = ADC10MEM; return res7; } else return 0; } // ADC10 interrupt service routine #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { __bic_SR_register_on_exit(CPUOFF); }

// Clear CPUOFF bit from 0(SR)

unsigned short int readADC_oldVersion(char channel) { unsigned short int res6 = 0xFF; //changed from int to volatile int to avoid warnings unsigned short int res7 = 0xFF; //changed from int to volatile int to avoid warnings if (channel == 12) { ADC10CTL0 &= ~(ENC); ADC10CTL1 = INCH_12; ADC10AE0 = BITC; ADC10CTL0 |= ENC + ADC10SC; ADC10SC /*while( (ADC10CTL1 & BIT0) == 1) { delay_ms(1); }*/ delay_ms(1); res6 = ADC10MEM; return res6; } else if (channel == 13) { ADC10CTL0 &= ~(ENC); ADC10CTL1 = INCH_13; ADC10AE0 = BITD; ADC10CTL0 |= ENC + ADC10SC; ADC10SC //Conversion in progress, wait

//Write 0 on ENC in order to reconfigure ADC //Channel 12 ADC enabled //Pin for Channel 12 ADC enabled //Trigger conversion 1 by toggling ENC and //causing high edge on

//Write 0 on ENC in order to reconfigure ADC //Channel 13 ADC enabled //Pin for Channel 13 ADC enabled //Trigger conversion 2 by toggling ENC and //causing high edge on

/*while( (ADC10CTL1 & BIT0) == 1) { delay_ms(1); }*/ delay_ms(1); res7 = ADC10MEM; return res7; } else return 0; }

//Conversion in progress, wait

void testADC(void) { volatile int res6 = 0xFF; //changed from int to volatile int to avoid warnings volatile int res7 = 0xFF; //changed from int to volatile int to avoid warnings volatile unsigned short bsy = 0xF; //changed from int to volatile int to avoid warnings volatile unsigned short int i, j; P1DIR |= 0x01; ADC10CTL0 &= ~(ENC); ADC10CTL1 = INCH_6; ADC10AE0 = BIT6; ADC10CTL0 |= ENC + ADC10SC; bsy = 0xF; bsy = ADC10CTL1 & 0x01; res6 = ADC10MEM; P1OUT ^= 0x01; ADC10CTL0 &= ~(ENC); ADC10CTL1 = INCH_7; ADC10AE0 = BIT7; ADC10CTL0 |= ENC + ADC10SC; bsy = 0xF; bsy = ADC10CTL1 & 0x01; res7 = ADC10MEM; delay_ms(1000); } //volatile to prevent optimization //Set P1.0 to output direction //Write 0 on ENC in order to reconfigure ADC //Channel 6 ADC enabled //Pin for Channel 6 ADC enabled //Trigger conversion 1

//Toggle P1.0 using exclusive-OR //Write 0 on ENC in order to reconfigure ADC //Channel 7 ADC enabled //Pin for Channel 7 ADC enabled //Trigger conversion 2

Você também pode gostar