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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.