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:
Mon Nov 10 01:48:18 2014 +0000
Revision:
5:651809e96a2d
Parent:
0:6e0ed5adfe47
Child:
7:6a9c1633dd90
6

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 5:651809e96a2d 7 // 2014/10/10, 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 0:6e0ed5adfe47 20 // Using mbed library for ADC
MikamiUitOpen 0:6e0ed5adfe47 21 AnalogIn adc_;
MikamiUitOpen 0:6e0ed5adfe47 22 // Default constructor is not defined in AnalogIn class
MikamiUitOpen 0:6e0ed5adfe47 23 AnalogIn* adc2_;
MikamiUitOpen 0:6e0ed5adfe47 24 AnalogIn* adc3_;
MikamiUitOpen 0:6e0ed5adfe47 25
MikamiUitOpen 0:6e0ed5adfe47 26 // Pins for Analog input
MikamiUitOpen 0:6e0ed5adfe47 27 const PinName PIN1_, PIN2_, PIN3_;
MikamiUitOpen 0:6e0ed5adfe47 28
MikamiUitOpen 0:6e0ed5adfe47 29 // Set timer to generate sampling pulse for ADC
MikamiUitOpen 0:6e0ed5adfe47 30 void SetTim2(int frequency);
MikamiUitOpen 0:6e0ed5adfe47 31
MikamiUitOpen 0:6e0ed5adfe47 32 // for inhibition of copy constructor
MikamiUitOpen 0:6e0ed5adfe47 33 ADC_Base(const ADC_Base&);
MikamiUitOpen 0:6e0ed5adfe47 34 // for inhibition of substitute operator
MikamiUitOpen 0:6e0ed5adfe47 35 ADC_Base& operator=(const ADC_Base&);
MikamiUitOpen 0:6e0ed5adfe47 36
MikamiUitOpen 0:6e0ed5adfe47 37 protected:
MikamiUitOpen 0:6e0ed5adfe47 38 // for normalize
MikamiUitOpen 0:6e0ed5adfe47 39 static const float AMP_ = 1.0f/2048.0f;
MikamiUitOpen 0:6e0ed5adfe47 40
MikamiUitOpen 0:6e0ed5adfe47 41 ADC_TypeDef* const myAdc_;
MikamiUitOpen 0:6e0ed5adfe47 42
MikamiUitOpen 0:6e0ed5adfe47 43 // Wait until completion of AD conversion
MikamiUitOpen 0:6e0ed5adfe47 44 void WaitDone()
MikamiUitOpen 0:6e0ed5adfe47 45 { while((myAdc_->SR & ADC_SR_EOC) == RESET); }
MikamiUitOpen 0:6e0ed5adfe47 46
MikamiUitOpen 0:6e0ed5adfe47 47 public:
MikamiUitOpen 0:6e0ed5adfe47 48 // Constructor
MikamiUitOpen 0:6e0ed5adfe47 49 // pin1: Pin Name for input as A0, A1, etc.
MikamiUitOpen 0:6e0ed5adfe47 50 // frequency: Sampling frequency
MikamiUitOpen 0:6e0ed5adfe47 51 // pin2: If use 2nd channel set this parameter
MikamiUitOpen 0:6e0ed5adfe47 52 // pin3: If use 3rd channel set this parameter
MikamiUitOpen 0:6e0ed5adfe47 53 ADC_Base(PinName pin1, int frequency,
MikamiUitOpen 0:6e0ed5adfe47 54 PinName pin2 = NC, PinName pin3 = NC);
MikamiUitOpen 0:6e0ed5adfe47 55
MikamiUitOpen 0:6e0ed5adfe47 56 // Read ADC with waiting, range: [0, 0x0FFF]
MikamiUitOpen 0:6e0ed5adfe47 57 virtual uint16_t Read_u16()
MikamiUitOpen 0:6e0ed5adfe47 58 {
MikamiUitOpen 0:6e0ed5adfe47 59 WaitDone();
MikamiUitOpen 0:6e0ed5adfe47 60 return myAdc_->DR;
MikamiUitOpen 0:6e0ed5adfe47 61 }
MikamiUitOpen 0:6e0ed5adfe47 62
MikamiUitOpen 0:6e0ed5adfe47 63 // Read ADC with waiting, range: [-1.0f, 1.0f]
MikamiUitOpen 0:6e0ed5adfe47 64 virtual float Read()
MikamiUitOpen 0:6e0ed5adfe47 65 {
MikamiUitOpen 0:6e0ed5adfe47 66 WaitDone();
MikamiUitOpen 0:6e0ed5adfe47 67 return AMP_*((int16_t)myAdc_->DR - 2048);
MikamiUitOpen 0:6e0ed5adfe47 68 }
MikamiUitOpen 0:6e0ed5adfe47 69
MikamiUitOpen 0:6e0ed5adfe47 70 // Select channel
MikamiUitOpen 0:6e0ed5adfe47 71 void Select1stChannel() { myAdc_->SQR3 = PIN1_; }
MikamiUitOpen 0:6e0ed5adfe47 72 void Select2ndChannel() { myAdc_->SQR3 = PIN2_; }
MikamiUitOpen 0:6e0ed5adfe47 73 void Select3rdChannel() { myAdc_->SQR3 = PIN3_; }
MikamiUitOpen 0:6e0ed5adfe47 74
MikamiUitOpen 0:6e0ed5adfe47 75 // Software start
MikamiUitOpen 0:6e0ed5adfe47 76 virtual void SoftStart()
MikamiUitOpen 0:6e0ed5adfe47 77 { myAdc_->CR2 |= ADC_CR2_SWSTART; }
MikamiUitOpen 0:6e0ed5adfe47 78
MikamiUitOpen 0:6e0ed5adfe47 79 uint32_t ReadSQR3() { return myAdc_->SQR3; }
MikamiUitOpen 0:6e0ed5adfe47 80 };
MikamiUitOpen 0:6e0ed5adfe47 81 }
MikamiUitOpen 0:6e0ed5adfe47 82 #endif // ADC_BASE_HPP
MikamiUitOpen 0:6e0ed5adfe47 83
MikamiUitOpen 0:6e0ed5adfe47 84
MikamiUitOpen 0:6e0ed5adfe47 85
MikamiUitOpen 0:6e0ed5adfe47 86