CQ出版社セミナ,2021/12/07開催「実習・C++言語によるArmマイコンのプログラミング」で使うプログラム.

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Apr 02 01:12:34 2020 +0000
Revision:
5:5e55a5f440c0
Parent:
2:d28a3f741217
6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 2:d28a3f741217 1 //-------------------------------------------------------------
MikamiUitOpen 2:d28a3f741217 2 // F446 内蔵 ADC2 を割込み方式で使うための派生クラス(ヘッダ)
MikamiUitOpen 2:d28a3f741217 3 // 基底クラス: AdcF446_Base
MikamiUitOpen 2:d28a3f741217 4 //
MikamiUitOpen 2:d28a3f741217 5 // 2020/01/28, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 2:d28a3f741217 6 //-------------------------------------------------------------
MikamiUitOpen 2:d28a3f741217 7
MikamiUitOpen 2:d28a3f741217 8 #include "F446_AdcBase.hpp"
MikamiUitOpen 2:d28a3f741217 9
MikamiUitOpen 2:d28a3f741217 10 #ifndef ADC_F446_INTERRUPT_HPP
MikamiUitOpen 2:d28a3f741217 11 #define ADC_F446_INTERRUPT_HPP
MikamiUitOpen 2:d28a3f741217 12
MikamiUitOpen 2:d28a3f741217 13 namespace Mikami
MikamiUitOpen 2:d28a3f741217 14 {
MikamiUitOpen 2:d28a3f741217 15 class AdcF446_Intr : public AdcF446_Base
MikamiUitOpen 2:d28a3f741217 16 {
MikamiUitOpen 2:d28a3f741217 17 public:
MikamiUitOpen 2:d28a3f741217 18 // コンストラクタ
MikamiUitOpen 2:d28a3f741217 19 // fSampling 標本化周波数 [kHz]
MikamiUitOpen 2:d28a3f741217 20 // pin 入力ピンの名前
MikamiUitOpen 2:d28a3f741217 21 AdcF446_Intr(float fSampling, PinName pin)
MikamiUitOpen 2:d28a3f741217 22 : AdcF446_Base(fSampling, pin)
MikamiUitOpen 2:d28a3f741217 23 { myAdc_->CR1 |= ADC_CR1_EOCIE; } // AD 変換終了割り込みを許可
MikamiUitOpen 2:d28a3f741217 24
MikamiUitOpen 2:d28a3f741217 25 virtual ~AdcF446_Intr() {}
MikamiUitOpen 2:d28a3f741217 26
MikamiUitOpen 2:d28a3f741217 27 // 割込みベクタの設定と AD 変換割込みを有効にする
MikamiUitOpen 2:d28a3f741217 28 void SetIntrVec(void (*Func)())
MikamiUitOpen 2:d28a3f741217 29 {
MikamiUitOpen 2:d28a3f741217 30 fp = Func; // 引数として渡された処理を割り当てる
MikamiUitOpen 2:d28a3f741217 31 NVIC_SetVector(ADC_IRQn, (uint32_t)Isr); // "core_cm4.h" 参照
MikamiUitOpen 2:d28a3f741217 32 NVIC_EnableIRQ(ADC_IRQn); // "core_cm4.h" 参照
MikamiUitOpen 2:d28a3f741217 33 }
MikamiUitOpen 2:d28a3f741217 34
MikamiUitOpen 2:d28a3f741217 35 // AD 変換された値を読み込む
MikamiUitOpen 2:d28a3f741217 36 // -1.0f <= AD変換された値 < 1.0f
MikamiUitOpen 2:d28a3f741217 37 virtual float Read() const { return ToFloat(myAdc_->DR); }
MikamiUitOpen 2:d28a3f741217 38
MikamiUitOpen 2:d28a3f741217 39 private:
MikamiUitOpen 2:d28a3f741217 40 static void (*fp)(); // 割込みサービス・ルーチンの中で実行される関数のポインタ
MikamiUitOpen 2:d28a3f741217 41
MikamiUitOpen 2:d28a3f741217 42 // 割込みサービス・ルーチン,このクラスで使っている ADC であることを確認
MikamiUitOpen 2:d28a3f741217 43 static void Isr()
MikamiUitOpen 2:d28a3f741217 44 { if ((myAdc_->SR & ADC_SR_EOC_Msk) == ADC_SR_EOC) fp(); }
MikamiUitOpen 2:d28a3f741217 45 };
MikamiUitOpen 2:d28a3f741217 46
MikamiUitOpen 2:d28a3f741217 47 // static メンバの実体
MikamiUitOpen 2:d28a3f741217 48 void (*AdcF446_Intr::fp)();
MikamiUitOpen 2:d28a3f741217 49 }
MikamiUitOpen 2:d28a3f741217 50 #endif // ADC_F446_INTERRUPT_HPP