AM中波放送用SDR.CICフィルタのみを使用.CQ出版社「トランジスタ技術」誌,2021年4月号に掲載

Dependencies:   mbed

Committer:
MikamiUitOpen
Date:
Wed Dec 01 00:53:09 2021 +0000
Revision:
2:63fbcf115b88
Parent:
0:9c28f5905a1a
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:9c28f5905a1a 1 //-------------------------------------------------------------
MikamiUitOpen 0:9c28f5905a1a 2 // F446 内蔵 用抽象基底クラス
MikamiUitOpen 0:9c28f5905a1a 3 // ADC2 を使用(固定)
MikamiUitOpen 0:9c28f5905a1a 4 //
MikamiUitOpen 0:9c28f5905a1a 5 // 2020/07/24, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:9c28f5905a1a 6 //-------------------------------------------------------------
MikamiUitOpen 0:9c28f5905a1a 7
MikamiUitOpen 0:9c28f5905a1a 8 #include "F446_ADC_Base.hpp"
MikamiUitOpen 0:9c28f5905a1a 9 #include "PeripheralPins.h" // PinMap_ADC を使う場合に必要
MikamiUitOpen 0:9c28f5905a1a 10 #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため
MikamiUitOpen 0:9c28f5905a1a 11 // PeripheralPins.c は以下よりたどって行けば取得可能
MikamiUitOpen 0:9c28f5905a1a 12 // https://gitlab.exmachina.fr/fw-libs/mbed-os/tree/5.8.1
MikamiUitOpen 0:9c28f5905a1a 13
MikamiUitOpen 0:9c28f5905a1a 14 namespace Mikami
MikamiUitOpen 0:9c28f5905a1a 15 {
MikamiUitOpen 0:9c28f5905a1a 16 // コンストラクタ
MikamiUitOpen 0:9c28f5905a1a 17 AdcF446_Base::AdcF446_Base(float fSampling, PinName pin) : myAdc_(ADC2)
MikamiUitOpen 0:9c28f5905a1a 18 {
MikamiUitOpen 0:9c28f5905a1a 19 // pin に対応する GPIOx_MODER をアナログ・モードに設定する
MikamiUitOpen 0:9c28f5905a1a 20 pin_function(pin, STM_MODE_ANALOG);
MikamiUitOpen 0:9c28f5905a1a 21 // pin_function() が定義されている pinmap.c が含まれるディレクトリ:
MikamiUitOpen 0:9c28f5905a1a 22 // mbed-dev\targets\TARGET_STM
MikamiUitOpen 0:9c28f5905a1a 23
MikamiUitOpen 0:9c28f5905a1a 24 __HAL_RCC_ADC2_CLK_ENABLE(); // ADC2 にクロックを供給する
MikamiUitOpen 0:9c28f5905a1a 25 // __HAL_RCC_ADC2_CLK_ENABLE() の定義:stm32f4xx_hal_rcc_ex.h
MikamiUitOpen 0:9c28f5905a1a 26
MikamiUitOpen 0:9c28f5905a1a 27 // 1 チャンネルのみ使用の設定
MikamiUitOpen 0:9c28f5905a1a 28 myAdc_->SQR1 &= ~ADC_SQR1_L;
MikamiUitOpen 0:9c28f5905a1a 29
MikamiUitOpen 0:9c28f5905a1a 30 // pin に対応するチャンネルを使うための設定
MikamiUitOpen 0:9c28f5905a1a 31 myAdc_->SQR3 = STM_PIN_CHANNEL(pinmap_function(pin, PinMap_ADC));
MikamiUitOpen 0:9c28f5905a1a 32 // pinmap_function() のヘッダファイル: mbed\hal\pinmap.h
MikamiUitOpen 0:9c28f5905a1a 33 // STM_PIN_CHANNEL() の定義:PinNamesTypes.h
MikamiUitOpen 0:9c28f5905a1a 34
MikamiUitOpen 0:9c28f5905a1a 35 // ADC の CR1 の設定
MikamiUitOpen 0:9c28f5905a1a 36 myAdc_->CR1 = 0x0; // AD 変換終了割り込みを禁止
MikamiUitOpen 0:9c28f5905a1a 37 // ADC の CR2 の設定
MikamiUitOpen 0:9c28f5905a1a 38 myAdc_->CR2 = ADC_EXTERNALTRIGCONVEDGE_RISING // 外部トリガの立ち上がりで開始される
MikamiUitOpen 0:9c28f5905a1a 39 | ADC_EXTERNALTRIGCONV_T8_TRGO // 外部トリガ: Timer8 TRGO event
MikamiUitOpen 0:9c28f5905a1a 40 | ADC_CR2_ADON; // ADC を有効にする
MikamiUitOpen 0:9c28f5905a1a 41
MikamiUitOpen 0:9c28f5905a1a 42 // AD 変換器の外部トリガに使うタイマ (TIM8) の設定
MikamiUitOpen 0:9c28f5905a1a 43 SetTim8(fSampling);
MikamiUitOpen 0:9c28f5905a1a 44 }
MikamiUitOpen 0:9c28f5905a1a 45
MikamiUitOpen 0:9c28f5905a1a 46 // AD 変換器の外部トリガに使うタイマ (TIM8) の設定
MikamiUitOpen 0:9c28f5905a1a 47 // fSampling 標本化周波数 [kHz]
MikamiUitOpen 0:9c28f5905a1a 48 void AdcF446_Base::SetTim8(float fSampling)
MikamiUitOpen 0:9c28f5905a1a 49 {
MikamiUitOpen 0:9c28f5905a1a 50 __HAL_RCC_TIM8_CLK_ENABLE(); // クロック供給. "stm32f4xx_hal_rcc.h" 参照
MikamiUitOpen 0:9c28f5905a1a 51 TIM_TypeDef* const TIM = TIM8;
MikamiUitOpen 0:9c28f5905a1a 52
MikamiUitOpen 0:9c28f5905a1a 53 TIM->CR2 = TIM_TRGO_UPDATE; // Update event を TRGO (trigger output) とする
MikamiUitOpen 0:9c28f5905a1a 54
MikamiUitOpen 0:9c28f5905a1a 55 float arrF = (SystemCoreClock/fSampling)/1000.0f;
MikamiUitOpen 0:9c28f5905a1a 56 if (arrF >65535)
MikamiUitOpen 0:9c28f5905a1a 57 {
MikamiUitOpen 0:9c28f5905a1a 58 fprintf(stderr, "%8.2f kHz : 標本化周波数が低すぎます.\r\n", fSampling);
MikamiUitOpen 0:9c28f5905a1a 59 while (true) {}
MikamiUitOpen 0:9c28f5905a1a 60 }
MikamiUitOpen 0:9c28f5905a1a 61 TIM->ARR = floor(arrF + 0.5f) - 1; // Auto-reload レジスタの設定
MikamiUitOpen 0:9c28f5905a1a 62 TIM->PSC = 0; // Prescaler の設定
MikamiUitOpen 0:9c28f5905a1a 63 TIM->CR1 = TIM_CR1_CEN; // TIM8 を有効にする
MikamiUitOpen 0:9c28f5905a1a 64 }
MikamiUitOpen 0:9c28f5905a1a 65 }