CQ出版社セミナ "実習・Armマイコン内蔵ペリフェラルを活用するためのC++プログラミング" で使う外付け回路のテスト

Dependencies:   mbed UIT_SetOutputPortType UIT_AQM1602 UIT_ADT7410

F446_ADDA/F446_Dac.hpp

Committer:
MikamiUitOpen
Date:
2020-04-02
Revision:
2:3f2be675f975
Parent:
0:8c850cf6285d

File content as of revision 2:3f2be675f975:

//--------------------------------------------------------
//  STM32F446 内蔵の DAC 用のクラス
//      出力端子:   A2  (PA_4)
//
//  2020/02/18, Copyright (c) 2020 MIKAMI, Naoki
//--------------------------------------------------------
#include "mbed.h"

#ifndef DAC_F446_SINGLE_HPP
#define DAC_F446_SINGLE_HPP

namespace Mikami
{
    class DacF446
    {
    public:
        // コンストラクタ, A2 に接続される CH1 のみを有効にする
        DacF446();

        virtual ~DacF446() {}

        // -1.0f <= data <= 1.0f
        void Write(float data) { WriteDacCh1(ToUint16(data)); }

        // 0 <= data <= 4095
        void Write(uint16_t data) { WriteDacCh1(__USAT(data, BIT_WIDTH_)); }

    private:
        static const int BIT_WIDTH_ = 12;
        DAC_TypeDef* const myDac_;  // DA 変換器に対応するポインタ

        // DAC の CH1 へ右詰めで出力する
        void WriteDacCh1(uint16_t val) { myDac_->DHR12R1 = val; }

        // 飽和処理を行い uint16_t 型のデータを戻り値とする
        uint16_t ToUint16(float val)
        {   return __USAT((val + 1.0f)*2048.0f, BIT_WIDTH_); }

        // DA 変換器に関係のある GPIO の設定
        void SetGPIO();

        // コピー・コンストラクタ,代入演算子禁止のため
        DacF446(const DacF446&);
        DacF446& operator=(const DacF446&);
    };
}
#endif  // DAC_F446_SINGLE_HPP