Init
This commit is contained in:
commit
0f8a2f6758
|
|
@ -0,0 +1,30 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 17.11.22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef ADC_NATION_H
|
||||||
|
#define ADC_NATION_H
|
||||||
|
|
||||||
|
#include "Adc.h"
|
||||||
|
#include "cmsis_os2.h"
|
||||||
|
#include "n32g45x.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
ADC_Module *ADCx;
|
||||||
|
uint8_t ADC_Channel;
|
||||||
|
bool isCalibration;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int32_t mux;
|
||||||
|
int32_t div;
|
||||||
|
int32_t offset;
|
||||||
|
} ratio;
|
||||||
|
} tAdcNation;
|
||||||
|
|
||||||
|
tAdcNation ADC_Initial(
|
||||||
|
ADC_Module *ADCx, uint8_t ADC_Channel, int32_t mux, int32_t div, int32_t offset, uint32_t timeout
|
||||||
|
);
|
||||||
|
|
||||||
|
tAdcIO vAdcGetIo(tAdcNation *env);
|
||||||
|
|
||||||
|
#endif //ADC_NATION_H
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 07.09.22.
|
||||||
|
//
|
||||||
|
#include <SystemDelayInterface.h>
|
||||||
|
#include "AdcNation.h"
|
||||||
|
|
||||||
|
tAdcNation ADC_Initial(
|
||||||
|
ADC_Module *ADCx, uint8_t ADC_Channel, int32_t mux, int32_t div, int32_t offset, uint32_t timeout
|
||||||
|
) {
|
||||||
|
|
||||||
|
uint32_t endMs = SystemGetMs() + timeout;
|
||||||
|
|
||||||
|
ADC_InitType ADC_InitStructure;
|
||||||
|
|
||||||
|
// ADC configuration ------------------------------------------------------
|
||||||
|
ADC_InitStructure.WorkMode = ADC_WORKMODE_INDEPENDENT;
|
||||||
|
ADC_InitStructure.MultiChEn = DISABLE;
|
||||||
|
ADC_InitStructure.ContinueConvEn = DISABLE;
|
||||||
|
ADC_InitStructure.ExtTrigSelect = ADC_EXT_TRIGCONV_NONE;
|
||||||
|
ADC_InitStructure.DatAlign = ADC_DAT_ALIGN_R;
|
||||||
|
ADC_InitStructure.ChsNumber = 1;
|
||||||
|
ADC_Init(ADCx, &ADC_InitStructure);
|
||||||
|
|
||||||
|
// Enable ADC
|
||||||
|
ADC_Enable(ADCx, ENABLE);
|
||||||
|
|
||||||
|
// Check ADC Ready
|
||||||
|
while (ADC_GetFlagStatusNew(ADCx, ADC_FLAG_RDY) == RESET);
|
||||||
|
|
||||||
|
// Start ADC calibration
|
||||||
|
ADC_StartCalibration(ADCx);
|
||||||
|
|
||||||
|
bool isCalibration = true;
|
||||||
|
// Check the end of ADC calibration
|
||||||
|
while (ADC_GetCalibrationStatus(ADCx)) {
|
||||||
|
if (SystemGetMs() > endMs) {
|
||||||
|
isCalibration = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tAdcNation adc = {
|
||||||
|
.ADCx = ADCx,
|
||||||
|
.ADC_Channel = ADC_Channel,
|
||||||
|
.isCalibration = isCalibration,
|
||||||
|
.ratio = {
|
||||||
|
.mux = mux,
|
||||||
|
.div = div,
|
||||||
|
.offset = offset
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return adc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t vAdcGet(tAdcNation *env, uint32_t timeout) {
|
||||||
|
uint32_t endMs = SystemGetMs() + timeout;
|
||||||
|
|
||||||
|
uint16_t data;
|
||||||
|
|
||||||
|
ADC_ConfigRegularChannel(env->ADCx, env->ADC_Channel, 1, ADC_SAMP_TIME_239CYCLES5);
|
||||||
|
|
||||||
|
// Start ADC Software Conversion
|
||||||
|
ADC_EnableSoftwareStartConv(env->ADCx, ENABLE);
|
||||||
|
|
||||||
|
while (ADC_GetFlagStatus(env->ADCx, ADC_FLAG_ENDC) == 0) {
|
||||||
|
if (SystemGetMs() > endMs) {
|
||||||
|
//todo error
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ADC_ClearFlag(env->ADCx, ADC_FLAG_ENDC);
|
||||||
|
ADC_ClearFlag(env->ADCx, ADC_FLAG_STR);
|
||||||
|
data = ADC_GetDat(env->ADCx);
|
||||||
|
|
||||||
|
data = (data * env->ratio.mux) / env->ratio.div + env->ratio.offset;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
tAdcIO vAdcGetIo(tAdcNation *env) {
|
||||||
|
tAdcIO io = {
|
||||||
|
.env = env,
|
||||||
|
.get = (AdcIOTransaction) vAdcGet,
|
||||||
|
};
|
||||||
|
return io;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"dep": [
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
|
||||||
|
"repo": "PeripheralDriver_NATION_N32G45X"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
|
||||||
|
"repo": "Adc"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cmake": {
|
||||||
|
"inc_dirs": [
|
||||||
|
"Inc"
|
||||||
|
],
|
||||||
|
"srcs": [
|
||||||
|
"Src/**.c"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue