mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F133 input capture


Autor: Frank Bußmann (frank13)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits!

Ich stehe momentan komplett auf dem Schlauch bzw. finde meinen Fehler 
einfach nicht. Ich beschäftige mich auch erst seit Kurzem mit dem 
MSP430.
Ich möchte mit dem MSP430F133 die input capture Funktion des Timer A 
nutzen. Nur leider tut sich in meinem Testprogramm (siehe Anhang) 
nichts. Kann da mal jemand drübersehen, wo der Fehler steckt?
Ich wollte Pin 1.1 dafür nutzen, andere sind aber ebenfalls möglich.

Gruß

Frank13

Autor: Johnny Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss man nicht P1SEL und P1DIR entsprechend setzen?

PS: Grade beim MSP430 der für C ideal geeignet ist sollte man sich 
überlegen ob man wirklich den ganzen Kram in Assembler machen will. 
Alles was man in Assembler machen kann geht in C auch aber es ist 
tausendmal übersichtlicher :)

Autor: Michael S. (michaels)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank13,

auf den ersten Blick fallen mir auf,
 dass Du vergessen hast, den Pin 1.1 als Modulpin zu initialisieren:

   mov.b   #0x02,&P1SEL    ;mache Pin 1.1 zum Modulpin

 dass Du dem Interruptvektor für den TimerA0-Vektor eine falsche Adresse 
zugewiesen hast. Der richtige Vektor hat die Adresse 0xFFEC. Die von Dir 
verwendete Adresse in den SFRs enthält den Offset auf die 
Interruptquellen TA1, TA2 und TAOVL, die alle auf den gleichen 
Interruptvektor gelenkt werden. Details siehe Datenblatt oder "Das 
grosse MSP430 Praxisbuch".

Falls ein Ereignis eintreten sollte, das einen TA2-Interrupt auslöst, 
hängt sich der Controller auf, weil Du keinen InterruptVektor dafür 
eingetragen hast.

Gruss Michael

Autor: Frank Bußmann (frank13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

P1SEL war der Fehler. Danke!
Das Problem an C ist, dass ich die IAR Workbench verwende und keine 
brauchbaren Beispielquellcodes finde. Es hapert da einfach an der 
primitiven Syntax für Interrupts und ähnliches. Wenn jemand den kurzen 
Quelltext von oben in C übersetzen könnte, würde ich das dankbar 
annehmen!

Gruß

Frank13

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Bußmann wrote:
> Hi!
>
> P1SEL war der Fehler. Danke!
> Das Problem an C ist, dass ich die IAR Workbench verwende und keine
> brauchbaren Beispielquellcodes finde. Es hapert da einfach an der
> primitiven Syntax für Interrupts und ähnliches.

Hä? Gerade für den IAR gibts doch massenhaft Beispielcodes, direkt von 
TI und die funktionieren auch alle, schau doch mal hier:
http://focus.ti.com/mcu/docs/mcuflashtools.tsp?sec...

Autor: Frank Bußmann (frank13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Michael S.:

Da haben sich die Posting überschnitten. Danke für die Infos! Ich werde 
mal weitertesten in der Hoffnung, dass es jetzt endlich alles klappt.

Gruß

Frank13


PS: Den Code in C für die IAR-Workbench wäre wirklich toll!

Autor: Michael S. (michaels)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank13,

habe noch übersehen: Der Controller hängt sich auf jeden Fall auf, weil 
Du auch den TA-Overflow Interrupt eingeschaltet hast, für den ebenfalls 
kein Interruptvektor eingetragen ist. Spätestens, wenn TAR überläuft, 
ist Feierabend.

Gruss Michael

Autor: Frank Bußmann (frank13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Örks.... ich sollte wohl besser ins Bett gehen... Ich habe das Netz mit 
Google auf den Kopf gestellt, ob ich irgendwo Beispiele finde. Auf TI 
direkt (eigentlich die logische Variante) bin ich nätürlich nicht 
gekommen...

Danke!!!

Gruß

Frank 13

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil es gar so einfach ist, bitteschön. IAR hab ich nicht, aber der 
folgende Code compiliert zumindest unter mspgcc (ist natürlich 
ungetestet):
#include <msp430x13x.h>
#include <msp430/common.h>
#include <signal.h>

int main(void) {
        WDTCTL = WDTPW+WDTHOLD; /* Stop WDT */

        P6OUT = 0;
        P6DIR = 0xff;

        P1SEL = 0x02;

        TACTL = TASSEL_0+TACLR+TAIE+MC_2;       /* clockselect, Clear TAR */
        TACCTL0 = CM_1+CAP+CCIE;                /* capture on rising edge */
        TACCTL2 = CM_1+CAP+CCIE;                /* capture on rising edge */

        /* Was auch immer hier bei IAR stehen muss */
        eint();

        while(1) {
                WDTCTL = WDTPW+WDTCNTCL;
        }
}

/***************************************
 ********** Empfangsinterrupt **********
 ***************************************/

/* Das ist die Syntax für mspgcc  *
 * Vector TIMERA0_VECTOR = 0xFFEC */
interrupt (TIMERA0_VECTOR) timera0_irq(void) {
        P6OUT = 0;
        nop();
        P6OUT = 0xff;
}

Autor: Frank Bußmann (frank13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin moin,

Danke für den C-Code.
Genau das "Was auch immer hier bei IAR stehen muss" war bei mir das 
Problem. Ich habe es aber noch hinbekommen.

Nochmals danke an alle!

Gruß

Frank13

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.