Class library for internal ADC and DAC connected by SPI. ADC is triggered by TIM2. 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. Slave select of SPI for DAC is generated using TIM4. Validated for ST Nucleo F401RE, F411RE. New version. 内蔵 ADC と,SPI 接続の DAC のためのクラスライブラリ.ADC の変換開始トリガは TIM2 で発生.DAC の出力信号を平滑化するためのスイッチトキャパシタフィルタ用のクロックは TIM3 を使用.DAC の SPI 用スレーブ選択信号は TIM4 で発生.ST Nucleo F401RE,F411RE で動作を確認.新バージョン

Dependents:   UIT2_MovingAverage UIT2_AllpassReverb UIT2_CombReverb UIT2_FIR_LPF_Symmetry ... more

Committer:
MikamiUitOpen
Date:
Wed Nov 12 08:56:31 2014 +0000
Revision:
8:f933fcd30408
Parent:
7:6a9c1633dd90
Child:
9:72fe42a4323c
9

Who changed what in which revision?

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