不韋 呂 / UIT_ADDA

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
MikamiUitOpen 0:6e0ed5adfe47 3 //
MikamiUitOpen 0:6e0ed5adfe47 4 // 2014/09/29, Copyright (c) 2014 MIKAMI, Naoki
MikamiUitOpen 0:6e0ed5adfe47 5 //------------------------------------------------------
MikamiUitOpen 0:6e0ed5adfe47 6
MikamiUitOpen 0:6e0ed5adfe47 7 #include "DAC_MCP4922.hpp"
MikamiUitOpen 0:6e0ed5adfe47 8
MikamiUitOpen 0:6e0ed5adfe47 9 namespace Mikami
MikamiUitOpen 0:6e0ed5adfe47 10 {
MikamiUitOpen 0:6e0ed5adfe47 11 DAC_MCP4922::DAC_MCP4922(DAC dac, PinName mosi, PinName sclk,
MikamiUitOpen 0:6e0ed5adfe47 12 PinName cs, PinName ldac, int hz)
MikamiUitOpen 0:6e0ed5adfe47 13 : wcr_(dac | 0x3000), spi_(mosi, NC, sclk),
MikamiUitOpen 0:6e0ed5adfe47 14 ld_(ldac, 0), mySpi_((SPI_TypeDef*)NULL)
MikamiUitOpen 0:6e0ed5adfe47 15 {
MikamiUitOpen 0:6e0ed5adfe47 16 if ( (mosi == PA_7) || (mosi == PB_5) ) mySpi_ = SPI1;
MikamiUitOpen 0:6e0ed5adfe47 17 if ( (mosi == PB_15) || (mosi == PC_3) ) mySpi_ = SPI2;
MikamiUitOpen 0:6e0ed5adfe47 18 if ( mosi == PC_12 ) mySpi_ = SPI3;
MikamiUitOpen 0:6e0ed5adfe47 19
MikamiUitOpen 0:6e0ed5adfe47 20 // Set SPI format and bus frequency
MikamiUitOpen 0:6e0ed5adfe47 21 spi_.format(16, 0);
MikamiUitOpen 0:6e0ed5adfe47 22 spi_.frequency(hz);
MikamiUitOpen 0:6e0ed5adfe47 23
MikamiUitOpen 0:6e0ed5adfe47 24 // timer prescaler is set same value of boud rate for SPI
MikamiUitOpen 0:6e0ed5adfe47 25 uint16_t psc = (2 << ((mySpi_->CR1 >> 3) & 0x07)) - 1;
MikamiUitOpen 0:6e0ed5adfe47 26 ss_ = new Tim4_ss(psc, 18, cs);
MikamiUitOpen 0:6e0ed5adfe47 27
MikamiUitOpen 0:6e0ed5adfe47 28 // Set DAC to 0
MikamiUitOpen 0:6e0ed5adfe47 29 WriteDac(0);
MikamiUitOpen 0:6e0ed5adfe47 30 while (IsBusy()) {}
MikamiUitOpen 0:6e0ed5adfe47 31 }
MikamiUitOpen 0:6e0ed5adfe47 32
MikamiUitOpen 0:6e0ed5adfe47 33 void DAC_MCP4922::Write(float value)
MikamiUitOpen 0:6e0ed5adfe47 34 {
MikamiUitOpen 0:6e0ed5adfe47 35 if (value < -1.0f) value = -1.0f;
MikamiUitOpen 0:6e0ed5adfe47 36 if (value > 1.0f) value = 1.0f;
MikamiUitOpen 0:6e0ed5adfe47 37
MikamiUitOpen 0:6e0ed5adfe47 38 WriteDac((uint16_t)((value + 1.0f)*2047));
MikamiUitOpen 0:6e0ed5adfe47 39 }
MikamiUitOpen 0:6e0ed5adfe47 40
MikamiUitOpen 0:6e0ed5adfe47 41 void DAC_MCP4922::Write(uint16_t value)
MikamiUitOpen 0:6e0ed5adfe47 42 {
MikamiUitOpen 0:6e0ed5adfe47 43 WriteDac((value > 4095) ? 4095 : value);
MikamiUitOpen 0:6e0ed5adfe47 44 }
MikamiUitOpen 0:6e0ed5adfe47 45
MikamiUitOpen 0:6e0ed5adfe47 46 void DAC_MCP4922::Ldac()
MikamiUitOpen 0:6e0ed5adfe47 47 {
MikamiUitOpen 0:6e0ed5adfe47 48 ld_.write(0);
MikamiUitOpen 0:6e0ed5adfe47 49 ld_.write(0); // ensure width of "L" pulse
MikamiUitOpen 0:6e0ed5adfe47 50 ld_.write(1);
MikamiUitOpen 0:6e0ed5adfe47 51 }
MikamiUitOpen 0:6e0ed5adfe47 52
MikamiUitOpen 0:6e0ed5adfe47 53 void DAC_MCP4922::WriteDac(uint16_t value)
MikamiUitOpen 0:6e0ed5adfe47 54 {
MikamiUitOpen 0:6e0ed5adfe47 55 ss_->SlaveSelect();
MikamiUitOpen 0:6e0ed5adfe47 56 mySpi_->DR = value | wcr_;
MikamiUitOpen 0:6e0ed5adfe47 57 }
MikamiUitOpen 0:6e0ed5adfe47 58 }
MikamiUitOpen 0:6e0ed5adfe47 59
MikamiUitOpen 0:6e0ed5adfe47 60
MikamiUitOpen 0:6e0ed5adfe47 61
MikamiUitOpen 0:6e0ed5adfe47 62
MikamiUitOpen 0:6e0ed5adfe47 63