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:
Fri Jan 30 07:22:28 2015 +0000
Revision:
19:900efc6796d4
Parent:
18:0bfced9d5526
Child:
20:c49f3b565a87
20

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 14:6c60601c1834 8 // D10 SPI Slave Select ----------------------- TIM4
MikamiUitOpen 8:f933fcd30408 9 // D12 to MCP4922 LDAC pin
MikamiUitOpen 14:6c60601c1834 10 // D9 clock for Switched-capacitor filter ---- TIM3
MikamiUitOpen 0:6e0ed5adfe47 11 //
MikamiUitOpen 8:f933fcd30408 12 // Argument cs in constructor must be output of TIM4,
MikamiUitOpen 8:f933fcd30408 13 // i.e. D10(PB_6), PB_7, D15(PB_8), or D14(PB_9)
MikamiUitOpen 8:f933fcd30408 14 //
MikamiUitOpen 14:6c60601c1834 15 // Argument pin in function ScfClockTim3() can be
MikamiUitOpen 14:6c60601c1834 16 // PA_6(D12), PB_4(D5), PC_6, PB_5(D4), PC_7(D9),
MikamiUitOpen 14:6c60601c1834 17 // PC_8, or PC_9
MikamiUitOpen 8:f933fcd30408 18 //
MikamiUitOpen 19:900efc6796d4 19 // 2015/01/30, Copyright (c) 2014 MIKAMI, Naoki
MikamiUitOpen 0:6e0ed5adfe47 20 //------------------------------------------------------
MikamiUitOpen 0:6e0ed5adfe47 21
MikamiUitOpen 0:6e0ed5adfe47 22 #ifndef DAC_MCP4922_HPP
MikamiUitOpen 0:6e0ed5adfe47 23 #define DAC_MCP4922_HPP
MikamiUitOpen 0:6e0ed5adfe47 24
MikamiUitOpen 0:6e0ed5adfe47 25 #include "mbed.h"
MikamiUitOpen 0:6e0ed5adfe47 26 #include "tim4_slaveSelect.hpp"
MikamiUitOpen 0:6e0ed5adfe47 27
MikamiUitOpen 0:6e0ed5adfe47 28 namespace Mikami
MikamiUitOpen 0:6e0ed5adfe47 29 {
MikamiUitOpen 0:6e0ed5adfe47 30 class DAC_MCP4922
MikamiUitOpen 0:6e0ed5adfe47 31 {
MikamiUitOpen 0:6e0ed5adfe47 32 public:
MikamiUitOpen 0:6e0ed5adfe47 33 enum DAC { DAC_A = 0, DAC_B = 0x8000 };
MikamiUitOpen 0:6e0ed5adfe47 34
MikamiUitOpen 0:6e0ed5adfe47 35 // Constructor
MikamiUitOpen 0:6e0ed5adfe47 36 DAC_MCP4922(
MikamiUitOpen 3:77bc5550dc10 37 DAC dac = DAC_A, // channel A
MikamiUitOpen 0:6e0ed5adfe47 38 PinName mosi = SPI_MOSI, // D11
MikamiUitOpen 0:6e0ed5adfe47 39 PinName sclk = SPI_SCK, // D13
MikamiUitOpen 0:6e0ed5adfe47 40 PinName cs = SPI_CS, // D10
MikamiUitOpen 16:0001d3e93bee 41 PinName ldac = SPI_MISO); // D12
MikamiUitOpen 0:6e0ed5adfe47 42
MikamiUitOpen 0:6e0ed5adfe47 43 // -1.0f <= value <= 1.0f
MikamiUitOpen 18:0bfced9d5526 44 void Write(float value)
MikamiUitOpen 18:0bfced9d5526 45 {
MikamiUitOpen 18:0bfced9d5526 46 if (value < -1.0f) value = -1.0f;
MikamiUitOpen 18:0bfced9d5526 47 if (value > 1.0f) value = 1.0f;
MikamiUitOpen 18:0bfced9d5526 48
MikamiUitOpen 18:0bfced9d5526 49 WriteDac((uint16_t)((value + 1.0f)*2047));
MikamiUitOpen 18:0bfced9d5526 50 }
MikamiUitOpen 18:0bfced9d5526 51
MikamiUitOpen 0:6e0ed5adfe47 52 // 0 <= value <= 4095
MikamiUitOpen 18:0bfced9d5526 53 void Write(uint16_t value)
MikamiUitOpen 18:0bfced9d5526 54 { WriteDac((value > 4095) ? 4095 : value); }
MikamiUitOpen 2:2a3b4ed3eb58 55
MikamiUitOpen 0:6e0ed5adfe47 56 // generate LDAC negative-going pulse
MikamiUitOpen 18:0bfced9d5526 57 void Ldac()
MikamiUitOpen 18:0bfced9d5526 58 {
MikamiUitOpen 18:0bfced9d5526 59 ld_.write(0);
MikamiUitOpen 18:0bfced9d5526 60 ld_.write(0); // ensure width of "L" pulse
MikamiUitOpen 18:0bfced9d5526 61 ld_.write(1);
MikamiUitOpen 18:0bfced9d5526 62 }
MikamiUitOpen 0:6e0ed5adfe47 63
MikamiUitOpen 0:6e0ed5adfe47 64 // Check busy
MikamiUitOpen 0:6e0ed5adfe47 65 bool IsBusy()
MikamiUitOpen 19:900efc6796d4 66 { return (mySpi_->SR & SPI_SR_BSY) == SPI_SR_BSY; }
MikamiUitOpen 8:f933fcd30408 67
MikamiUitOpen 19:900efc6796d4 68 // Little wait
MikamiUitOpen 19:900efc6796d4 69 void Wait()
MikamiUitOpen 19:900efc6796d4 70 { __NOP(); __NOP(); __NOP(); }
MikamiUitOpen 19:900efc6796d4 71
MikamiUitOpen 8:f933fcd30408 72 // Set clock for switched-capacitor filter
MikamiUitOpen 14:6c60601c1834 73 void ScfClockTim3(uint32_t clock, PinName pin = D9);
MikamiUitOpen 8:f933fcd30408 74
MikamiUitOpen 0:6e0ed5adfe47 75 private:
MikamiUitOpen 0:6e0ed5adfe47 76 uint16_t wcr_; // write command register
MikamiUitOpen 0:6e0ed5adfe47 77 SPI spi_; // SPI object of mbed
MikamiUitOpen 2:2a3b4ed3eb58 78 Tim4_ss* ss_;
MikamiUitOpen 0:6e0ed5adfe47 79 DigitalOut ld_; // for LDAC
MikamiUitOpen 0:6e0ed5adfe47 80
MikamiUitOpen 0:6e0ed5adfe47 81 // Pointer of I2C
MikamiUitOpen 0:6e0ed5adfe47 82 SPI_TypeDef* mySpi_;
MikamiUitOpen 0:6e0ed5adfe47 83
MikamiUitOpen 0:6e0ed5adfe47 84 // for inhibition of copy constructor
MikamiUitOpen 0:6e0ed5adfe47 85 DAC_MCP4922(const DAC_MCP4922&);
MikamiUitOpen 0:6e0ed5adfe47 86 // for inhibition of substitute operator
MikamiUitOpen 2:2a3b4ed3eb58 87 DAC_MCP4922& operator=(const DAC_MCP4922&);
MikamiUitOpen 2:2a3b4ed3eb58 88
MikamiUitOpen 0:6e0ed5adfe47 89 // for internal use
MikamiUitOpen 18:0bfced9d5526 90 void WriteDac(uint16_t value)
MikamiUitOpen 18:0bfced9d5526 91 {
MikamiUitOpen 19:900efc6796d4 92 while (IsBusy()) {}
MikamiUitOpen 18:0bfced9d5526 93 ss_->SlaveSelect();
MikamiUitOpen 18:0bfced9d5526 94 mySpi_->DR = value | wcr_;
MikamiUitOpen 18:0bfced9d5526 95 }
MikamiUitOpen 0:6e0ed5adfe47 96 };
MikamiUitOpen 0:6e0ed5adfe47 97 }
MikamiUitOpen 0:6e0ed5adfe47 98 #endif // DAC_MCP4922_HPP
MikamiUitOpen 19:900efc6796d4 99