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.
hallo mirko, ich würde mir mal das example AT91SAM7S64-PWMAudio-IAR4_30A-1_21 von www.at91.com ansehen. gruss gerhard
danke Gerhard für die antwort, aber ich konnte dieses beispiel auf at91.com nicht finden. es wäre nett, wenn du den link noch mal posten würdest.
hallo, leider gibt es keinen direkten link, aber probiwers mal so: www.at91.com -> in der Auswahlleiste oben "Kit" -> AT91SAM7S-EK -> scrollen bis "Software Package" -> AT91SAM7S256 -> das zum verwendeten Compiler passende zip-Archiv herunterladen gruss gerhard
leider ist PWM-Audio in diesem file nicht dabei. aber andere frage. was macht " __ramfunc " denn? und kann ich dieses kürzel einfach weglassen? ohne " __ramfunc " bekomme ich dann auch keine fehlermeldung (--Fatal Error[e72]: Segment CODE_ID must be defined in a segment definition option (-Z, -b or -P)-- ), interrupt lässt sich aber trotzdem nich aufrufen.
hallo, pwmaudio findest du in den beispielen für den at91sam7s64. zu deiner frage betreffend __ramfunc: __ramfunc bewirkt, das die betreffende funktion beim hochlauf ins ram kopiert wird. gruss gerhard
ob du __ramfunc weglassen kannst oder nicht hängt von deiner anwendung ab. wenn du in das flash schreiben willst, darf die entsprechende funktion nicht im flash stehen sondern muss aus dem ram exekutieren. wenn die funktion mgölichst schnelle ablaufen soll dann macht es auch sinn diese aus dem ram zu exekutieren da dann keine waiststates notwendig sind. btw: wäre gut wenn du uns mal deine entwicklungsumgebung verrätst. gruss gerhard
Entwicklungsumgebung: IAR Embedded Workbench und AT91SAM7S-EK mit J-Link Ich werde verrückt, es funktioniert immer noch nicht. Genz komisch die Sache. Paar mal hat es funktioniert, dann aber wieder nicht (dabei wurde der Code überhaupt nicht verändert).
Mittlerweile habe ich festgestellt, daß wenn man das board ausmacht dann wieder einschaltet und ram_debug startet, wird mein Interrupt ausgelöst und meine dynamische PWM ist auf dem Oszi zu sehen. Wenn man jetzt das Debugen verläßt und das Debugen dann wieder startet funktioniert das Ganze nicht mehr. Man muß das Board aus- dann wieder einschalten und ram_debug klicken dann läufts wieder. Ich habe mit SAM_BA geflascht und es funzt alles (Flash_Debug hat keine Wirkung). Kann mir das jemand erklären?????
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.