Skip to content
Snippets Groups Projects
Commit 7fa97753 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Add MSP430FR5969 ADC driver

parent a92b8a81
No related branches found
No related tags found
No related merge requests found
#ifndef ADC_H
#define ADC_H
class ADC {
private:
ADC(ADC const &copy);
public:
ADC() {}
float getTemp();
float getVCC();
};
extern ADC adc;
#endif
......@@ -11,6 +11,7 @@ CXX = /opt/msp430/ti/gcc/bin/msp430-elf-g++
OBJCOPY = /opt/msp430/ti/gcc/bin/msp430-elf-objcopy
TARGETS += src/arch/msp430fr5969lp/arch.cc
TARGETS += src/arch/msp430fr5969lp/driver/adc.cc
TARGETS += src/arch/msp430fr5969lp/driver/gpio.cc
TARGETS += src/arch/msp430fr5969lp/driver/stdout.cc
TARGETS += src/arch/msp430fr5969lp/driver/uptime.cc
......
#include "driver/adc.h"
#include <msp430.h>
#define CALADC12_12V_30C *((unsigned int *)0x1A1A)
#define CALADC12_12V_85C *((unsigned int *)0x1A1C)
float ADC::getTemp()
{
float ret;
while(REFCTL0 & REFGENBUSY);
REFCTL0 = REFVSEL_0 | REFON;
ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 = ADC12SHT0_8 | ADC12ON;
ADC12CTL1 = ADC12SHP;
ADC12CTL3 = ADC12TCMAP;
ADC12MCTL0 = ADC12VRSEL_1 | ADC12INCH_30;
while(!(REFCTL0 & REFGENRDY));
ADC12CTL0 |= ADC12ENC;
ADC12CTL0 |= ADC12SC;
while (ADC12CTL1 & ADC12BUSY);
ret = (float)((long)ADC12MEM0 - CALADC12_12V_30C) * (85 - 30) /
(CALADC12_12V_85C - CALADC12_12V_30C) + 30.0f;
// Disable ADC
ADC12CTL0 &= ~ADC12ENC; // disable any conversion to allow ADC configuration
ADC12CTL0 &= ~ADC12ON; // Turn off ADC
// Disable internal 2V reference
while(REFCTL0 & REFGENBUSY);
REFCTL0 &= ~REFON;
return ret;
}
float ADC::getVCC()
{
float ret;
while(REFCTL0 & REFGENBUSY);
REFCTL0 = REFVSEL_1 | REFON;
ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 = ADC12SHT0_8 | ADC12ON;
ADC12CTL1 = ADC12SHP;
ADC12CTL3 = ADC12BATMAP;
ADC12MCTL0 = ADC12VRSEL_1 | ADC12INCH_31;
while(!(REFCTL0 & REFGENRDY));
ADC12CTL0 |= ADC12ENC;
ADC12CTL0 |= ADC12SC;
while (ADC12CTL1 & ADC12BUSY);
ret = (float)ADC12MEM0 / 4096 * 2 * 2;
return ret;
// Disable ADC
ADC12CTL0 &= ~ADC12ENC; // disable any conversion to allow ADC configuration
ADC12CTL0 &= ~ADC12ON; // Turn off ADC
// Disable internal 2V reference
while(REFCTL0 & REFGENBUSY);
REFCTL0 &= ~REFON;
return ret;
}
ADC adc;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment