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
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 :)
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
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
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
@ 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!
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
Ö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
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 | }
|
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
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.