www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM-Sinusausgabe interruptgesteuert mit AT91SAM7S256


Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weis denn keiner Rat?

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo mirko,
ich würde mir mal das example AT91SAM7S64-PWMAudio-IAR4_30A-1_21 von 
www.at91.com ansehen.

gruss
gerhard

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also kann ich __ramfunc auch weglassen?

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?????

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.