dsPIC33C ADC Channel Interrupt Aufruf Synthax Problem

OP #7710348
Lesenswert?

Hallo mikrocontroller Community,

ich bin momentan ein wenig am Verzweifeln. Als Neuling im Bereich Mikrocontroller stehe ich aktuell vor einigen Herausforderungen, insbesondere bei der Syntax von Interrupts. Ich arbeite derzeit mit dem Digital Power Starter Kit, auf dem ein dsPIC33CK256MP505 verbaut ist.

Der Mikrocontroller bietet die Möglichkeit, bei jeder Konvertierung eines Kanals einen Interrupt aufzurufen. Leider bekomme ich vom Compiler Fehlermeldungen, die darauf hinweisen, dass ich etwas falsch mache.

Könnte mir jemand bitte weiterhelfen und erklären, wie ich dem Interrupt korrekt die ISR zuweise?

Vielen Dank im Voraus!

Zuerst die Funktion für die Interrupt Aufrufe aus der Header Datei des adc1.h:

1
/**
2
 * @ingroup    adcdriver
3
 * @brief      This function can be used to override default callback \ref ADC1_ChannelCallback
4
 *             and to define custom callback for ADC1 Channel event. 
5
 *             Read the conversion result of the corresponding channel in the custom callback.
6
 * @param[in]  callback - Address of the callback function.  
7
 * @return     none  
8
 */
9
void ADC1_ChannelCallbackRegister(void(*callback)(enum ADC_CHANNEL channel, uint16_t adcVal));
10

11
/**
12
 * @ingroup    adcdriver
13
 * @brief      This is the default callback function for all the analog channels. 
14
 *             This callback is triggered once the channel conversion is done for a
15
 *             channel and to read the conversion result of the corresponding channel
16
 * @param[in]  channel - conversion completed channel
17
 * @param[in]  adcVal - conversion result of channel  
18
 * @return     none  
19
 */
20
void ADC1_ChannelCallback(enum ADC_CHANNEL channel, uint16_t adcVal);

Und das ist mein Aufruf in der main.c Datei in der main- Funktion.

1
    ADC1_ChannelCallback(Channel_AN13,dings);    
2
    
3
    ADC1_ChannelCallback(Channel_AN18,dings2);

Definitionen was in der ISR passieren soll:

1
ADC1_ChannelCallback(Channel_AN13,dings)
2
{
3
    adc_vin = ADCBUF12;
4
    adc_vbuck = ADCBUF13;
5
    Buck_Controller_Update(&Buck_Controller);
6
//    Buck_Controller_PTermUpdate(&Buck_Controller);
7
    
8
}
9

10
ADC1_ChannelCallback(Channel_AN18,dings2)
11
{
12
//    adc_vin = ADCBUF12;
13
    adc_vboost = ADCBUF18;
14
    Boost_Controller_Update(&Boost_Controller); //Mit Pointer zum Boost_Voltage_Loop Control Object
15
//    Boost_Controller_PTermUpdate(&Boost_Controller);
16
}
#7710446
Lesenswert?

Don schrieb:

Und das ist mein Aufruf in der main.c Datei in der main- Funktion.

1
>     ADC1_ChannelCallback(Channel_AN13,dings);
2
> 
3
>     ADC1_ChannelCallback(Channel_AN18,dings2);
4
>

Und genau das ist das Problem. Du rufst die Callbacks nicht auf. Niemals. Das macht das System. Du must nur eine eigene Funktion schreiben, die aufgerufen werden, und Du musst diese registrieren.

1
void My_ADC1_Callback(enum ADC_CHANNEL channel, uint16_t adcVal)
2
{
3
  switch(channel)
4
  {
5
     case Channel_AN13:
6
       adc_vin = ADCBUF12;
7
       adc_vbuck = ADCBUF13;
8
       Buck_Controller_Update(&Buck_Controller);
9
       break;
10
     case Channel_AN18:
11
       adc_vboost = ADCBUF18;
12
       Boost_Controller_Update(&Boost_Controller);
13
       break;
14
     default:
15
       break;
16
  }
17
}

und dann in der main:

1
ADC1_ChannelCallbackRegister(&MyADC1_Callback);

So oder so ähnlich ist das gedacht.

fchk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren