MSP430F133 input capture

OP #794820
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
Angehängte Dateien:
Gast #794853
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 :)
#794871
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
OP #794873
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
#794880
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?sectionId=95&tabId=1538&familyId=342
Gast #794912
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):
1
#include <msp430x13x.h>
2
#include <msp430/common.h>
3
#include <signal.h>
4

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

8
        P6OUT = 0;
9
        P6DIR = 0xff;
10

11
        P1SEL = 0x02;
12

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

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

20
        while(1) {
21
                WDTCTL = WDTPW+WDTCNTCL;
22
        }
23
}
24

25
/***************************************
26
 ********** Empfangsinterrupt **********
27
 ***************************************/
28

29
/* Das ist die Syntax für mspgcc  *
30
 * Vector TIMERA0_VECTOR = 0xFFEC */
31
interrupt (TIMERA0_VECTOR) timera0_irq(void) {
32
        P6OUT = 0;
33
        nop();
34
        P6OUT = 0xff;
35
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren