mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer_A, Timer_B


Autor: XMEN (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
mal eine frage:bei msp430
ich will 2 timer benutzen . also timerA und timerB..
ich will 2 interrupt auslösen. einmal mit timerA und einmal mit B.


mit welchem Befehl kann ich zu den Routinen springen?
als bsp: _EINT(); aber das ist eine allgemeine Interrupt.
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
..
}


// Timer B0 interrupt service routine
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
..
}


danke im Vorraus...

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> mit welchem Befehl kann ich zu den Routinen springen?

Du willst einen Befehl mit dem man manuell in die Interrupt Routine 
springen kann?

Autor: XMEN (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja genau, ein befehl dass ich in die interrupt von Timer A springe oder 
in die B.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ja genau, ein befehl dass ich in die interrupt von Timer A springe
> oder in die B.

Das widerspricht dem Wesen eines Interrupts.
Aber du kannst folgendes machen:

Lagere die Funktionalität der jeweiligen Interrupts in
eine eigene Funktion aus.
Diese Funktion rufst du vom Interrupt Handler auf. Und
natürlich kannst du die Funktion auch von überall
her anders aufrufen.

Darf ich fragen, wozu das gut sein soll?

Autor: XMEN (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin kein programmierer und muss den Timer benutzen für eine 
schleife, in diese scheife sind einige wait.funktionen, dadurch wird 
mein Timer durcheinander und zählt nicht mehr richtig.
ich wollte also den 2ten timer (B)benutzen und die Wait funktion 
weglassen.
so in dem Art:

if(..)
{
timer-A setzen
erste teil des programms durchführen
wait()

2te teil...
waite()

3 teil
wait()
ende Programm.
}
timer-A auf 0 setzen.

Autor: XMEN (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Diese Funktion rufst du vom Interrupt Handler auf. Und
> natürlich kannst du die Funktion auch von überall
> her anders aufrufen.

wie...?

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sagte ich doch schon:

Nimm deine jetzige Interrupt Funktion her.

// Timer B0 interrupt service routine
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
..
bla bla, irgendwas
..
}

Den Teil innerhalb des Handlers verschiebst du in eine
eigene Funktion:

void MeineTimerBFunktion()
{
..
bla bla, irgendwas
..
}

und rufst sie vom Handler aus auf:
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
  MeineTimerBFunktion();
}

und genauso wie du sie vom Handler aus aufgerufen hast,
kannst du sie auch von anderen Programmteilen aufrufen.

Das löst dein Syntaxproblem. Ob es auch dein logisches
Problem im konkreten Programm löst, musst du selbst wissen.
Deine Beschreibung von den Timern und den Wait Sachen klingt
nicht danach.


Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sinnvoller wäre es, eine globale Variable mit Flags zu machen, in der du 
speicherst, was als nächstes passieren soll. Dann den Timer passend 
einstellen, und beim Timer-Interrupt nach dem Flag schauen, was zu tun 
ist. Abarbeiten, Timer wieder stellen und Flag für den nächsten Task 
setzen.
Zwischendurch kannste den MSP schlafen schicken.

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.