Fixed some initialisation issues
git-svn-id: https://svn.vbchaos.nl/svn/hsb/trunk@237 05563f52-14a8-4384-a975-3d1654cca0fa
This commit is contained in:
@@ -59,21 +59,30 @@ static ErrorStatus read(const struct IODevice* self, char* buffer, size_t length
|
||||
ErrorStatus ADC_construct(struct Adc* self, struct AdcParameters* parameters)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
if (!self->initialized)
|
||||
{
|
||||
|
||||
self->useDMA = false;
|
||||
self->useDMA = false;
|
||||
|
||||
self->ADC_InitStruct.ADC_Mode = parameters->ADC_Mode;
|
||||
self->ADC_InitStruct.ADC_ScanConvMode = parameters->ADC_ScanConvMode;
|
||||
self->ADC_InitStruct.ADC_ContinuousConvMode = parameters->ADC_ContinuousConvMode;
|
||||
self->ADC_InitStruct.ADC_ExternalTrigConv = parameters->ADC_ExternalTrigConv;
|
||||
self->ADC_InitStruct.ADC_DataAlign = parameters->ADC_DataAlign;
|
||||
self->ADC_InitStruct.ADC_NbrOfChannel = parameters->ADC_NbrOfChannel;
|
||||
self->ADC_InitStruct.ADC_Mode = parameters->ADC_Mode;
|
||||
self->ADC_InitStruct.ADC_ScanConvMode = parameters->ADC_ScanConvMode;
|
||||
self->ADC_InitStruct.ADC_ContinuousConvMode = parameters->ADC_ContinuousConvMode;
|
||||
self->ADC_InitStruct.ADC_ExternalTrigConv = parameters->ADC_ExternalTrigConv;
|
||||
self->ADC_InitStruct.ADC_DataAlign = parameters->ADC_DataAlign;
|
||||
self->ADC_InitStruct.ADC_NbrOfChannel = parameters->ADC_NbrOfChannel;
|
||||
|
||||
ADC_DeInit(self->ADCx);
|
||||
|
||||
ADC_Init(self->ADCx, &self->ADC_InitStruct);
|
||||
ADC_DeInit(self->ADCx);
|
||||
|
||||
ADC_Init(self->ADCx, &self->ADC_InitStruct);
|
||||
|
||||
int loopCounter;
|
||||
for (loopCounter = 0; loopCounter < ADC_NUMBER_OF_CHANNELS; loopCounter++)
|
||||
{
|
||||
self->channel[loopCounter].initialized = false;
|
||||
self->channelValue[loopCounter] = 0;
|
||||
}
|
||||
self->initialized = true;
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
@@ -90,6 +99,7 @@ void ADC_destruct (struct Adc* self)
|
||||
ADC_DeInit(self->ADCx);
|
||||
self->useDMA = false;
|
||||
self->useRanks = false;
|
||||
self->initialized = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -144,33 +154,47 @@ ErrorStatus ADCChannel_construct(struct AdcChannel* self, struct Adc* parent, st
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
IODevice_construct(&self->device, read, NULL);
|
||||
|
||||
if ((parameters->Rank) > 0 && (parameters->Rank <= 16))
|
||||
// Check that the parent has no channel already initialized on that ID
|
||||
if ((!parent->channel[parameters->channel].initialized) && (parent->initialized))
|
||||
{
|
||||
self->Rank = parameters->Rank;
|
||||
if (!self->initialized)
|
||||
{
|
||||
IODevice_construct(&self->device, read, NULL);
|
||||
|
||||
if ((parameters->Rank) > 0 && (parameters->Rank <= 16))
|
||||
{
|
||||
self->Rank = parameters->Rank;
|
||||
}
|
||||
else
|
||||
{
|
||||
returnValue = ERROR;
|
||||
}
|
||||
if (parameters->channel < 18)
|
||||
{
|
||||
self->channel = parameters->channel;
|
||||
}
|
||||
else
|
||||
{
|
||||
returnValue = ERROR;
|
||||
}
|
||||
|
||||
|
||||
if (returnValue == SUCCESS)
|
||||
{
|
||||
parent->channel[self->channel] = *self;
|
||||
self->parent = parent;
|
||||
self->ADC_SampleTime = parameters->ADC_SampleTime;
|
||||
|
||||
//TODO MAKE SURE EACH RANK IS USED ONLY ONCE
|
||||
ADC_RegularChannelConfig(self->parent->ADCx, self->channel, self->Rank, self->ADC_SampleTime);
|
||||
self->parent->useRanks = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
returnValue = ERROR;
|
||||
}
|
||||
if (parameters->channel < 18)
|
||||
{
|
||||
self->channel = parameters->channel;
|
||||
}
|
||||
else
|
||||
{
|
||||
returnValue = ERROR;
|
||||
}
|
||||
|
||||
if (returnValue == SUCCESS)
|
||||
{
|
||||
self->ADC_SampleTime = parameters->ADC_SampleTime;
|
||||
|
||||
//TODO MAKE SURE EACH RANK IS USED ONLY ONCE
|
||||
ADC_RegularChannelConfig(self->parent->ADCx, self->channel, self->Rank, self->ADC_SampleTime);
|
||||
self->parent->useRanks = true;
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
@@ -178,7 +202,7 @@ ErrorStatus ADCChannel_construct(struct AdcChannel* self, struct Adc* parent, st
|
||||
|
||||
void ADCChannel_destruct(struct AdcChannel* self)
|
||||
{
|
||||
|
||||
self->initialized = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -233,22 +233,23 @@ ErrorStatus initPlatform(void)
|
||||
adc1->ADCx = ADC1;
|
||||
ADC_construct(adc1, adc1Parameters);
|
||||
|
||||
struct AdcChannel adcChannel = {.initialized = false};
|
||||
|
||||
struct AdcChannelParameters acParameters;
|
||||
acParameters.channel = ADC_Channel_0;
|
||||
acParameters.Rank = 3;
|
||||
acParameters.ADC_SampleTime = ADC_SampleTime_55Cycles5;
|
||||
adc1->channel[acParameters.channel].parent = adc1;
|
||||
ADCChannel_construct(&adc1->channel[acParameters.channel], &acParameters);
|
||||
ADCChannel_construct(&adcChannel, adc1, &acParameters);
|
||||
|
||||
acParameters.channel = ADC_Channel_1;
|
||||
acParameters.Rank = 2;
|
||||
acParameters.ADC_SampleTime = ADC_SampleTime_55Cycles5;
|
||||
adc1->channel[acParameters.channel].parent = adc1;
|
||||
ADCChannel_construct(&adc1->channel[acParameters.channel], &acParameters);
|
||||
ADCChannel_construct(&adcChannel, adc1, &acParameters);
|
||||
|
||||
acParameters.channel = ADC_Channel_2;
|
||||
acParameters.Rank = 1;
|
||||
acParameters.ADC_SampleTime = ADC_SampleTime_55Cycles5;
|
||||
adc1->channel[acParameters.channel].parent = adc1;
|
||||
ADCChannel_construct(&adc1->channel[acParameters.channel], &acParameters);
|
||||
ADCChannel_construct(&adcChannel, adc1, &acParameters);
|
||||
|
||||
|
||||
ADC_setDMAStatus(adc1, ENABLE);
|
||||
|
||||
Reference in New Issue
Block a user