Class library for internal ADC and DAC connected by SPI. This library support clock generator using TIM3 for switched-capacitor filter to smooth output signal of DAC. This library includes derivative class to support interrupt occured in end of AD conversion. Validated for ST Nucleo F401RE, F411RE. 内蔵 ADC と,SPI 接続の DAC のためのクラスライブラリ.DAC の出力信号を平滑化するためのスイッチトキャパシタフィルタ用のクロックは TIM3 を使用.ST Nucleo F401RE,F411RE で動作を確認.

Dependents:   UITDSP_ADDA_Example UIT2_MovingAv_Intr UIT2_VariableFIR UIT2_VowelSynthesizer ... more

Committer:
MikamiUitOpen
Date:
Sat Jul 25 05:40:26 2015 +0000
Revision:
8:543daa087bd5
Parent:
7:14cdca8b48f8
6

Who changed what in which revision?

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