CQエレクトロニクス・セミナ「実習・マイコンを動かしながら学ぶディジタル・フィルタ」で使うプログラムを,入力として STM32F746 の内蔵 ADC を使うように変更したもの. http://seminar.cqpub.co.jp/ccm/ES18-0020

Dependencies:   mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

F764_Adc/F746_ADC.hpp

Committer:
MikamiUitOpen
Date:
2018-03-12
Revision:
2:dd48e1e59daa
Parent:
0:ab7a35d87173

File content as of revision 2:dd48e1e59daa:

//----------------------------------------------------------
//  Simultanuous AD Conversion by polling using
//  ADC1 and ADC3 on STM32F746 ---- Header
//
//  STM32F746 の ADC1, ADC3 を使って同時に AD 変換を開始し,
//  ポーリングによりアナログ信号を入力するクラス
//      PA_0  (DISCO-F746 の A0) :  ADC1 CH0
//      PF_10 (DISCO-F746 の A1) :  ADC3 CH8
//
//  Read() の引数:
//      第一引数:A0 (左),第二引数:A1 (右)
//
//  2017/08/16, Copyright (c) 2017 MIKAMI, Naoki
//----------------------------------------------------------

#include "mbed.h"

#ifndef STM32F746xx
#error Target is not STM32F746
#endif

#ifndef F746_ADC_DUAL_HPP
#define F746_ADC_DUAL_HPP

namespace Mikami
{
    class AdcDual
    {
    public:
        // Constructor
        //      frequency: 標本化周波数
        explicit AdcDual(int frequency);
        
        virtual ~AdcDual() {}

        // -1.0f <= ad1, ad2 <= 1.0f
        //      ad1: left, ad2: right
        virtual void Read(float &ad1, float &ad2);

        // 0 <= ad1, ad2 <= 4095
        //      ad1: left, ad2: right
        virtual void Read(uint16_t &ad1, uint16_t &ad2);

    protected:
        float ToFloat(uint16_t x)
        {   return AMP_*(x - 2048); }
    
    private:
        static const float AMP_ = 1.0f/2048.0f;
        static const uint32_t EOC13_ = ADC_CSR_EOC1 | ADC_CSR_EOC3;
        
        // AD 変換が完了するまで待つ
        void WaitDone()
        {   while((ADC->CSR & EOC13_) != EOC13_); }

        // AD 変換器の外部トリガに使うタイマ (TIM6) の設定
        void SetTim6(int frequency);

        // for inhibition of copy constructor
        AdcDual(const AdcDual&);
        // for inhibition of substitute operator
        AdcDual& operator=(const AdcDual&);     
    };
}
#endif  // F746_ADC_DUAL_HPP

/*
typedef struct
{
  __IO uint32_t SR;     //!< ADC status register,                         Address offset: 0x00 //
  __IO uint32_t CR1;    //!< ADC control register 1,                      Address offset: 0x04 //      
  __IO uint32_t CR2;    //!< ADC control register 2,                      Address offset: 0x08 //
  __IO uint32_t SMPR1;  //!< ADC sample time register 1,                  Address offset: 0x0C //
  __IO uint32_t SMPR2;  //!< ADC sample time register 2,                  Address offset: 0x10 //
  __IO uint32_t JOFR1;  //!< ADC injected channel data offset register 1, Address offset: 0x14 //
  __IO uint32_t JOFR2;  //!< ADC injected channel data offset register 2, Address offset: 0x18 //
  __IO uint32_t JOFR3;  //!< ADC injected channel data offset register 3, Address offset: 0x1C //
  __IO uint32_t JOFR4;  //!< ADC injected channel data offset register 4, Address offset: 0x20 //
  __IO uint32_t HTR;    //!< ADC watchdog higher threshold register,      Address offset: 0x24 //
  __IO uint32_t LTR;    //!< ADC watchdog lower threshold register,       Address offset: 0x28 //
  __IO uint32_t SQR1;   //!< ADC regular sequence register 1,             Address offset: 0x2C //
  __IO uint32_t SQR2;   //!< ADC regular sequence register 2,             Address offset: 0x30 //
  __IO uint32_t SQR3;   //!< ADC regular sequence register 3,             Address offset: 0x34 //
  __IO uint32_t JSQR;   //!< ADC injected sequence register,              Address offset: 0x38 //
  __IO uint32_t JDR1;   //!< ADC injected data register 1,                Address offset: 0x3C //
  __IO uint32_t JDR2;   //!< ADC injected data register 2,                Address offset: 0x40 //
  __IO uint32_t JDR3;   //!< ADC injected data register 3,                Address offset: 0x44 //
  __IO uint32_t JDR4;   //!< ADC injected data register 4,                Address offset: 0x48 //
  __IO uint32_t DR;     //!< ADC regular data register,                   Address offset: 0x4C //
} ADC_TypeDef;

typedef struct
{
  __IO uint32_t CSR;    //!< ADC Common status register,                  Address offset: ADC1 base address + 0x300 //
  __IO uint32_t CCR;    //!< ADC common control register,                 Address offset: ADC1 base address + 0x304 //
  __IO uint32_t CDR;    //!< ADC common regular data register for dual
                             AND triple modes,                            Address offset: ADC1 base address + 0x308 //
} ADC_Common_TypeDef;
*/