Nucleo-F446RE 内蔵の AD/DA を使うためのライブラリ.DA からの出力は,標本化周波数の4倍のレートで行う.AD の読み込みにはソフトウェア割り込みを使用.  このライブラリを登録した際のプログラム: Demo_F446_AD_DA_MultirateSWI. Library for built-in ADC and DAC in Nucleo-F446RE using software interrupt for reading ADC. Sampling rate for DAC is four times of that for ADC.

Dependencies:   Array_Matrix

Dependents:   F446_UpSampling_LPF_HPF_Variable Demo_F446_AD_DA_MultirateSWI

Committer:
MikamiUitOpen
Date:
Sun Feb 09 02:18:32 2020 +0000
Revision:
2:c8aa7ae0012c
Parent:
1:ea2fb701744d
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:3e5b7187753d 1 //--------------------------------------------------------
MikamiUitOpen 0:3e5b7187753d 2 // Class for buit-in single DAC on STM32F446 ---- Header
MikamiUitOpen 0:3e5b7187753d 3 //
MikamiUitOpen 0:3e5b7187753d 4 // STM32F446 内蔵の DAC 用のクラス(ヘッダ)
MikamiUitOpen 0:3e5b7187753d 5 // 選択可能な入力端子:
MikamiUitOpen 0:3e5b7187753d 6 // A2 (PA_4): ---- デフォルト
MikamiUitOpen 0:3e5b7187753d 7 // D13 (PA_5): このポートはマイコンボードの LED もドライブするので
MikamiUitOpen 0:3e5b7187753d 8 // このポートは使わない方がよい
MikamiUitOpen 0:3e5b7187753d 9 //
MikamiUitOpen 1:ea2fb701744d 10 // 2018/11/28, Copyright (c) 2018 MIKAMI, Naoki
MikamiUitOpen 0:3e5b7187753d 11 //--------------------------------------------------------
MikamiUitOpen 0:3e5b7187753d 12
MikamiUitOpen 0:3e5b7187753d 13 #include "mbed.h"
MikamiUitOpen 0:3e5b7187753d 14
MikamiUitOpen 0:3e5b7187753d 15 #ifndef STM32F446xx
MikamiUitOpen 0:3e5b7187753d 16 #error Not NUCLEO-F446RE.
MikamiUitOpen 0:3e5b7187753d 17 #endif
MikamiUitOpen 0:3e5b7187753d 18
MikamiUitOpen 0:3e5b7187753d 19 #ifndef F446_DAC_SINGLE_HPP
MikamiUitOpen 0:3e5b7187753d 20 #define F446_DAC_SINGLE_HPP
MikamiUitOpen 0:3e5b7187753d 21
MikamiUitOpen 0:3e5b7187753d 22 namespace Mikami
MikamiUitOpen 0:3e5b7187753d 23 {
MikamiUitOpen 0:3e5b7187753d 24 class DacF446
MikamiUitOpen 0:3e5b7187753d 25 {
MikamiUitOpen 0:3e5b7187753d 26 public:
MikamiUitOpen 0:3e5b7187753d 27 // Constructor
MikamiUitOpen 0:3e5b7187753d 28 explicit DacF446(PinName pin = A2);
MikamiUitOpen 0:3e5b7187753d 29
MikamiUitOpen 0:3e5b7187753d 30 virtual ~DacF446() {}
MikamiUitOpen 0:3e5b7187753d 31
MikamiUitOpen 0:3e5b7187753d 32 // -1.0f <= data <= 1.0f
MikamiUitOpen 0:3e5b7187753d 33 void Write(float data) { WriteDac(ToUint16(data)); }
MikamiUitOpen 0:3e5b7187753d 34
MikamiUitOpen 1:ea2fb701744d 35 // 0 <= data <= 4095
MikamiUitOpen 0:3e5b7187753d 36 void Write(uint16_t data) { WriteDac(__USAT(data, BIT_WIDTH_)); }
MikamiUitOpen 0:3e5b7187753d 37
MikamiUitOpen 0:3e5b7187753d 38 private:
MikamiUitOpen 0:3e5b7187753d 39 void (DacF446::*fpWriteDac)(uint16_t);
MikamiUitOpen 0:3e5b7187753d 40
MikamiUitOpen 0:3e5b7187753d 41 static const int BIT_WIDTH_ = 12;
MikamiUitOpen 0:3e5b7187753d 42 AnalogOut da_;
MikamiUitOpen 0:3e5b7187753d 43
MikamiUitOpen 0:3e5b7187753d 44 // DAC の片方のチェンネルへ出力する
MikamiUitOpen 1:ea2fb701744d 45 void WriteDac1(uint16_t val) { DAC->DHR12R1 = val; } // CH1 へ
MikamiUitOpen 1:ea2fb701744d 46 void WriteDac2(uint16_t val) { DAC->DHR12R2 = val; } // CH2 へ
MikamiUitOpen 0:3e5b7187753d 47
MikamiUitOpen 0:3e5b7187753d 48 void WriteDac(uint16_t val) { (this->*fpWriteDac)(val); }
MikamiUitOpen 0:3e5b7187753d 49
MikamiUitOpen 0:3e5b7187753d 50 // 飽和処理を行い uint16_t 型のデータを戻り値とする
MikamiUitOpen 0:3e5b7187753d 51 uint16_t ToUint16(float val)
MikamiUitOpen 0:3e5b7187753d 52 { return __USAT((val + 1.0f)*2048.0f, BIT_WIDTH_); }
MikamiUitOpen 0:3e5b7187753d 53
MikamiUitOpen 0:3e5b7187753d 54 // for inhibition of copy constructor
MikamiUitOpen 0:3e5b7187753d 55 DacF446(const DacF446&);
MikamiUitOpen 0:3e5b7187753d 56 // for inhibition of substitute operator
MikamiUitOpen 0:3e5b7187753d 57 DacF446& operator=(const DacF446&);
MikamiUitOpen 0:3e5b7187753d 58 };
MikamiUitOpen 0:3e5b7187753d 59 }
MikamiUitOpen 1:ea2fb701744d 60 #endif // F446_DAC_SINGLE_HPP
MikamiUitOpen 1:ea2fb701744d 61