STM32F446 の内蔵 ADC, DAC 用のライブラリ.このライブラリを登録した際のプログラム: Demo_DSP_ADDA. Library for build-in ADC and DAC in STM32F446.
Dependents: Demo_DSP_ADDA F446_DSP_FFT_Analyzer TrG_FFT_Analyzer DSP_MultirateLinearphase ... more
Diff: DSP_AdcIntr.hpp
- Revision:
- 0:85348d58f498
- Child:
- 1:d6121b7a8d51
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DSP_AdcIntr.hpp Thu May 21 10:42:04 2020 +0000 @@ -0,0 +1,52 @@ +//------------------------------------------------------------- +// STM32F446 内蔵 ADC を割込み方式で使うための派生クラス +// 基底クラス: DspAdc_Base +// +// 2020/05/21, Copyright (c) 2020 MIKAMI, Naoki +//------------------------------------------------------------- + +#include "DSP_AdcBase.hpp" + +#ifndef DSP_ADC_INTERRUPT_HPP +#define DSP_ADC_INTERRUPT_HPP + +namespace Mikami +{ + class DspAdc_Intr : public DspAdc_Base + { + public: + // コンストラクタ + // fSampling 標本化周波数 [kHz] + // pin 入力ピンの名前 + // adc AD 変換器: ADC1, ADC2, ADC3 のいずれか + DspAdc_Intr(float fSampling, PinName pin, ADC_TypeDef* const adc = ADC2) + : DspAdc_Base(fSampling, pin, adc) + { myAdc_->CR1 |= ADC_CR1_EOCIE; } // AD 変換終了割込みを許可 + + virtual ~DspAdc_Intr() {} + + // 割込みベクタの設定と AD 変換割込みを有効にする + void SetIntrVec(void (*Func)()) + { + fp_ = Func; // 引数として渡された処理を割り当てる + NVIC_SetVector(ADC_IRQn, (uint32_t)Isr); // "core_cm4.h" 参照 + NVIC_EnableIRQ(ADC_IRQn); // "core_cm4.h" 参照 + } + + // AD 変換された値を読み込む + // -1.0f <= AD変換された値 < 1.0f + virtual float Read() const { return AdcToFloat(); } + + private: + static void (*fp_)(); // 割込みサービス・ルーチンの中で実行される関数のポインタ + + // 割込みサービス・ルーチン,このクラスで使っている ADC の割込みであれば, + // NVIC_SetVector() の引数で割り当てられた処理を行う + static void Isr() + { if ((myAdc_->SR & ADC_SR_EOC_Msk) == ADC_SR_EOC) fp_(); } + }; + + // static メンバの実体 + void (*DspAdc_Intr::fp_)(); +} +#endif // DSP_ADC_INTERRUPT_HPP \ No newline at end of file