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 Oct 20 03:01:11 2014 +0000
Revision:
0:6e0ed5adfe47
Child:
5:651809e96a2d
1

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