不韋 呂 / UITDSP_ADDA2

Dependents:   UITDSP_ADDA_Example2

Committer:
MikamiUitOpen
Date:
Sat Mar 14 06:49:49 2015 +0000
Revision:
0:46d099dfd9d6
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:46d099dfd9d6 1 //------------------------------------------------------
MikamiUitOpen 0:46d099dfd9d6 2 // Class for ADC using TIM2 trigger -- Header
MikamiUitOpen 0:46d099dfd9d6 3 //
MikamiUitOpen 0:46d099dfd9d6 4 // 2015/03/14, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 0:46d099dfd9d6 5 //------------------------------------------------------
MikamiUitOpen 0:46d099dfd9d6 6
MikamiUitOpen 0:46d099dfd9d6 7 #ifndef ADC_BUILTIN_HPP
MikamiUitOpen 0:46d099dfd9d6 8 #define ADC_BUILTIN_HPP
MikamiUitOpen 0:46d099dfd9d6 9
MikamiUitOpen 0:46d099dfd9d6 10 #include "mbed.h"
MikamiUitOpen 0:46d099dfd9d6 11
MikamiUitOpen 0:46d099dfd9d6 12 namespace Mikami
MikamiUitOpen 0:46d099dfd9d6 13 {
MikamiUitOpen 0:46d099dfd9d6 14 class ADC_BuiltIn
MikamiUitOpen 0:46d099dfd9d6 15 {
MikamiUitOpen 0:46d099dfd9d6 16 private:
MikamiUitOpen 0:46d099dfd9d6 17 // Following object of AnalogIn class will be
MikamiUitOpen 0:46d099dfd9d6 18 // initialized by menber initializer
MikamiUitOpen 0:46d099dfd9d6 19 AnalogIn adc_;
MikamiUitOpen 0:46d099dfd9d6 20 // Following two objects of AnalogIn class will be
MikamiUitOpen 0:46d099dfd9d6 21 // initailized by regular executable statements
MikamiUitOpen 0:46d099dfd9d6 22 AnalogIn* adc2_;
MikamiUitOpen 0:46d099dfd9d6 23 AnalogIn* adc3_;
MikamiUitOpen 0:46d099dfd9d6 24
MikamiUitOpen 0:46d099dfd9d6 25 // Channel of ADC1
MikamiUitOpen 0:46d099dfd9d6 26 uint8_t ch1_, ch2_, ch3_;
MikamiUitOpen 0:46d099dfd9d6 27
MikamiUitOpen 0:46d099dfd9d6 28 // Set timer to generate sampling pulse for ADC
MikamiUitOpen 0:46d099dfd9d6 29 void SetTim2(int frequency);
MikamiUitOpen 0:46d099dfd9d6 30
MikamiUitOpen 0:46d099dfd9d6 31 // Exctract channel number
MikamiUitOpen 0:46d099dfd9d6 32 uint8_t GetChannelNumber(PinName);
MikamiUitOpen 0:46d099dfd9d6 33
MikamiUitOpen 0:46d099dfd9d6 34 // for inhibition of copy constructor
MikamiUitOpen 0:46d099dfd9d6 35 ADC_BuiltIn(const ADC_BuiltIn&);
MikamiUitOpen 0:46d099dfd9d6 36 // for inhibition of substitute operator
MikamiUitOpen 0:46d099dfd9d6 37 ADC_BuiltIn& operator=(const ADC_BuiltIn&);
MikamiUitOpen 0:46d099dfd9d6 38
MikamiUitOpen 0:46d099dfd9d6 39 protected:
MikamiUitOpen 0:46d099dfd9d6 40 // for normalize
MikamiUitOpen 0:46d099dfd9d6 41 static const float AMP_ = 1.0f/2048.0f;
MikamiUitOpen 0:46d099dfd9d6 42
MikamiUitOpen 0:46d099dfd9d6 43 ADC_TypeDef* const myAdc_;
MikamiUitOpen 0:46d099dfd9d6 44
MikamiUitOpen 0:46d099dfd9d6 45 // Wait until completion of AD conversion
MikamiUitOpen 0:46d099dfd9d6 46 void WaitDone()
MikamiUitOpen 0:46d099dfd9d6 47 { while((myAdc_->SR & ADC_SR_EOC) == RESET); }
MikamiUitOpen 0:46d099dfd9d6 48
MikamiUitOpen 0:46d099dfd9d6 49 public:
MikamiUitOpen 0:46d099dfd9d6 50
MikamiUitOpen 0:46d099dfd9d6 51 // Constructor
MikamiUitOpen 0:46d099dfd9d6 52 // pin1: Pin Name for input as A0, A1, etc.
MikamiUitOpen 0:46d099dfd9d6 53 // frequency: Sampling frequency
MikamiUitOpen 0:46d099dfd9d6 54 // pin2: If use 2nd channel set this parameter
MikamiUitOpen 0:46d099dfd9d6 55 // pin3: If use 3rd channel set this parameter
MikamiUitOpen 0:46d099dfd9d6 56 ADC_BuiltIn(PinName pin1, int frequency,
MikamiUitOpen 0:46d099dfd9d6 57 PinName pin2 = NC, PinName pin3 = NC);
MikamiUitOpen 0:46d099dfd9d6 58
MikamiUitOpen 0:46d099dfd9d6 59 // Read ADC with waiting, range: [0, 0x0FFF]
MikamiUitOpen 0:46d099dfd9d6 60 virtual uint16_t Read_u16()
MikamiUitOpen 0:46d099dfd9d6 61 {
MikamiUitOpen 0:46d099dfd9d6 62 WaitDone();
MikamiUitOpen 0:46d099dfd9d6 63 return myAdc_->DR;
MikamiUitOpen 0:46d099dfd9d6 64 }
MikamiUitOpen 0:46d099dfd9d6 65
MikamiUitOpen 0:46d099dfd9d6 66 // Read ADC with waiting, range: [-1.0f, 1.0f]
MikamiUitOpen 0:46d099dfd9d6 67 virtual float Read()
MikamiUitOpen 0:46d099dfd9d6 68 {
MikamiUitOpen 0:46d099dfd9d6 69 WaitDone();
MikamiUitOpen 0:46d099dfd9d6 70 return AMP_*((int16_t)myAdc_->DR - 2048);
MikamiUitOpen 0:46d099dfd9d6 71 }
MikamiUitOpen 0:46d099dfd9d6 72
MikamiUitOpen 0:46d099dfd9d6 73 // Select channel
MikamiUitOpen 0:46d099dfd9d6 74 void Select1stChannel() { myAdc_->SQR3 = ch1_; }
MikamiUitOpen 0:46d099dfd9d6 75 void Select2ndChannel() { myAdc_->SQR3 = ch2_; }
MikamiUitOpen 0:46d099dfd9d6 76 void Select3rdChannel() { myAdc_->SQR3 = ch3_; }
MikamiUitOpen 0:46d099dfd9d6 77
MikamiUitOpen 0:46d099dfd9d6 78 // Software start
MikamiUitOpen 0:46d099dfd9d6 79 virtual void SoftStart()
MikamiUitOpen 0:46d099dfd9d6 80 { myAdc_->CR2 |= ADC_CR2_SWSTART; }
MikamiUitOpen 0:46d099dfd9d6 81
MikamiUitOpen 0:46d099dfd9d6 82 uint32_t ReadSQR3() { return myAdc_->SQR3; }
MikamiUitOpen 0:46d099dfd9d6 83 };
MikamiUitOpen 0:46d099dfd9d6 84 }
MikamiUitOpen 0:46d099dfd9d6 85 #endif // ADC_BUILTIN_HPP
MikamiUitOpen 0:46d099dfd9d6 86