#include<msp430.h>
void ConfigureAdc(void);
void ConfigureDAC(void);
volatile int temp;
void main(void)
{
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ;
//BCSCTL2 &= ~(DIVS_3); // SMCLK = DCO = 1MHz
P6DIR = 0x0F7;
P1SEL |= BIT3; // ADC input pin P1.3
ConfigureAdc(); // ADC set-up function call
ConfigureDAC();
__enable_interrupt(); // Enable interrupts.
while(1)
{
ADC12CTL0 |= ENC + ADC12SC; // Sampling and conversion start
_BIS_SR(CPUOFF + GIE); // LPM0 with interrupts enabled
}
}
}
void ConfigureAdc(void)
{
ADC12CTL0 = SHT0_8 + ADC12ON;
ADC12CTL1 = SHP; // enable sample timer
ADC12MCTL0 = INCH_3;
ADC12IE = 0x001;
}
#pragma vector = ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
temp = ADC12MEM3; // Move results, IFG is cleared
DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
DAC12_0DAT = temp;
_BIC_SR_IRQ(CPUOFF); // Clear CPUOFF bit from 0(SR)
}
void ConfigureDAC(void)
{
TACCR0 = 13600; // Delay to allow Ref to settle
TACCTL0 |= CCIE; // Compare-mode interrupt.
TACTL = TACLR + MC_1 + TASSEL_2; // up mode, SMCLK
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts
TACCTL0 &= ~CCIE; // Disable timer interrupt
__disable_interrupt(); // Disable Interrupts
}
#pragma vector = TIMERA0_VECTOR
__interrupt void TA0_ISR(void)
{
TACTL = 0; // Clear Timer_A control registers
__bic_SR_register_on_exit(LPM0_bits); // Exit LPMx, interrupts enabled
}