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

Dependencies:   mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

Committer:
MikamiUitOpen
Date:
Mon Mar 12 05:10:31 2018 +0000
Revision:
2:dd48e1e59daa
Parent:
0:ab7a35d87173
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:ab7a35d87173 1 //----------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 2 // Simultanuous AD Conversion by polling using
MikamiUitOpen 0:ab7a35d87173 3 // ADC1 and ADC3 on STM32F746 ---- Header
MikamiUitOpen 0:ab7a35d87173 4 //
MikamiUitOpen 0:ab7a35d87173 5 // STM32F746 の ADC1, ADC3 を使って同時に AD 変換を開始し,
MikamiUitOpen 0:ab7a35d87173 6 // ポーリングによりアナログ信号を入力するクラス
MikamiUitOpen 0:ab7a35d87173 7 // PA_0 (DISCO-F746 の A0) : ADC1 CH0
MikamiUitOpen 0:ab7a35d87173 8 // PF_10 (DISCO-F746 の A1) : ADC3 CH8
MikamiUitOpen 0:ab7a35d87173 9 //
MikamiUitOpen 0:ab7a35d87173 10 // Read() の引数:
MikamiUitOpen 0:ab7a35d87173 11 // 第一引数:A0 (左),第二引数:A1 (右)
MikamiUitOpen 0:ab7a35d87173 12 //
MikamiUitOpen 0:ab7a35d87173 13 // 2017/08/16, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:ab7a35d87173 14 //----------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 15
MikamiUitOpen 0:ab7a35d87173 16 #include "mbed.h"
MikamiUitOpen 0:ab7a35d87173 17
MikamiUitOpen 0:ab7a35d87173 18 #ifndef STM32F746xx
MikamiUitOpen 0:ab7a35d87173 19 #error Target is not STM32F746
MikamiUitOpen 0:ab7a35d87173 20 #endif
MikamiUitOpen 0:ab7a35d87173 21
MikamiUitOpen 0:ab7a35d87173 22 #ifndef F746_ADC_DUAL_HPP
MikamiUitOpen 0:ab7a35d87173 23 #define F746_ADC_DUAL_HPP
MikamiUitOpen 0:ab7a35d87173 24
MikamiUitOpen 0:ab7a35d87173 25 namespace Mikami
MikamiUitOpen 0:ab7a35d87173 26 {
MikamiUitOpen 0:ab7a35d87173 27 class AdcDual
MikamiUitOpen 0:ab7a35d87173 28 {
MikamiUitOpen 0:ab7a35d87173 29 public:
MikamiUitOpen 0:ab7a35d87173 30 // Constructor
MikamiUitOpen 0:ab7a35d87173 31 // frequency: 標本化周波数
MikamiUitOpen 0:ab7a35d87173 32 explicit AdcDual(int frequency);
MikamiUitOpen 0:ab7a35d87173 33
MikamiUitOpen 0:ab7a35d87173 34 virtual ~AdcDual() {}
MikamiUitOpen 0:ab7a35d87173 35
MikamiUitOpen 0:ab7a35d87173 36 // -1.0f <= ad1, ad2 <= 1.0f
MikamiUitOpen 0:ab7a35d87173 37 // ad1: left, ad2: right
MikamiUitOpen 0:ab7a35d87173 38 virtual void Read(float &ad1, float &ad2);
MikamiUitOpen 0:ab7a35d87173 39
MikamiUitOpen 0:ab7a35d87173 40 // 0 <= ad1, ad2 <= 4095
MikamiUitOpen 0:ab7a35d87173 41 // ad1: left, ad2: right
MikamiUitOpen 0:ab7a35d87173 42 virtual void Read(uint16_t &ad1, uint16_t &ad2);
MikamiUitOpen 0:ab7a35d87173 43
MikamiUitOpen 0:ab7a35d87173 44 protected:
MikamiUitOpen 0:ab7a35d87173 45 float ToFloat(uint16_t x)
MikamiUitOpen 0:ab7a35d87173 46 { return AMP_*(x - 2048); }
MikamiUitOpen 0:ab7a35d87173 47
MikamiUitOpen 0:ab7a35d87173 48 private:
MikamiUitOpen 0:ab7a35d87173 49 static const float AMP_ = 1.0f/2048.0f;
MikamiUitOpen 0:ab7a35d87173 50 static const uint32_t EOC13_ = ADC_CSR_EOC1 | ADC_CSR_EOC3;
MikamiUitOpen 0:ab7a35d87173 51
MikamiUitOpen 0:ab7a35d87173 52 // AD 変換が完了するまで待つ
MikamiUitOpen 0:ab7a35d87173 53 void WaitDone()
MikamiUitOpen 0:ab7a35d87173 54 { while((ADC->CSR & EOC13_) != EOC13_); }
MikamiUitOpen 0:ab7a35d87173 55
MikamiUitOpen 0:ab7a35d87173 56 // AD 変換器の外部トリガに使うタイマ (TIM6) の設定
MikamiUitOpen 0:ab7a35d87173 57 void SetTim6(int frequency);
MikamiUitOpen 0:ab7a35d87173 58
MikamiUitOpen 0:ab7a35d87173 59 // for inhibition of copy constructor
MikamiUitOpen 0:ab7a35d87173 60 AdcDual(const AdcDual&);
MikamiUitOpen 0:ab7a35d87173 61 // for inhibition of substitute operator
MikamiUitOpen 0:ab7a35d87173 62 AdcDual& operator=(const AdcDual&);
MikamiUitOpen 0:ab7a35d87173 63 };
MikamiUitOpen 0:ab7a35d87173 64 }
MikamiUitOpen 0:ab7a35d87173 65 #endif // F746_ADC_DUAL_HPP
MikamiUitOpen 0:ab7a35d87173 66
MikamiUitOpen 0:ab7a35d87173 67 /*
MikamiUitOpen 0:ab7a35d87173 68 typedef struct
MikamiUitOpen 0:ab7a35d87173 69 {
MikamiUitOpen 0:ab7a35d87173 70 __IO uint32_t SR; //!< ADC status register, Address offset: 0x00 //
MikamiUitOpen 0:ab7a35d87173 71 __IO uint32_t CR1; //!< ADC control register 1, Address offset: 0x04 //
MikamiUitOpen 0:ab7a35d87173 72 __IO uint32_t CR2; //!< ADC control register 2, Address offset: 0x08 //
MikamiUitOpen 0:ab7a35d87173 73 __IO uint32_t SMPR1; //!< ADC sample time register 1, Address offset: 0x0C //
MikamiUitOpen 0:ab7a35d87173 74 __IO uint32_t SMPR2; //!< ADC sample time register 2, Address offset: 0x10 //
MikamiUitOpen 0:ab7a35d87173 75 __IO uint32_t JOFR1; //!< ADC injected channel data offset register 1, Address offset: 0x14 //
MikamiUitOpen 0:ab7a35d87173 76 __IO uint32_t JOFR2; //!< ADC injected channel data offset register 2, Address offset: 0x18 //
MikamiUitOpen 0:ab7a35d87173 77 __IO uint32_t JOFR3; //!< ADC injected channel data offset register 3, Address offset: 0x1C //
MikamiUitOpen 0:ab7a35d87173 78 __IO uint32_t JOFR4; //!< ADC injected channel data offset register 4, Address offset: 0x20 //
MikamiUitOpen 0:ab7a35d87173 79 __IO uint32_t HTR; //!< ADC watchdog higher threshold register, Address offset: 0x24 //
MikamiUitOpen 0:ab7a35d87173 80 __IO uint32_t LTR; //!< ADC watchdog lower threshold register, Address offset: 0x28 //
MikamiUitOpen 0:ab7a35d87173 81 __IO uint32_t SQR1; //!< ADC regular sequence register 1, Address offset: 0x2C //
MikamiUitOpen 0:ab7a35d87173 82 __IO uint32_t SQR2; //!< ADC regular sequence register 2, Address offset: 0x30 //
MikamiUitOpen 0:ab7a35d87173 83 __IO uint32_t SQR3; //!< ADC regular sequence register 3, Address offset: 0x34 //
MikamiUitOpen 0:ab7a35d87173 84 __IO uint32_t JSQR; //!< ADC injected sequence register, Address offset: 0x38 //
MikamiUitOpen 0:ab7a35d87173 85 __IO uint32_t JDR1; //!< ADC injected data register 1, Address offset: 0x3C //
MikamiUitOpen 0:ab7a35d87173 86 __IO uint32_t JDR2; //!< ADC injected data register 2, Address offset: 0x40 //
MikamiUitOpen 0:ab7a35d87173 87 __IO uint32_t JDR3; //!< ADC injected data register 3, Address offset: 0x44 //
MikamiUitOpen 0:ab7a35d87173 88 __IO uint32_t JDR4; //!< ADC injected data register 4, Address offset: 0x48 //
MikamiUitOpen 0:ab7a35d87173 89 __IO uint32_t DR; //!< ADC regular data register, Address offset: 0x4C //
MikamiUitOpen 0:ab7a35d87173 90 } ADC_TypeDef;
MikamiUitOpen 0:ab7a35d87173 91
MikamiUitOpen 0:ab7a35d87173 92 typedef struct
MikamiUitOpen 0:ab7a35d87173 93 {
MikamiUitOpen 0:ab7a35d87173 94 __IO uint32_t CSR; //!< ADC Common status register, Address offset: ADC1 base address + 0x300 //
MikamiUitOpen 0:ab7a35d87173 95 __IO uint32_t CCR; //!< ADC common control register, Address offset: ADC1 base address + 0x304 //
MikamiUitOpen 0:ab7a35d87173 96 __IO uint32_t CDR; //!< ADC common regular data register for dual
MikamiUitOpen 0:ab7a35d87173 97 AND triple modes, Address offset: ADC1 base address + 0x308 //
MikamiUitOpen 0:ab7a35d87173 98 } ADC_Common_TypeDef;
MikamiUitOpen 0:ab7a35d87173 99 */