Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UITDSP_ADDA_Example2
ADC_BuiltIn.cpp@0:46d099dfd9d6, 2015-03-14 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sat Mar 14 06:49:49 2015 +0000
- Revision:
- 0:46d099dfd9d6
1
Who changed what in which revision?
| User | Revision | Line number | New 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 |