不韋 呂 / UITDSP_ADDA2

Dependents:   UITDSP_ADDA_Example2

Committer:
MikamiUitOpen
Date:
Sat Mar 14 06:49:49 2015 +0000
Revision:
0:46d099dfd9d6
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:46d099dfd9d6 1 //------------------------------------------------------
MikamiUitOpen 0:46d099dfd9d6 2 // Class for ADC using TIM2 trigger
MikamiUitOpen 0:46d099dfd9d6 3 // To get bit definition for register in
MikamiUitOpen 0:46d099dfd9d6 4 // peripheral, see "stm32f401xe.h"
MikamiUitOpen 0:46d099dfd9d6 5 //
MikamiUitOpen 0:46d099dfd9d6 6 // 2015/03/14, Copyright (c) 2014 MIKAMI, Naoki
MikamiUitOpen 0:46d099dfd9d6 7 //------------------------------------------------------
MikamiUitOpen 0:46d099dfd9d6 8
MikamiUitOpen 0:46d099dfd9d6 9 #include "ADC_BuiltIn.hpp"
MikamiUitOpen 0:46d099dfd9d6 10
MikamiUitOpen 0:46d099dfd9d6 11 namespace Mikami
MikamiUitOpen 0:46d099dfd9d6 12 {
MikamiUitOpen 0:46d099dfd9d6 13 ADC_BuiltIn::ADC_BuiltIn(PinName pin1, int frequency,
MikamiUitOpen 0:46d099dfd9d6 14 PinName pin2, PinName pin3)
MikamiUitOpen 0:46d099dfd9d6 15 : adc_(pin1), myAdc_(ADC1)
MikamiUitOpen 0:46d099dfd9d6 16 {
MikamiUitOpen 0:46d099dfd9d6 17 myAdc_->CR2 = ADC_EXTERNALTRIGCONVEDGE_RISING // External Trigger on the rising edge
MikamiUitOpen 0:46d099dfd9d6 18 | ADC_EXTERNALTRIGCONV_T2_TRGO // Use Timer2 TRGO event
MikamiUitOpen 0:46d099dfd9d6 19 | ADC_CR2_ADON; // Enable ADC
MikamiUitOpen 0:46d099dfd9d6 20
MikamiUitOpen 0:46d099dfd9d6 21 ch1_ = GetChannelNumber(pin1);
MikamiUitOpen 0:46d099dfd9d6 22 if (pin2 != NC)
MikamiUitOpen 0:46d099dfd9d6 23 {
MikamiUitOpen 0:46d099dfd9d6 24 adc2_ = new AnalogIn(pin2);
MikamiUitOpen 0:46d099dfd9d6 25 ch2_ = GetChannelNumber(pin2);
MikamiUitOpen 0:46d099dfd9d6 26 }
MikamiUitOpen 0:46d099dfd9d6 27 if (pin3 != NC)
MikamiUitOpen 0:46d099dfd9d6 28 {
MikamiUitOpen 0:46d099dfd9d6 29 adc3_ = new AnalogIn(pin3);
MikamiUitOpen 0:46d099dfd9d6 30 ch3_ = GetChannelNumber(pin3);
MikamiUitOpen 0:46d099dfd9d6 31 }
MikamiUitOpen 0:46d099dfd9d6 32 SetTim2(frequency);
MikamiUitOpen 0:46d099dfd9d6 33 Select1stChannel();
MikamiUitOpen 0:46d099dfd9d6 34 }
MikamiUitOpen 0:46d099dfd9d6 35
MikamiUitOpen 0:46d099dfd9d6 36 // Extract channel number
MikamiUitOpen 0:46d099dfd9d6 37 uint8_t ADC_BuiltIn::GetChannelNumber(PinName pin)
MikamiUitOpen 0:46d099dfd9d6 38 {
MikamiUitOpen 0:46d099dfd9d6 39 uint8_t ch = 0;
MikamiUitOpen 0:46d099dfd9d6 40 if ((pin & 0x30) == 0x00) ch = pin;
MikamiUitOpen 0:46d099dfd9d6 41 if ((pin & 0x30) == 0x10) ch = (pin & 0x01) + 8;
MikamiUitOpen 0:46d099dfd9d6 42 if ((pin & 0x30) == 0x20) ch = (pin & 0x07) + 10;
MikamiUitOpen 0:46d099dfd9d6 43 return ch;
MikamiUitOpen 0:46d099dfd9d6 44 }
MikamiUitOpen 0:46d099dfd9d6 45
MikamiUitOpen 0:46d099dfd9d6 46 void ADC_BuiltIn::SetTim2(int frequency)
MikamiUitOpen 0:46d099dfd9d6 47 {
MikamiUitOpen 0:46d099dfd9d6 48 __TIM2_CLK_ENABLE(); // Supply clock, See "stm32f4xx_hal_rcc.h"
MikamiUitOpen 0:46d099dfd9d6 49
MikamiUitOpen 0:46d099dfd9d6 50 SystemCoreClockUpdate(); // Update core clock (for F411RE)
MikamiUitOpen 0:46d099dfd9d6 51 // See system_stm32f4xx.h
MikamiUitOpen 0:46d099dfd9d6 52 TIM_TypeDef* myTim = TIM2;
MikamiUitOpen 0:46d099dfd9d6 53
MikamiUitOpen 0:46d099dfd9d6 54 myTim->CR2 = TIM_CR2_MMS_1; // Update event: as trigger out
MikamiUitOpen 0:46d099dfd9d6 55 myTim->ARR = SystemCoreClock/frequency - 1; // Auto-reload
MikamiUitOpen 0:46d099dfd9d6 56 myTim->PSC = 0; // Prescaler
MikamiUitOpen 0:46d099dfd9d6 57 myTim->CR1 = TIM_CR1_CEN; // Enable TIM2
MikamiUitOpen 0:46d099dfd9d6 58 }
MikamiUitOpen 0:46d099dfd9d6 59 }
MikamiUitOpen 0:46d099dfd9d6 60