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 Feb 02 23:33:01 2015 +0000
Revision:
21:3731753ebf24
Parent:
20:c49f3b565a87
22

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 20:c49f3b565a87 1 //------------------------------------------------------
MikamiUitOpen 20:c49f3b565a87 2 // Class for single DAC in MCP4921
MikamiUitOpen 20:c49f3b565a87 3 //
MikamiUitOpen 20:c49f3b565a87 4 // 2015/02/02, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 20:c49f3b565a87 5 //------------------------------------------------------
MikamiUitOpen 20:c49f3b565a87 6
MikamiUitOpen 20:c49f3b565a87 7 #include "DAC_MCP4921.hpp"
MikamiUitOpen 20:c49f3b565a87 8
MikamiUitOpen 20:c49f3b565a87 9 namespace Mikami
MikamiUitOpen 20:c49f3b565a87 10 {
MikamiUitOpen 20:c49f3b565a87 11 DAC_MCP4921::DAC_MCP4921(PinName mosi, PinName sclk,
MikamiUitOpen 20:c49f3b565a87 12 PinName cs, PinName ldac)
MikamiUitOpen 20:c49f3b565a87 13 : spi_(mosi, NC, sclk),
MikamiUitOpen 20:c49f3b565a87 14 ld_(ldac, 0), mySpi_((SPI_TypeDef*)NULL)
MikamiUitOpen 20:c49f3b565a87 15 {
MikamiUitOpen 20:c49f3b565a87 16 if ( (mosi == PA_7) || (mosi == PB_5) ) mySpi_ = SPI1;
MikamiUitOpen 20:c49f3b565a87 17 if ( (mosi == PB_15) || (mosi == PC_3) ) mySpi_ = SPI2;
MikamiUitOpen 20:c49f3b565a87 18 if ( mosi == PC_12 ) mySpi_ = SPI3;
MikamiUitOpen 20:c49f3b565a87 19
MikamiUitOpen 20:c49f3b565a87 20 // Set SPI format
MikamiUitOpen 20:c49f3b565a87 21 spi_.format(16, 0);
MikamiUitOpen 20:c49f3b565a87 22 // Clock source of F401 for SPI1 : 84 MHz,
MikamiUitOpen 20:c49f3b565a87 23 // SPI2, SPI3 : 42 MHz
MikamiUitOpen 20:c49f3b565a87 24 mySpi_->CR1 = (mySpi_->CR1 & ~SPI_CR1_BR);
MikamiUitOpen 20:c49f3b565a87 25 if (mySpi_ == SPI1) mySpi_->CR1 += SPI_CR1_BR_0;
MikamiUitOpen 20:c49f3b565a87 26 #ifdef __STM32F411xE_H
MikamiUitOpen 20:c49f3b565a87 27 mySpi_->CR1 += SPI_CR1_BR_0;
MikamiUitOpen 20:c49f3b565a87 28 #endif // __STM32F411xE_H
MikamiUitOpen 20:c49f3b565a87 29
MikamiUitOpen 20:c49f3b565a87 30 // timer prescaler is set same value of boud rate for SPI
MikamiUitOpen 20:c49f3b565a87 31 uint16_t psc = (2 << ((mySpi_->CR1 >> 3) & 0x07)) - 1;
MikamiUitOpen 20:c49f3b565a87 32 if (mySpi_ != SPI1) psc = (psc + 1)*2 - 1;
MikamiUitOpen 20:c49f3b565a87 33 ss_ = new Tim4_ss(psc, 19, cs);
MikamiUitOpen 20:c49f3b565a87 34 }
MikamiUitOpen 20:c49f3b565a87 35
MikamiUitOpen 20:c49f3b565a87 36 void DAC_MCP4921::ScfClockTim3(uint32_t clock, PinName pin)
MikamiUitOpen 20:c49f3b565a87 37 {
MikamiUitOpen 20:c49f3b565a87 38 if ( (pin != PA_6) && (pin != PB_4) && (pin != PB_5) &&
MikamiUitOpen 20:c49f3b565a87 39 (pin != PC_6) && (pin != PC_7) && (pin != PC_8) && (pin != PC_9) )
MikamiUitOpen 20:c49f3b565a87 40 {
MikamiUitOpen 20:c49f3b565a87 41 fprintf(stderr, "\r\nIllegal pin name in DAC_MCP4921::ScfClockTim3()\r\n");
MikamiUitOpen 20:c49f3b565a87 42 while (true) {}
MikamiUitOpen 20:c49f3b565a87 43 }
MikamiUitOpen 20:c49f3b565a87 44
MikamiUitOpen 20:c49f3b565a87 45 PwmOut clockSCF(pin);
MikamiUitOpen 20:c49f3b565a87 46
MikamiUitOpen 20:c49f3b565a87 47 TIM3->ARR = SystemCoreClock/clock - 1;
MikamiUitOpen 20:c49f3b565a87 48 TIM3->PSC = 0;
MikamiUitOpen 20:c49f3b565a87 49 // Set capture/compare register 2
MikamiUitOpen 20:c49f3b565a87 50 if ( (pin == PA_6) || (pin == PB_4) || (pin == PC_6) )
MikamiUitOpen 20:c49f3b565a87 51 TIM3->CCR1 = (TIM3->ARR + 1)/2;
MikamiUitOpen 20:c49f3b565a87 52 if ( (pin == PB_5) || (pin == PC_7) )
MikamiUitOpen 20:c49f3b565a87 53 TIM3->CCR2 = (TIM3->ARR + 1)/2;
MikamiUitOpen 20:c49f3b565a87 54 if (pin == PC_8)
MikamiUitOpen 20:c49f3b565a87 55 TIM3->CCR3 = (TIM3->ARR + 1)/2;
MikamiUitOpen 20:c49f3b565a87 56 if (pin == PC_9)
MikamiUitOpen 20:c49f3b565a87 57 TIM3->CCR4 = (TIM3->ARR + 1)/2;
MikamiUitOpen 20:c49f3b565a87 58 }
MikamiUitOpen 20:c49f3b565a87 59 }