Started by 3 months ago39 views

1.For last few days i have been trying to configure the ADC to measure the battery level. So here i am using the Reference voltage generator as ref to ADC.As we know we can't start ADC before the Ref local buffer settle down. So there are two ways to do this i guess

1.By using REFGENRDY bit in REFCTL

2. By using the ADCRDYIFG interrupt

Since i work on very power concerned application i adopt the ADC ready interrupt.but Eventhough i have enable the interrupt and set most of thing in right way (i believe)  the ADCRDY interrupt is not getting triggered.And there is a term called sample trigger (which can help the ADCRDYIFG) but i don't know how to set that signal

2. And i also can't wrap up head around the multiple ADCMCTL registers and CSTART ADDRX bit. what is the connection between these two registers.

/* --COPYRIGHT--,BSD_EX

* Copyright (c) 2015, Texas Instruments Incorporated

*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions

* are met:

*

* *  Redistributions of source code must retain the above copyright

*    notice, this list of conditions and the following disclaimer.

*

* *  Redistributions in binary form must reproduce the above copyright

*    notice, this list of conditions and the following disclaimer in the

*    documentation and/or other materials provided with the distribution.

*

* *  Neither the name of Texas Instruments Incorporated nor the names of

*    its contributors may be used to endorse or promote products derived

*    from this software without specific prior written permission.

*

* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR

* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,

* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,

* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;

* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,

* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR

* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,

* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*

*******************************************************************************

*

*                       MSP430 CODE EXAMPLE DISCLAIMER

*

* MSP430 code examples are self-contained low-level programs that typically

* demonstrate a single peripheral function or device feature in a highly

* concise manner. For this the code may rely on the device's power-on default

* register values and settings such as the clock configuration and care must

* be taken when combining code from several examples to avoid potential side

* effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware

* for an API functional library-approach to peripheral configuration.

*

//******************************************************************************

//  MSP430FR5x9x Demo - ADC12, Sample A1, AVcc Ref, Set P1.0 if A1 > 0.5*AVcc

//

//   Description: A single sample is made on A1 with reference to AVcc.

//   automatically cleared at EOC. ADC12 internal oscillator times sample (16x)

//   and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC12

//   conversion complete, ADC12_ISR will force exit from LPM0 in Mainloop on

//   reti. If A1 > 0.5*AVcc, P1.0 set, else reset. The full, correct handling of

//   and ADC12 interrupt is shown as well.

//

//

//                MSP430FR5994

//             -----------------

//         /|\|              XIN|-

//          | |                 |

//          --|RST          XOUT|-

//            |                 |

//        >---|P1.1/A1      P1.0|-->LED

//

//   William Goh

//   Texas Instruments Inc.

//   October 2015

//   Built with IAR Embedded Workbench V6.30 & Code Composer Studio V6.1

//******************************************************************************

#include <msp430.h>

int main(void)

{

WDTCTL = WDTPW | WDTHOLD;               // Stop WDT

// GPIO Setup

P1OUT &= ~BIT0;                         // Clear LED to start

P1DIR |= BIT0;                          // Set P1.0/LED to output

P1SEL1 |= BIT2;                         // Configure P1.1 for ADC

P1SEL0 |= BIT2;

// Disable the GPIO power-on default high-impedance mode to activate

// previously configured port settings

PM5CTL0 &= ~LOCKLPM5;

// Configure Ref voltage generator

REFCTL0 |=REFVSEL_3|REFON;

__enable_interrupt();

while (1)

{

while(!(REFCTL0 & REFGENRDY));          // Wait for reference generator

__delay_cycles(5000);

__bis_SR_register(LPM0_bits | GIE); // LPM0, ADC12_ISR will force exit

__no_operation();                   // For debugger

}

}

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#elif defined(__GNUC__)

#else

#error Compiler not supported!

#endif

{

{

case ADC12IV__NONE:        __no_operation(); break;   // Vector  0:  No interrupt

P1OUT |= BIT0;              // P1.0 = 1

else

P1OUT &= ~BIT0;             // P1.0 = 0

// Exit from LPM0 and continue executing main

__bic_SR_register_on_exit(LPM0_bits);

__no_operation(); break;

}