MSP-EXP430FR5739: ADC10B mit PWM triggern

Im folgenden Beispiel wird mit dem Timer A0 eine PWM (50 Hz, 10 % duty cycle) erzeugt welche ohne CPU Interaktion den ADC 10B des MSP430FR5739 triggert und eine Messung auslöst. Gemessen wird die Spannung an Port 1.1. Ist der ADC fertig wird ein Interrupt ausgelöst.
Nur während die ISR läuft wacht die CPU kurz auf.

[c]
#include „msp430fr5739.h“

unsigned int ADC_Result;

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

// Setup clock system
CSCTL0_H = 0xA5; // Password
CSCTL1 |= DCOFSEL0 + DCOFSEL1; // DCO 8 MHz
CSCTL2 = SELA_3 + SELS_3 + SELM_3; // set ACLK = SMCLK = DCO/8

// Port Setup
P1DIR |= BIT0; // Set P1.0 to output direction
P1SEL0 |= BIT0; // P1.0 is output for PWM for debugging
P1SEL1 |= BIT1; // P1.1 is input for ADC
P1SEL0 |= BIT1; // P1.1 is input for ADC

// Setup Timer
TA0CCR0 = 20000 – 1; // PWM Period 50 Hz
TA0CCTL1 = OUTMOD_7; // CCR1 reset/set
TA0CCR1 = 2000; // CCR1 PWM duty cycle 10 %
TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, up mode, clear TAR

// Setup ADC
ADC10CTL0 &= ~ADC10ENC;
ADC10CTL0 |= ADC10SHT_2 + ADC10ON; // ADC10ON, S&H=16 ADC clks
ADC10CTL1 |= ADC10CONSEQ_2; // Single-channel repeat
ADC10CTL1 |= ADC10SHS_1; // Set PWM as trigger source
ADC10CTL1 &= ~ADC10SHP; // Bypass Sample timer
ADC10CTL2 |= ADC10RES; // 10-bit conversion results
ADC10MCTL0 |= ADC10INCH_1; // A1 ADC input select; Vref=AVCC
ADC10IE |= ADC10IE0; // Enable ADC conv complete interrupt
ADC10CTL0 |= ADC10ENC; // Enable ADC conversation

_BIS_SR(GIE);

while(1) __bic_SR_register(CPUOFF);
}

#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__no_operation();
switch(__even_in_range(ADC10IV,12))
{
case 0: break; // No interrupt
case 2: break; // conversion result overflow
case 4: break; // conversion time overflow
case 6: break; // ADC10HI
case 8: break; // ADC10LO
case 10: break; // ADC10IN
case 12:
ADC_Result = ADC10MEM0;
__no_operation();
__bic_SR_register_on_exit(CPUOFF);
break;

default: break;
}
}
[/c]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert