Hi Leute!
Ich bin langsam ratlos...
Ich möchte beim MSP430G2553 den TA0CCR1 für die Compare-Funktion
benutzen (1s), also habe ich:
1 | void mcu_configure_timer_a( void )
|
2 | {
|
3 | TA0CCTL1 = CCIE;
|
4 | TA0CCR1 = 32767;
|
5 | TA0CTL = ( TASSEL_1 | MC_1 ); // ACLK, up-mode
|
6 | }
|
und dann die ISR:
1 | #pragma vector = TIMER0_A1_VECTOR
|
2 | __interrupt void TIMER0_A1_ISR( void )
|
3 | {
|
4 | switch( TA0IV )
|
5 | {
|
6 | case 2:
|
7 | {
|
8 | P2OUT ^= 0x08; // Toggle LED
|
9 |
|
10 | break;
|
11 | }
|
12 |
|
13 | case 4:
|
14 | {
|
15 | break;
|
16 | }
|
17 |
|
18 | case 10:
|
19 | {
|
20 | break;
|
21 | }
|
22 | }
|
23 | }
|
Aber die Geschichte tut nichts...es passiert einfach garnichts - es wird
kein Flag gesetzt, es kommt kein Interrupt, nichts. Also ehe die Frage
gleich kommt: Der Rest drum herum passt, Interrupts sind freigegeben und
so weiter, denn wenn ich:
1 | void mcu_configure_timer_a( void )
|
2 | {
|
3 | TA0CCTL0 = CCIE;
|
4 | TA0CCR0 = 32767;
|
5 | TA0CTL = ( TASSEL_1 | MC_1 ); // ACLK, up-mode
|
6 | }
|
und die ISR:
1 | #pragma vector = TIMER0_A0_VECTOR
|
2 | __interrupt void TIMER0_A0_ISR( void )
|
3 | {
|
4 | P2OUT ^= 0x08; // Toggle LED
|
5 | }
|
dann geht alles problemlos. Nur der TA0CCR1 will nicht. Ebenso wenig der
TA0CCR2, der TA1CCR1 und der TA1CCR2. Aber der TA1CCR0 geht dann wieder.
Es gehen also nur die CCR0-Interrupts.
Was mache ich falsch? Ich komme langsam nicht mehr weiter und bin am
verzweifeln...habe bereits alles mögliche probiert. Bin auch die
msp430g2553.h durchgegangen, sowie das Datenblatt und den User's Guide.
Aber ich komm' nicht drauf. Habe ich da was übersehen bei den CCR1 und
CCR2?
Kann jemand helfen?