CQ出版社セミナ "実習・Armマイコン内蔵ペリフェラルを活用するためのC++プログラミング" で使う外付け回路のテスト
Dependencies: mbed UIT_SetOutputPortType UIT_AQM1602 UIT_ADT7410
F446_AdcIntr.hpp
00001 //------------------------------------------------------------- 00002 // F446 内蔵 ADC2 を割込み方式で使うための派生クラス 00003 // 基底クラス: AdcF446_Base 00004 // 00005 // 2020/02/23, Copyright (c) 2020 MIKAMI, Naoki 00006 //------------------------------------------------------------- 00007 00008 #include "F446_AdcBase.hpp" 00009 00010 #ifndef ADC_F446_INTERRUPT_HPP 00011 #define ADC_F446_INTERRUPT_HPP 00012 00013 namespace Mikami 00014 { 00015 class AdcF446_Intr : public AdcF446_Base 00016 { 00017 public: 00018 // コンストラクタ 00019 // fSampling 標本化周波数 [kHz] 00020 // pin 入力ピンの名前 00021 AdcF446_Intr(float fSampling, PinName pin) 00022 : AdcF446_Base(fSampling, pin) 00023 { myAdc_->CR1 |= ADC_CR1_EOCIE; } // AD 変換終了割り込みを許可 00024 00025 virtual ~AdcF446_Intr() {} 00026 00027 // 割込みベクタの設定と AD 変換割込みを有効にする 00028 void SetIntrVec(void (*Func)()) 00029 { 00030 fp_ = Func; // 引数として渡された処理を割り当てる 00031 NVIC_SetVector(ADC_IRQn, (uint32_t)Isr); // "core_cm4.h" 参照 00032 NVIC_EnableIRQ(ADC_IRQn); // "core_cm4.h" 参照 00033 } 00034 00035 // AD 変換された値を読み込む 00036 // -1.0f <= AD変換された値 < 1.0f 00037 virtual float Read() const { return ToFloat(myAdc_->DR); } 00038 00039 private: 00040 static void (*fp_)(); // 割込みサービス・ルーチンの中で実行される関数のポインタ 00041 00042 // 割込みサービス・ルーチン,このクラスで使っている ADC であることを確認 00043 static void Isr() 00044 { if ((myAdc_->SR & ADC_SR_EOC_Msk) == ADC_SR_EOC) fp_(); } 00045 }; 00046 00047 // static メンバの実体 00048 void (*AdcF446_Intr::fp_)(); 00049 } 00050 #endif // ADC_F446_INTERRUPT_HPP 00051
Generated on Tue Jul 12 2022 20:36:56 by 1.7.2