Gast
#1084825
Hallo, ich beginne gerade mit der Programmierung eine MSP430F149 Mikrocontrollers von TI. Als Hardware habe ich hier ein Olimex Board und als IDE Rowley CrossWorks. Ich versuche gerade den TimerA in Kombination mit einem Overflow Interrupt auszuprobieren. Doch leider zeigt mir das Multimeter unmittelbar nach dem Power Up am Pin die Spannung von 1,62V an. Ich vermute, das er stehts und ständig in der Interrupt-Routine verbleibt und jeweils schnell den Port Ausgang von 0 auf 3,3V zieht und so eine Spannung von 1,62V am Multimeter zu sehen ist. Kann jemand mir den Fehler im Code erklären. Ich weiss, das der Code nicht gerade übersichtlich oder effektiv geschrieben ist. Es dienst ausschliesslich zum kennlernen des Controllers und der Programmiersprache C. Danke typedef struct { unsigned p1_dir_0:1; unsigned p1_dir_1:1; unsigned p1_dir_2:1; unsigned p1_dir_3:1; unsigned p1_dir_4:1; unsigned p1_dir_5:1; unsigned p1_dir_6:1; unsigned p1_dir_7:1; }datatype_p1_dir_bit; typedef union { datatype_p1_dir_bit p1_dir_bit; unsigned char p1_dir_byte; }datatype_p1_dir_byte; datatype_p1_out_byte *ptr_p1_out=(unsigned char*)0x21; datatype_p1_dir_byte *ptr_p1_dir=(unsigned char*)0x22; /*********************************************************************** ***************************************** Interrupt Routine: Timer A Overflow ************************************************************************ ****************************************/ void handle_timer_interrupt(void) __interrupt[TIMERA1_VECTOR] { (*ptr_p1_out).p1_out_bit.p1_out_0=!(*ptr_p1_out).p1_out_bit.p1_out_0; } /*********************************************************************** ***************************************** Source File: Main ************************************************************************ ****************************************/ void main(void) { (*ptr_p1_dir).p1_dir_bit.p1_dir_0=1; WDTCTL = WDTPW + WDTHOLD; // Stop WDT TACTL = TASSEL0 + TACLR + TAIE; // ACLK, clear TAR, interrupt enabled TACTL |= MC1; // Start Timer_A in continuous mode _EINT(); // Enable interrupts for (;;) { _NOP(); } }