Gast
#458095
Hallo. Brauche ein Programm zur Sinusausgabe mittels PWM (µC AT91SAM7S256). Die PWM-Ausgabe mit unterschiedlichen (statischen) Tastverhältnissen und Frequenzen funktioniert soweit. Jetzt möchte ich mit Interrupt, welcher am Ende jeder Zählperiode kommt, vordefinierte Tastwerte in PWMC_CDTYR reinschreiben und somit einen Sinus ausgeben. Ich verstehe jedoch nicht ganz wie ich mein Interruptcode zum laufen bringe. Bei den AVRs war es einfach: #include "avr/interrupt.h" ISR(Vektorname){ ...Interruptcode... } Kann mir jemand dieses Prinzip beim AT91SAM7S256 erläutern? Also aus einem Beispiel habe ich es so verstanden. PWM_Interrupt soll mein Interruptcode sein. Diese Funktion steht bei mir außerhalb von int main(){} . //------------------------------------------------------------- __ramfunc void PWM_Interrupt(void) { static unsigned long i=0; if(i > PWM_PERIOD_VALUE) { i=0; } AT91C_BASE_PWMC_CH0->PWMC_CDTYR = i; // Tastverhältnisänderung für Sinusausgabe } //----------------------------------------------------------- In int main(){} steht dann: ----------------------------------------------------------------- AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_PWMC, INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE, PWM_Interrupt); AT91F_PWM_InterruptEnable(AT91C_BASE_PWMC,AT91C_PWMC_CHID0); ------------------------------------------------------------------ Mit AT91F_AIC_ConfigureIt werden Initialisierungen für PWM-Interrupt durchgeführt und mein Interruptcode sozusagen übergeben, oder???? Wenn es stimmt bekomme ich trotzdem eine Fehlermeldung: "Fatal Error[e72]: Segment CODE_ID must be defined in a segment definition option (-Z, -b or -P)" Bitte erleuchtet mich.