不韋 呂 / UITDSP_ADDA

Dependents:   UITDSP_ADDA_Example UIT2_MovingAv_Intr UIT2_VariableFIR UIT2_VowelSynthesizer ... more

Committer:
MikamiUitOpen
Date:
Sat Jul 25 05:40:26 2015 +0000
Revision:
8:543daa087bd5
Parent:
7:14cdca8b48f8
6

Who changed what in which revision?

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