/******************** (C) COPYRIGHT 2006 STMicroelectronics ******************** | |
* File Name : 75x_adc.c | |
* Author : MCD Application Team | |
* Date First Issued : 03/10/2006 | |
* Description : This file provides all the ADC software functions. | |
******************************************************************************** | |
* History: | |
* 07/17/2006 : V1.0 | |
* 03/10/2006 : V0.1 | |
******************************************************************************** | |
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS | |
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. | |
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, | |
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE | |
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING | |
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. | |
*******************************************************************************/ | |
/* Includes ------------------------------------------------------------------*/ | |
#include "75x_adc.h" | |
#include "75x_mrcc.h" | |
/* Private typedef -----------------------------------------------------------*/ | |
/* Private define ------------------------------------------------------------*/ | |
/* Private macro -------------------------------------------------------------*/ | |
/* Private variables ---------------------------------------------------------*/ | |
/* Mask for Power Down Mode */ | |
#define ADC_PowerDown_Enable 0x8000 | |
#define ADC_PowerDown_Disable 0x7FFF | |
/* Mask for Watchdog Thresholds Enable */ | |
#define ADC_AnalogWatchdog_Enable 0x8000 | |
#define ADC_AnalogWatchdog_Disable 0x7FFF | |
/* Mask for Injected conversion start */ | |
#define ADC_Injec_ConversionStart 0x8000 | |
/* DMA enable */ | |
#define ADC_DMA_ExtEnable_Mask 0x4000 | |
/* Injected start trigger enable */ | |
#define ADC_Injec_ExtTrigger_Enable 0x4000 | |
/* ADC Masks */ | |
#define ADC_DMAFirstEnabledChannel_Mask 0x000F | |
#define ADC_DataRegisterOffset 0x0050 | |
#define ADC_FirstChannel_Mask 0xFFF0 | |
#define ADC_ChannelNumber_Mask 0xFC3F | |
#define ADC_Threshold_Mask 0xFC00 | |
#define ADC_AnalogWatchdogChannel_Mask 0xC3FF | |
#define ADC_Prescalers_Mask 0x7F18 | |
#define ADC_SPEN_Mask 0x8000 | |
#define ADC_FallingEdge_Mask 0xEFFF | |
#define ADC_LowLevel_Mask 0x4000 | |
#define ADC_HighLevel_Mask 0xDFFF | |
#define ADC_Calibration_Mask 0x0002 | |
/* Private function prototypes -----------------------------------------------*/ | |
/* Private functions ---------------------------------------------------------*/ | |
/******************************************************************************* | |
* Function Name : ADC_DeInit | |
* Description : Deinitializes the ADC peripheral registers to their default | |
* reset values. | |
* Input : None. | |
* Output : None | |
* Return : None. | |
*******************************************************************************/ | |
void ADC_DeInit(void) | |
{ | |
/* Reset the ADC registers values*/ | |
MRCC_PeripheralSWResetConfig(MRCC_Peripheral_ADC,ENABLE); | |
MRCC_PeripheralSWResetConfig(MRCC_Peripheral_ADC,DISABLE); | |
} | |
/******************************************************************************* | |
* Function Name : ADC_Init | |
* Description : Initializes the ADC peripheral according to the specified | |
* parameters in the ADC_InitStruct. | |
* Input : - ADC_InitStruct: pointer to an ADC_InitTypeDef structure that | |
contains the configuration information for the ADC peripheral. | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_Init(ADC_InitTypeDef* ADC_InitStruct) | |
{ | |
/* Configure the conversion mode */ | |
if(ADC_InitStruct->ADC_ConversionMode == ADC_ConversionMode_Scan) | |
{ | |
/* Set the scan conversion mode */ | |
ADC->CLR2 |= ADC_ConversionMode_Scan; | |
} | |
else | |
{ | |
/* Set the one-shot conversion mode */ | |
ADC->CLR2 &= ADC_ConversionMode_OneShot; | |
} | |
/* Configure the external start conversion trigger */ | |
switch(ADC_InitStruct->ADC_ExtTrigger) | |
{ | |
case ADC_ExtTrigger_HighLevel: | |
/* Start conversion on High level of the external trigger (TIM0) */ | |
ADC->CLR0 &= ADC_HighLevel_Mask; | |
ADC->CLR0 |= ADC_ExtTrigger_HighLevel; | |
break; | |
case ADC_ExtTrigger_LowLevel: | |
/* Start conversion on low level of the external trigger (TIM0) */ | |
ADC->CLR0 &= ADC_ExtTrigger_LowLevel; | |
ADC->CLR0 |= ADC_LowLevel_Mask; | |
break; | |
case ADC_ExtTrigger_RisingEdge: | |
/* Start conversion on rising edge of the external trigger (TIM0) */ | |
ADC->CLR0 |= ADC_ExtTrigger_RisingEdge; | |
break; | |
case ADC_ExtTrigger_FallingEdge: | |
/* Start conversion on falling edge of the external trigger (TIM0) */ | |
ADC->CLR0 &= ADC_FallingEdge_Mask; | |
ADC->CLR0 |= ADC_ExtTrigger_FallingEdge; | |
break; | |
case ADC_ExtTrigger_Disable: | |
/* Disable the external trigger and start the conversion by software */ | |
ADC->CLR0 &= ADC_ExtTrigger_Disable; | |
break; | |
default: | |
break; | |
} | |
/* Configure the auto clock off feature */ | |
if (ADC_InitStruct->ADC_AutoClockOff == ADC_AutoClockOff_Enable) | |
{ | |
/* Enable the auto clock off feature */ | |
ADC->CLR4 |= ADC_AutoClockOff_Enable; | |
} | |
else | |
{ | |
/* Disable the auto clock off feature */ | |
ADC->CLR4 &= ADC_AutoClockOff_Disable; | |
} | |
/* Clear conversion prescaler CNVP[2:0], sampling prescaler SMPP[2:0] bits | |
and Sample prescaler enable SPEN bit */ | |
ADC->CLR1 &= ADC_Prescalers_Mask; | |
/* Set conversion prescaler value (sampling and conversion prescalers are equal | |
while SPEN bit is reset */ | |
ADC->CLR1 |= (ADC_InitStruct->ADC_ConversionPrescaler<<5); | |
/* In case ADC_SamplingPrescaler member is different from the conversion one */ | |
if(ADC_InitStruct->ADC_SamplingPrescaler != ADC_InitStruct->ADC_ConversionPrescaler) | |
{ | |
/* Set the sampling prescaler value */ | |
ADC->CLR1 |= ADC_InitStruct->ADC_SamplingPrescaler; | |
/* Set SPEN bit (sampling and conversion prescalers are different */ | |
ADC->CLR1 = (ADC->CLR1 | ADC_SPEN_Mask); | |
} | |
/* Clear first channel to be converted FCH[3:0] bits */ | |
ADC->CLR2 &= ADC_FirstChannel_Mask; | |
/* Set the first channel to be converted */ | |
ADC->CLR2 |= ADC_InitStruct->ADC_FirstChannel; | |
/* Clear number of channels to be converted NCH[3:0] bits */ | |
ADC->CLR2 &= ADC_ChannelNumber_Mask; | |
/* Set the number of channels to be converted */ | |
ADC->CLR2 |= ((ADC_InitStruct->ADC_ChannelNumber)-1<<6); | |
} | |
/******************************************************************************* | |
* Function Name : ADC_StructInit | |
* Description : Fills each ADC_InitStruct member with its default value. | |
* Input : - ADC_InitStruct: pointer to an ADC_InitTypeDef structure | |
which will be initialized. | |
* Output : None | |
* Return : None. | |
*******************************************************************************/ | |
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct) | |
{ | |
/* Initialize the ADC_ConversionMode member */ | |
ADC_InitStruct->ADC_ConversionMode = ADC_ConversionMode_OneShot; | |
/* Initialize the ADC_ExtTrigger member */ | |
ADC_InitStruct->ADC_ExtTrigger = ADC_ExtTrigger_Disable; | |
/* Initialize the ADC_AutoClockOff member */ | |
ADC_InitStruct->ADC_AutoClockOff = ADC_AutoClockOff_Disable; | |
/* Initialize the ADC_SamplingPrescaler member */ | |
ADC_InitStruct->ADC_SamplingPrescaler = 0; | |
/* Initialize the ADC_ConversionPrescaler member */ | |
ADC_InitStruct->ADC_ConversionPrescaler = 0; | |
/* Initialize the ADC_FirstChannel member */ | |
ADC_InitStruct->ADC_FirstChannel = ADC_CHANNEL0; | |
/* Initialize the ADC_ChannelNumber member */ | |
ADC_InitStruct->ADC_ChannelNumber = 1; | |
} | |
/******************************************************************************* | |
* Function Name : ADC_StartCalibration | |
* Description : Starts the ADC Calibration. Calibration average enabled/disabled. | |
* Input : - ADC_CalibAverage: Enables or disables ADC calibration average. | |
* This parameter can be one of the following values: | |
* - ADC_CalibAverage_Enable: enable calibration average | |
* - ADC_CalibAverage_Disable: disable calibration average | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_StartCalibration(u16 ADC_CalibAverage) | |
{ | |
if (ADC_CalibAverage == ADC_CalibAverage_Enable) | |
{ | |
/* Enable ADC Calibration Average */ | |
ADC->CLR4 &= ADC_CalibAverage_Enable; | |
} | |
else | |
{ | |
/* Disable ADC Calibration Average */ | |
ADC->CLR4 |= ADC_CalibAverage_Disable; | |
} | |
/* Start Calibration */ | |
ADC->CLR0 |= ADC_Calibration_ON; | |
} | |
/******************************************************************************* | |
* Function Name : ADC_GetCalibrationStatus | |
* Description : Get the ADC Calibration Status. | |
* Input : None | |
* Output : None | |
* Return : The NewState of the ADC calibration (SET or RESET). | |
*******************************************************************************/ | |
FlagStatus ADC_GetCalibrationStatus(void) | |
{ | |
/* Check the status of the ADC calibration */ | |
if((ADC->CLR0 & ADC_Calibration_Mask) != RESET) | |
{ | |
/* Return SET if ADC Calibration is on going */ | |
return SET; | |
} | |
else | |
{ | |
/* Return RESET if ADC Calibration is finished */ | |
return RESET; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_ConversionCmd | |
* Description : Starts or stops the ADC conversion. | |
* Input : - ADC_Conversion: specifies the ADC command to apply. | |
* This parameter can be one of the following values: | |
* - ADC_Conversion_Start: start conversion | |
* - ADC_Conversion_Stop: stop conversion | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_ConversionCmd (u16 ADC_Conversion) | |
{ | |
if (ADC_Conversion == ADC_Conversion_Start) | |
{ | |
/* Start the ADC Conversion */ | |
ADC->CLR0 |= ADC_Conversion_Start; | |
} | |
else | |
{ | |
/* Stop the ADC Conversion */ | |
ADC->CLR0 &= ADC_Conversion_Stop; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_GetSTARTBitStatus | |
* Description : Gets the ADC START/STOP bit Status. | |
* Input : None | |
* Output : None | |
* Return : The NewState of the ADC START/STOP bit (SET or RESET). | |
*******************************************************************************/ | |
FlagStatus ADC_GetSTARTBitStatus(void) | |
{ | |
/* Check the status of the ADC START/STOP bit */ | |
if((ADC->CLR0 & ADC_Conversion_Start) != RESET) | |
{ | |
/* Return SET if ADC Conversion is started */ | |
return SET; | |
} | |
else | |
{ | |
/* Return RESET if ADC Conversion is stopped */ | |
return RESET; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_Cmd | |
* Description : Enables the ADC peripheral or puts it in power down mode. | |
* - NewState: new state of the ADC peripheral. | |
* This parameter can be: ENABLE or DISABLE. | |
* Output : None | |
* Return : None. | |
*******************************************************************************/ | |
void ADC_Cmd(FunctionalState NewState) | |
{ | |
if (NewState == DISABLE) | |
{ | |
/* Enable ADC Power Down Mode */ | |
ADC->CLR4 |= ADC_PowerDown_Enable; | |
} | |
else | |
{ | |
/* Disable ADC Power Down Mode */ | |
ADC->CLR4 &= ADC_PowerDown_Disable; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_AutoClockOffConfig | |
* Description : Enables or disables the Auto clock off feature. | |
* - NewState: new state of the Auto clock off feature. This | |
* parameter can be: ENABLE or DISABLE. | |
* Output : None | |
* Return : None. | |
*******************************************************************************/ | |
void ADC_AutoClockOffConfig(FunctionalState NewState) | |
{ | |
if (NewState == ENABLE) | |
{ | |
/* Enable ADC Auto Clock Off */ | |
ADC->CLR4 |= ADC_AutoClockOff_Enable; | |
} | |
else | |
{ | |
/* Disable ADC Auto Clock Off */ | |
ADC->CLR4 &= ADC_AutoClockOff_Disable; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_AnalogWatchdogConfig | |
* Description : Configures the analog input channel to be used for the selected | |
* Analog Watchdog and defines its corresponding High and Low | |
* threshold values. | |
* Input : - ADC_AnalogWatchdog: specifies the analog watchdog which will | |
* be affected to the desired converted channel. This parameter | |
* can be one of the following values: | |
* - ADC_AnalogWatchdog0: select analog watchdog 0 | |
* - ADC_AnalogWatchdog1: select analog watchdog 1 | |
* - ADC_AnalogWatchdog2: select analog watchdog 2 | |
* - ADC_AnalogWatchdog3: select analog watchdog 3 | |
* - ADC_CHANNEL: specifies the channel linked to the selected | |
* analog watchdog. This parameter can be ADC_CHANNELx where x | |
* can be (0..15) | |
* - LowThreshold: Low Threshold for the selected Analog watchdog | |
* - HighThreshold: High Threshold for the selected Analog watchdog | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_AnalogWatchdogConfig(u16 ADC_AnalogWatchdog, u8 ADC_CHANNEL, | |
u16 LowThreshold, u16 HighThreshold) | |
{ | |
switch (ADC_AnalogWatchdog) | |
{ | |
/* Set the selected channel and their corresponding High and Low thresholds */ | |
case ADC_AnalogWatchdog0 : | |
ADC->TRA0 = (ADC->TRA0 & ADC_AnalogWatchdogChannel_Mask) | ((u16) ADC_CHANNEL<<10); | |
ADC->TRA0 = (ADC->TRA0 & ADC_Threshold_Mask) | HighThreshold; | |
ADC->TRB0 = (ADC->TRB0 & ADC_Threshold_Mask) | LowThreshold; | |
break; | |
case ADC_AnalogWatchdog1 : | |
ADC->TRA1 = (ADC->TRA1 & ADC_AnalogWatchdogChannel_Mask) | ((u16) ADC_CHANNEL<<10); | |
ADC->TRA1 = (ADC->TRA1 & ADC_Threshold_Mask) | HighThreshold; | |
ADC->TRB1 = (ADC->TRB1 & ADC_Threshold_Mask) | LowThreshold; | |
break; | |
case ADC_AnalogWatchdog2 : | |
ADC->TRA2 = (ADC->TRA2 & ADC_AnalogWatchdogChannel_Mask) | ((u16) ADC_CHANNEL<<10); | |
ADC->TRA2 = (ADC->TRA2 & ADC_Threshold_Mask) | HighThreshold; | |
ADC->TRB2 = (ADC->TRB2 & ADC_Threshold_Mask) | LowThreshold; | |
break; | |
case ADC_AnalogWatchdog3 : | |
ADC->TRA3 = (ADC->TRA3 & ADC_AnalogWatchdogChannel_Mask) | ((u16) ADC_CHANNEL<<10); | |
ADC->TRA3 = (ADC->TRA3 & ADC_Threshold_Mask) | HighThreshold; | |
ADC->TRB3 = (ADC->TRB3 & ADC_Threshold_Mask) | LowThreshold; | |
break; | |
default: | |
break; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_AnalogWatchdogCmd | |
* Description : Enables or disables the selected analog Watchdog. | |
* Input : - ADC_AnalogWatchdog: specifies the analog watchdog to be | |
* enabled or disabled. This parameter can be one of the | |
* following values: | |
* - ADC_AnalogWatchdog0: select analog watchdog 0 | |
* - ADC_AnalogWatchdog1: select analog watchdog 1 | |
* - ADC_AnalogWatchdog2: select analog watchdog 2 | |
* - ADC_AnalogWatchdog3: select analog watchdog 3 | |
* - NewState: new state of the specified analog watchdog. | |
* This parameter can be: ENABLE or DISABLE. | |
* Output : None | |
* Return : None. | |
*******************************************************************************/ | |
void ADC_AnalogWatchdogCmd(u16 ADC_AnalogWatchdog, FunctionalState NewState) | |
{ | |
if (NewState == ENABLE) | |
{ | |
/* Enable the selected ADC AnalogWatchdogx */ | |
switch (ADC_AnalogWatchdog) | |
{ | |
case ADC_AnalogWatchdog0 : | |
ADC->TRB0 |= ADC_AnalogWatchdog_Enable; | |
break; | |
case ADC_AnalogWatchdog1 : | |
ADC->TRB1 |= ADC_AnalogWatchdog_Enable; | |
break; | |
case ADC_AnalogWatchdog2 : | |
ADC->TRB2 |= ADC_AnalogWatchdog_Enable; | |
break; | |
case ADC_AnalogWatchdog3 : | |
ADC->TRB3 |= ADC_AnalogWatchdog_Enable; | |
break; | |
default: | |
break; | |
} | |
} | |
else | |
{ | |
/* Disable the selected ADC AnalogWatchdogx */ | |
switch (ADC_AnalogWatchdog) | |
{ | |
case ADC_AnalogWatchdog0 : | |
ADC->TRB0 &= ADC_AnalogWatchdog_Disable; | |
break; | |
case ADC_AnalogWatchdog1 : | |
ADC->TRB1 &= ADC_AnalogWatchdog_Disable; | |
break; | |
case ADC_AnalogWatchdog2 : | |
ADC->TRB2 &= ADC_AnalogWatchdog_Disable; | |
break; | |
case ADC_AnalogWatchdog3 : | |
ADC->TRB3 &= ADC_AnalogWatchdog_Disable; | |
break; | |
default: | |
break; | |
} | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_GetAnalogWatchdogResult | |
* Description : Returns the comparison result of the selected analog watchdog. | |
* Input : - ADC_AnalogWatchdog: specifies the analog watchdog channel | |
* which its comparison result will be returned. This parameter | |
* can be one of the following values: | |
* - ADC_AnalogWatchdog0: select analog watchdog 0 | |
* - ADC_AnalogWatchdog1: select analog watchdog 1 | |
* - ADC_AnalogWatchdog2: select analog watchdog 2 | |
* - ADC_AnalogWatchdog3: select analog watchdog 3 | |
* Output : None | |
* Return : The analog watchdog comparaison result value | |
*******************************************************************************/ | |
u16 ADC_GetAnalogWatchdogResult(u16 ADC_AnalogWatchdog) | |
{ | |
/* Return the selected ADC AnalogWatchdogx comparaison result */ | |
switch(ADC_AnalogWatchdog) | |
{ | |
case ADC_AnalogWatchdog0 : | |
return ((ADC->PBR & ADC_AnalogWatchdog)>>4); | |
case ADC_AnalogWatchdog1 : | |
return ((ADC->PBR & ADC_AnalogWatchdog)>>6); | |
case ADC_AnalogWatchdog2 : | |
return ((ADC->PBR & ADC_AnalogWatchdog)>>8); | |
case ADC_AnalogWatchdog3 : | |
return ((ADC->PBR & ADC_AnalogWatchdog)>>10); | |
default : return (0xFF); /* if a wrong value of ADC_AnalogWatchdog is selected */ | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_InjectedConversionConfig | |
* Description : Configures the start trigger level for the injected channels | |
* and the injected analog input channels to be converted. | |
* Input : - ADC_Injec_ExtTrigger: specifies the start trigger level. | |
* This parameter can be one of the following values: | |
* - ADC_Injec_ExtTrigger_Disable : external trigger disabled | |
* - ADC_Injec_ExtTrigger_RisingEdge: external trigger | |
* configured as rising edge of PWM Timer TRGO signal | |
* - ADC_Injec_ExtTrigger_FallingEdge: external trigger | |
* configured as falling edge of PWM Timer TRGO signal | |
* - FirstChannel: specifies the first injected channel to be | |
* converted. | |
* This parameter can be ADC_CHANNELx where x can be (0..15). | |
* - ChannelNumber: specifies the Number of the injected channels | |
* to be converted. This parameter can be a value from 1 to 16. | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_InjectedConversionConfig(u16 ADC_Injec_ExtTrigger, u8 FirstChannel, u8 ChannelNumber) | |
{ | |
/* Configure the external start injected conversion trigger */ | |
switch (ADC_Injec_ExtTrigger) | |
{ | |
case ADC_Injec_ExtTrigger_Disable : | |
/* Disable the external trigger and start the injected conversion by software */ | |
ADC->CLR3 &= ADC_Injec_ExtTrigger_Disable ; | |
break; | |
case ADC_Injec_ExtTrigger_RisingEdge : | |
/* Start injected conversion on rising edge of the external trigger (PWM) */ | |
ADC->CLR3 |= ADC_Injec_ExtTrigger_RisingEdge; | |
break; | |
case ADC_Injec_ExtTrigger_FallingEdge : | |
/* Start injected conversion on falling edge of the external trigger (PWM) */ | |
ADC->CLR3 |= ADC_Injec_ExtTrigger_Enable; | |
ADC->CLR3 &= ADC_Injec_ExtTrigger_FallingEdge; | |
break; | |
default: | |
break; | |
} | |
/* Clear first injected channel to be converted JFCH[3:0] bits */ | |
ADC->CLR3 &= ADC_FirstChannel_Mask; | |
/* Set the first injected channel to be converted */ | |
ADC->CLR3 |= FirstChannel; | |
/* Clear number of injected channels to be converted JNCH[3:0] bits */ | |
ADC->CLR3 &= ADC_ChannelNumber_Mask; | |
/* Set the number of injected channels to be converted */ | |
ADC->CLR3 |= ((ChannelNumber-1)<<6); | |
} | |
/******************************************************************************* | |
* Function Name : ADC_StartInjectedConversion | |
* Description : Starts by software the conversion of the injected input channels. | |
* Input : None | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_StartInjectedConversion(void) | |
{ | |
/* Start the injected ADC Conversion */ | |
ADC->CLR3 |= ADC_Injec_ConversionStart; | |
} | |
/******************************************************************************* | |
* Function Name : ADC_GetConversionValue | |
* Description : Reads the conversion result from the appropriate data register. | |
* Input : - ADC_CHANNEL :specifies the ADC channel which its conversion | |
* value have to be returned. This parameter can be ADC_CHANNELx | |
* where x can be (0..15) to select channelx | |
* Output : None | |
* Return : The returned value holds the conversion result of the selected | |
* channel. | |
*******************************************************************************/ | |
u16 ADC_GetConversionValue(u8 ADC_CHANNEL) | |
{ | |
/* Return the conversion result of the selected channel */ | |
return *((u16 *)(ADC_BASE + ((ADC_CHANNEL<<2) + ADC_DataRegisterOffset))); | |
} | |
/******************************************************************************* | |
* Function Name : ADC_ITConfig | |
* Description : Enables or disables the specified ADC interrupts. | |
* Input : - ADC_IT: specifies the ADC interrupts to be enabled or disabled. | |
* This parameter can be any combination of the following values: | |
* - ADC_IT_ECH: End of chain conversion interrupt | |
* - ADC_IT_EOC: End of channel conversion interrupt | |
* - ADC_IT_JECH: Injected end of chain conversion interrupt | |
* - ADC_IT_JEOC: Injected end of channel conversion interrupt | |
* - ADC_IT_AnalogWatchdog0_LowThreshold: | |
* Analog Watchdog 0 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog0_HighThreshold: | |
* Analog Watchdog 0 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog1_LowThreshold: | |
* Analog Watchdog 1 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog1_HighThreshold: | |
* Analog Watchdog 1 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog2_LowThreshold: | |
* Analog Watchdog 2 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog2_HighThreshold: | |
* Analog Watchdog 2 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog3_LowThreshold: | |
* Analog Watchdog 3 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog3_HighThreshold: | |
* Analog Watchdog 5 HighThreshold interrupt | |
* - ADC_IT_ALL: All interrupts | |
* - NewState: new state of the specified ADC interrupts. | |
* This parameter can be: ENABLE or DISABLE. | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_ITConfig(u16 ADC_IT, FunctionalState NewState) | |
{ | |
if (NewState == ENABLE) | |
{ | |
/* Enable the selected ADC interrupts */ | |
ADC->IMR |= ADC_IT; | |
} | |
else | |
{ | |
/* Disable the selected ADC interrupts */ | |
ADC->IMR &= ~ADC_IT; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_DMAConfig | |
* Description : Configures the ADCs DMA interface. | |
* Input : - ADC_DMA_CHANNEL: specifies the channels to be enabled or | |
* disabled for DMA transfer. This parameter can be any | |
* combination of ADC_DMA_CHANNELx where x can be (0..15). | |
* - NewState: new state of the specified ADC DMA channels. | |
* This parameter can be: ENABLE or DISABLE. | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_DMAConfig(u16 ADC_DMA_CHANNEL, FunctionalState NewState) | |
{ | |
if(NewState == ENABLE) | |
{ | |
/* Enable DMA for the selected channels */ | |
ADC->DMAR |= ADC_DMA_CHANNEL ; | |
} | |
else | |
{ | |
/* Disable DMA for the selected channels */ | |
ADC->DMAR &= ~ADC_DMA_CHANNEL; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_DMACmd | |
* Description : Enable or disable the DMA transfer for the ADC. | |
* Input : - ADC_DMA: specifies the DMA command. This parameter can be | |
* one of the following values: | |
* - ADC_DMA_Disable: disable the DMA capability | |
* - ADC_DMA_Enable: enabled by setting the global | |
* enable bit | |
* - ADC_DMA_ExtTrigger_HighLevel: enabled by detection of | |
* high level of TIM2 OC2 signal | |
* - ADC_DMA_ExtTrigger_LowLevel: enabled by detection of | |
* low level of TIM2 OC2 signal | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_DMACmd(u16 ADC_DMA) | |
{ | |
/* Configure the DMA external trigger enable */ | |
switch (ADC_DMA) | |
{ | |
case ADC_DMA_Disable : | |
/* Disable DMA transfer */ | |
ADC->DMAE &= ADC_DMA_Disable; | |
break; | |
case ADC_DMA_Enable : | |
/* Enable DMA transfer */ | |
ADC->DMAE |= ADC_DMA_Enable; | |
break; | |
case ADC_DMA_ExtTrigger_HighLevel : | |
/* Enable DMA transfer on high level of the external trigger (TIM2) */ | |
ADC->DMAE &= ADC_DMA_Disable; | |
ADC->DMAE |= ADC_DMA_ExtTrigger_HighLevel; | |
break; | |
case ADC_DMA_ExtTrigger_LowLevel : | |
/* Enable DMA transfer on low level of the external trigger (TIM2) */ | |
ADC->DMAE |= ADC_DMA_ExtEnable_Mask; | |
ADC->DMAE &= ADC_DMA_ExtTrigger_LowLevel; | |
break; | |
default: | |
break; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_GetDMAFirstEnabledChannel | |
* Description : Gets the first DMA-enabled channel configured at the time that | |
* DMA was last globally enabled. | |
* Input : None | |
* Output : None | |
* Return : The first DMA enabled channel | |
*******************************************************************************/ | |
u16 ADC_GetDMAFirstEnabledChannel(void) | |
{ | |
/* Return the DMA first enabled channel */ | |
return (ADC->DMAE & ADC_DMAFirstEnabledChannel_Mask); | |
} | |
/******************************************************************************* | |
* Function Name : ADC_GetFlagStatus | |
* Description : Checks whether the specified ADC flag is set or not. | |
* Input : - ADC_FLAG: specifies the ADC flag to check. This parameter | |
* can be one of the following values: | |
* - ADC_FLAG_ECH: End of chain conversion Flag | |
* - ADC_FLAG_EOC: End of channel conversion Flag | |
* - ADC_FLAG_JECH: End of injected chain conversion Flag | |
* - ADC_FLAG_JEOC: End of injected channel conversion Flag | |
* - ADC_FLAG_AnalogWatchdog0_LowThreshold: | |
* Analog Watchdog 0 LowThreshold Flag | |
* - ADC_FLAG_AnalogWatchdog0_HighThreshold: | |
* Analog Watchdog 0 HighThreshold Flag | |
* - ADC_FLAG_AnalogWatchdog1_LowThreshold: | |
* Analog Watchdog 1 LowThreshold Flag | |
* - ADC_FLAG_AnalogWatchdog1_HighThreshold: | |
* Analog Watchdog 1 HighThreshold Flag | |
* - ADC_FLAG_AnalogWatchdog2_LowThreshold: | |
* Analog Watchdog 2 LowThreshold Flag | |
* - ADC_FLAG_AnalogWatchdog2_HighThreshold: | |
* Analog Watchdog 2 HighThreshold Flag | |
* - ADC_FLAG_AnalogWatchdog3_LowThreshold: | |
* Analog Watchdog 3 LowThreshold Flag | |
* - ADC_FLAG_AnalogWatchdog3_HighThreshold: | |
* Analog Watchdog 3 HighThreshold Flag | |
* Output : None | |
* Return : The new state of the ADC_FLAG (SET or RESET). | |
*******************************************************************************/ | |
FlagStatus ADC_GetFlagStatus(u16 ADC_FLAG) | |
{ | |
/* Check the status of the specified ADC flag */ | |
if((ADC->PBR & ADC_FLAG) != RESET) | |
{ | |
/* Return SET if ADC_FLAG is set */ | |
return SET; | |
} | |
else | |
{ | |
/* Return RESET if ADC_FLAG is reset */ | |
return RESET; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_ClearFlag | |
* Description : Clears the ADCs pending flags. | |
* Input : - ADC_FLAG: specifies the flag to clear. This parameter can | |
* be any combination of the following values: | |
* - ADC_FLAG_ECH: End of chain conversion flag | |
* - ADC_FLAG_EOC: End of channel conversion flag | |
* - ADC_FLAG_JECH: Injected end of chain conversion flag | |
* - ADC_FLAG_JEOC: Injected end of channel conversion flag | |
* - ADC_FLAG_AnalogWatchdog0_LowThreshold: | |
* Analog Watchdog 0 LowThreshold flag | |
* - ADC_FLAG_AnalogWatchdog0_HighThreshold: | |
* Analog Watchdog 0 HighThreshold flag | |
* - ADC_FLAG_AnalogWatchdog1_LowThreshold: | |
* Analog Watchdog 1 LowThreshold flag | |
* - ADC_FLAG_AnalogWatchdog1_HighThreshold: | |
* Analog Watchdog 1 HighThreshold flag | |
* - ADC_FLAG_AnalogWatchdog2_LowThreshold: | |
* Analog Watchdog 2 LowThreshold flag | |
* - ADC_FLAG_AnalogWatchdog2_HighThreshold: | |
* Analog Watchdog 2 HighThreshold flag | |
* - ADC_FLAG_AnalogWatchdog3_LowThreshold: | |
* Analog Watchdog 3 LowThreshold flag | |
* - ADC_FLAG_AnalogWatchdog3_HighThreshold: | |
* Analog Watchdog 3 HighThreshold flag | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_ClearFlag(u16 ADC_FLAG) | |
{ | |
/* Clear the selected ADC flag */ | |
ADC->PBR = ADC_FLAG; | |
} | |
/******************************************************************************* | |
* Function Name : ADC_GetITStatus | |
* Description : Checks whether the specified ADC interrupt has occured or not. | |
* Input : - ADC_IT: specifies the ADC interrupt source to check. This | |
* parameter can be one of the following values: | |
* - ADC_IT_ECH :End of chain conversion interrupt | |
* - ADC_IT_EOC :End of channel conversion interrupt | |
* - ADC_IT_JECH :End of injected chain conversion interrupt | |
* - ADC_IT_JEOC :End of injected channel conversion interrupt | |
* - ADC_IT_AnalogWatchdog0_LowThreshold: | |
* Analog Watchdog 0 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog0_HighThreshold: | |
* Analog Watchdog 0 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog1_LowThreshold: | |
* Analog Watchdog 1 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog1_HighThreshold: | |
* Analog Watchdog 1 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog2_LowThreshold: | |
* Analog Watchdog 2 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog2_HighThreshold: | |
* Analog Watchdog 2 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog3_LowThreshold: | |
* Analog Watchdog 3 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog3_HighThreshold: | |
* Analog Watchdog 3 HighThreshold interrupt | |
* Output : None | |
* Return : The new state of the ADC_IT (SET or RESET). | |
*******************************************************************************/ | |
ITStatus ADC_GetITStatus(u16 ADC_IT) | |
{ | |
/* Check the status of the specified ADC interrupt */ | |
if((ADC->PBR & ADC_IT) != RESET) | |
{ | |
/* Return SET if the ADC interrupt flag is set */ | |
return SET; | |
} | |
else | |
{ | |
/* Return RESET if the ADC interrupt flag is reset */ | |
return RESET; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : ADC_ClearITPendingBit | |
* Description : Clears the ADCs interrupt pending bits. | |
* Input : - ADC_IT: specifies the interrupt pending bit to clear. This | |
* parameter can be can be any combination of the following | |
* values: | |
* - ADC_IT_ECH: End of chain conversion interrupt | |
* - ADC_IT_EOC: End of channel conversion interrupt | |
* - ADC_IT_JECH: Injected end of chain conversion interrupt | |
* - ADC_IT_JEOC: Injected end of channel conversion interrupt | |
* - ADC_IT_AnalogWatchdog0_LowThreshold: | |
* Analog Watchdog 0 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog0_HighThreshold: | |
* Analog Watchdog 0 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog1_LowThreshold: | |
* Analog Watchdog 1 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog1_HighThreshold: | |
* Analog Watchdog 1 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog2_LowThreshold: | |
* Analog Watchdog 2 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog2_HighThreshold: | |
* Analog Watchdog 2 HighThreshold interrupt | |
* - ADC_IT_AnalogWatchdog3_LowThreshold: | |
* Analog Watchdog 3 LowThreshold interrupt | |
* - ADC_IT_AnalogWatchdog3_HighThreshold: | |
* Analog Watchdog 5 HighThreshold interrupt | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void ADC_ClearITPendingBit(u16 ADC_IT) | |
{ | |
/* Clear the selected ADC interrupts pending bits */ | |
ADC->PBR = ADC_IT; | |
} | |
/******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/ |