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:
2:2a3b4ed3eb58
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:6e0ed5adfe47 1 //------------------------------------------------------
MikamiUitOpen 0:6e0ed5adfe47 2 // Class for single DAC in MCP4922 -- Header
MikamiUitOpen 0:6e0ed5adfe47 3 // Fast version
MikamiUitOpen 0:6e0ed5adfe47 4 //
MikamiUitOpen 0:6e0ed5adfe47 5 // Default pin assign
MikamiUitOpen 0:6e0ed5adfe47 6 // D11 SPI Master Out Slave In
MikamiUitOpen 0:6e0ed5adfe47 7 // D13 SPI Serial Clock
MikamiUitOpen 0:6e0ed5adfe47 8 // D12 SPI Slave Select
MikamiUitOpen 0:6e0ed5adfe47 9 // D10 to MCP4922 LDAC pin
MikamiUitOpen 0:6e0ed5adfe47 10 //
MikamiUitOpen 0:6e0ed5adfe47 11 // 2014/09/29, Copyright (c) 2014 MIKAMI, Naoki
MikamiUitOpen 0:6e0ed5adfe47 12 //------------------------------------------------------
MikamiUitOpen 0:6e0ed5adfe47 13
MikamiUitOpen 0:6e0ed5adfe47 14 #ifndef DAC_MCP4922_HPP
MikamiUitOpen 0:6e0ed5adfe47 15 #define DAC_MCP4922_HPP
MikamiUitOpen 0:6e0ed5adfe47 16
MikamiUitOpen 0:6e0ed5adfe47 17 #include "mbed.h"
MikamiUitOpen 0:6e0ed5adfe47 18 #include "tim4_slaveSelect.hpp"
MikamiUitOpen 0:6e0ed5adfe47 19
MikamiUitOpen 0:6e0ed5adfe47 20 namespace Mikami
MikamiUitOpen 0:6e0ed5adfe47 21 {
MikamiUitOpen 0:6e0ed5adfe47 22 class DAC_MCP4922
MikamiUitOpen 0:6e0ed5adfe47 23 {
MikamiUitOpen 0:6e0ed5adfe47 24 public:
MikamiUitOpen 0:6e0ed5adfe47 25 enum DAC { DAC_A = 0, DAC_B = 0x8000 };
MikamiUitOpen 0:6e0ed5adfe47 26
MikamiUitOpen 0:6e0ed5adfe47 27 // Constructor
MikamiUitOpen 0:6e0ed5adfe47 28 DAC_MCP4922(
MikamiUitOpen 0:6e0ed5adfe47 29 DAC dac,
MikamiUitOpen 0:6e0ed5adfe47 30 PinName mosi = SPI_MOSI, // D11
MikamiUitOpen 0:6e0ed5adfe47 31 PinName sclk = SPI_SCK, // D13
MikamiUitOpen 0:6e0ed5adfe47 32 PinName cs = SPI_CS, // D10
MikamiUitOpen 0:6e0ed5adfe47 33 PinName ldac = SPI_MISO, // D12
MikamiUitOpen 0:6e0ed5adfe47 34 int hz = 21000000); // 21 MHz
MikamiUitOpen 0:6e0ed5adfe47 35
MikamiUitOpen 0:6e0ed5adfe47 36 // -1.0f <= value <= 1.0f
MikamiUitOpen 0:6e0ed5adfe47 37 void Write(float value);
MikamiUitOpen 0:6e0ed5adfe47 38 // 0 <= value <= 4095
MikamiUitOpen 0:6e0ed5adfe47 39 void Write(uint16_t value);
MikamiUitOpen 0:6e0ed5adfe47 40
MikamiUitOpen 0:6e0ed5adfe47 41 // generate LDAC negative-going pulse
MikamiUitOpen 0:6e0ed5adfe47 42 void Ldac();
MikamiUitOpen 0:6e0ed5adfe47 43
MikamiUitOpen 0:6e0ed5adfe47 44 // LDAC to H
MikamiUitOpen 0:6e0ed5adfe47 45 void LdacH() { ld_.write(1); }
MikamiUitOpen 0:6e0ed5adfe47 46 // LDAC to L
MikamiUitOpen 0:6e0ed5adfe47 47 void LdacL() { ld_.write(0); }
MikamiUitOpen 0:6e0ed5adfe47 48
MikamiUitOpen 0:6e0ed5adfe47 49 // Check busy
MikamiUitOpen 0:6e0ed5adfe47 50 bool IsBusy()
MikamiUitOpen 0:6e0ed5adfe47 51 { return (mySpi_->SR & SPI_FLAG_BSY) == SPI_FLAG_BSY; }
MikamiUitOpen 0:6e0ed5adfe47 52
MikamiUitOpen 0:6e0ed5adfe47 53 private:
MikamiUitOpen 0:6e0ed5adfe47 54 uint16_t wcr_; // write command register
MikamiUitOpen 0:6e0ed5adfe47 55 SPI spi_; // SPI object of mbed
MikamiUitOpen 0:6e0ed5adfe47 56 Tim4_ss* ss_; // for slave select
MikamiUitOpen 0:6e0ed5adfe47 57 DigitalOut ld_; // for LDAC
MikamiUitOpen 0:6e0ed5adfe47 58
MikamiUitOpen 0:6e0ed5adfe47 59 // Pointer of I2C
MikamiUitOpen 0:6e0ed5adfe47 60 SPI_TypeDef* mySpi_;
MikamiUitOpen 0:6e0ed5adfe47 61
MikamiUitOpen 0:6e0ed5adfe47 62 // for inhibition of copy constructor
MikamiUitOpen 0:6e0ed5adfe47 63 DAC_MCP4922(const DAC_MCP4922&);
MikamiUitOpen 0:6e0ed5adfe47 64 // for inhibition of substitute operator
MikamiUitOpen 0:6e0ed5adfe47 65 DAC_MCP4922& operator=(const DAC_MCP4922&);
MikamiUitOpen 0:6e0ed5adfe47 66
MikamiUitOpen 0:6e0ed5adfe47 67 // for internal use
MikamiUitOpen 0:6e0ed5adfe47 68 void WriteDac(uint16_t value);
MikamiUitOpen 0:6e0ed5adfe47 69 };
MikamiUitOpen 0:6e0ed5adfe47 70 }
MikamiUitOpen 0:6e0ed5adfe47 71 #endif // DAC_MCP4922_HPP
MikamiUitOpen 0:6e0ed5adfe47 72