不韋 呂 / UIT_ADDA

Dependents:   UIT2_MovingAverage UIT2_AllpassReverb UIT2_CombReverb UIT2_FIR_LPF_Symmetry ... more

ADC_Base.cpp

Committer:
MikamiUitOpen
Date:
2014-11-12
Revision:
9:72fe42a4323c
Parent:
8:f933fcd30408
Child:
13:f2b8af192558

File content as of revision 9:72fe42a4323c:

//------------------------------------------------------
// Class for ADC using TIM2 trigger
//      To get bit definition for register in
//      peripheral, see "stm32f401xe.h"
//
// 2014/11/12, Copyright (c) 2014 MIKAMI, Naoki
//------------------------------------------------------

#include "ADC_Base.hpp"

namespace Mikami
{
    ADC_Base::ADC_Base(PinName pin1, int frequency,
                       PinName pin2, PinName pin3)
        : adc_(pin1), PIN1_(pin1), PIN2_(pin2),
          PIN3_(pin3), myAdc_(ADC1)
    {
        myAdc_->CR2 = ADC_EXTERNALTRIGCONVEDGE_RISING   // External Trigger on the rising edge
                    | ADC_EXTERNALTRIGCONV_T2_TRGO      // Use Timer2 TRGO event
                    | ADC_CR2_ADON;                     // Enable ADC

        if (pin2 != NC) adc2_ = new AnalogIn(pin2);
        if (pin3 != NC) adc3_ = new AnalogIn(pin3);
        SetTim2(frequency);
        Select1stChannel();
    }

    void ADC_Base::SetTim2(int frequency)
    {
        __TIM2_CLK_ENABLE();    // Supply clock, See "stm32f4xx_hal_rcc.h"
        
        SystemCoreClockUpdate();    // Update core clock (for F411RE)
                                    // See system_stm32f4xx.h

        TIM_TypeDef* myTim = TIM2;

        myTim->CR2 = TIM_CR2_MMS_1; // Update event: as trigger out
        myTim->ARR = SystemCoreClock/frequency - 1; // Auto-reload
        myTim->PSC = 0;             // Prescaler
        myTim->CR1 = TIM_CR1_CEN;   // Enable TIM2
    }
}