93 lines
3.1 KiB
C
93 lines
3.1 KiB
C
/**
|
|
* @file analogMeasurement.c
|
|
*
|
|
* @copyright Nehemis SARL reserves all rights even in the event of industrial
|
|
* property rights. We reserve all rights of disposal such as
|
|
* copying and passing on to third parties.
|
|
*
|
|
* @brief Source code for ADC data reading module.
|
|
*/
|
|
|
|
/******************************************************************************
|
|
* Include Header Files
|
|
******************************************************************************/
|
|
#include "analogMeasurement.h"
|
|
#include "hal_adc.h"
|
|
|
|
/******************************************************************************
|
|
* Macro Constant Declarations
|
|
******************************************************************************/
|
|
#define ADC_BUFFER_SIZE 9u
|
|
|
|
/******************************************************************************
|
|
* Module Global Variable Declarations
|
|
******************************************************************************/
|
|
static uint16 adcBuffer_u32[ADC_BUFFER_SIZE];
|
|
|
|
/******************************************************************************
|
|
* Private Function Declarations
|
|
******************************************************************************/
|
|
static void AnalogMeasurementInitBuffer(void);
|
|
|
|
/******************************************************************************
|
|
* Function Definitions
|
|
******************************************************************************/
|
|
void AnalogMeasurementInit(void)
|
|
{
|
|
uint32 error_u32 = NMS_ERR_DEFAULT;
|
|
|
|
AnalogMeasurementInitBuffer();
|
|
|
|
HalAdcCalibrate(MAP_HAL_ADC_1);
|
|
error_u32 = HalAdcStartDMA(MAP_HAL_ADC_1, (uint32 *)adcBuffer_u32, ADC_BUFFER_SIZE);
|
|
|
|
if (error_u32 != NMS_ERR_NONE)
|
|
{
|
|
/* Handle the error (DMA start failed) */
|
|
}
|
|
}
|
|
|
|
void AnalogMesaurementRun(void)
|
|
{
|
|
HalAdcStartDMA(MAP_HAL_ADC_1, (uint32 *)adcBuffer_u32, sizeof(adcBuffer_u32));
|
|
}
|
|
|
|
|
|
void AnalogMeasurementReadData(uint32 channel_u32, uint32 *adcValue_pu32)
|
|
{
|
|
|
|
if (adcValue_pu32 == NULL)
|
|
{
|
|
return; /* Prevent dereferencing NULL pointer */
|
|
}
|
|
__disable_irq();
|
|
switch (channel_u32)
|
|
{
|
|
case PS1_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[0]; break;
|
|
case PS2_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[1]; break;
|
|
case PS3_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[2]; break;
|
|
case PS4_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[3]; break;
|
|
|
|
case PMP_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[4]; break;
|
|
|
|
case FM1_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[5]; break;
|
|
case FM2_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[6]; break;
|
|
case FM3_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[7]; break;
|
|
case FM4_ADC_CHANNEL: *adcValue_pu32 = adcBuffer_u32[8]; break;
|
|
default: *adcValue_pu32 = 0uL; break;
|
|
}
|
|
__enable_irq();
|
|
}
|
|
|
|
/******************************************************************************
|
|
* Private Function Definitions
|
|
******************************************************************************/
|
|
/* @brief Initialize buffer with default values*/
|
|
static void AnalogMeasurementInitBuffer(void)
|
|
{
|
|
for (uint8 i_u8 = 0u; i_u8 < ADC_BUFFER_SIZE; i_u8++)
|
|
{
|
|
adcBuffer_u32[i_u8] = 0uL;
|
|
}
|
|
}
|