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 09:02:46 2014 +0000
Revision:
9:72fe42a4323c
Parent:
8:f933fcd30408
Child:
13:f2b8af192558
10

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