Kann mir jemand Tipps geben, wie man am Besten Beispielsources, die
ursprünglich nicht für GCC oder für ein anderes MSP430 Modell
geschrieben wurden portieren kann?
Ich habe teilweise noch ganz schön Schwierigkeiten, da etwas zum Laufen
zu bringen. z.B. die Demoprogramme exklusiv für den MSP430-449STK-B
(ursprünglich für IAR) bekomme ich nicht zum Laufen, obwohl sie für die
verwendete Hardware gedacht sind.
Dieses Beispiel kann ich auch nicht kompilieren. Ich habe die ISR
angepasst, aber es kommt immernoch die Fehlermeldung "syntax error
before numeric constant" bei der Interrupt Service Routine:
===============
/*********************************************************************
initialization of hardware UART0 on MSP430x44x
File: main_hardware.c
Author: Rudolf Brunner rudolf.brunner@gmx.ch
Date: 30.4.03
Description: This file echos a received character @ 4800 baud
MSP430F449
-----------------
/|\| XIN|-
| | |
--|RST XOUT|-
| |
| P2.4|----------->
| | 4800 - 8N1
| P2.5|<-----------
*********************************************************************/
/*********************************************************************
includes
*********************************************************************/
#include <msp430x44x.h>
/*********************************************************************
function prototypes
*********************************************************************/
void init_UART(void);
/*********************************************************************
implementations
*********************************************************************/
int main(void)
{
init_UART();
for(;;);
return 0;
}
void init_UART(void){
P4DIR = 0xff;
P4OUT = 0x00;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
UTCTL0 = SSEL0; // UCLK = ACLK
UBR00 = 0x06; // 32kHz @ 4800 baud
UBR10 = 0x00; // 32kHz @ 4800 baud
UMCTL0 = 0xef; // Modulation Sequence
7-7-7-7-6-7-7-7
UCTL0 = CHAR; // 8-bit character SWRST
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
IE1 |= URXIE0; // Enable USART0 RX interrupt
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
P2DIR |= 0x10; // P2.4 output direction
_EINT(); // Enable interrupts
}
/*********************************************************************
interrupt service routine ISR
*********************************************************************/
//interrupt (UART0RX_VECTOR) void usart0_rx(void)***HIER DER FEHLER***
interrupt(UART0RX_VECTOR) void isr_usart1rx(void)
{
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
P4OUT = RXBUF0;
}
==============
Sind eigentlich teilweise voll die billigen Programme aber trotzdem
komme ich nicht mal dazu sie zu kompilieren. Kann mir da jemand
weiterhelfen?
Die Anleitung habe ich gelesen und auch schon ziemlich alles ausprobiert
davon. Auch wenn das Void weggelassen wird, kommt der gleiche Fehler.
Die Konstanten habe ich extra auch in den Headerfiles nochmal gesucht
um sicherzustellen, dass die auch passen, aber trotzdem meckert der
Compiler...
Ah, hm...
Ich meinte eigentlich, daß Du die komplette Fehlermeldung posten
solltest, aber egal, habe gerade gesehen, daß Du die signal.h nicht
inkludierst.
#include <signal.h>
Da ist alles notwendige für Interrupts drin...
Gruß,
Patrick...
Signal.h ist in der msp430x44x.h bereits inkludiert.
Die Zeilennummer hab ich nicht angegeben, da der Source zusammen mit
meinem Text geschrieben ist. Aber ich habe die Stelle markiert, also
genau der Anfang der ISR.
Vielleicht bin ich ja blind und meine Suchfunktion im Emacs fehlerhaft,
jedenfalls ist die signal.h nicht in der msp430x44x.h inkludiert!
Gruß,
Patrick...
//
// Dieses Programm erzeugt ein Rechteckmuster an der RS232
Schnittstelle.
// Kann man verwenden um mit dem Oszilloskop die Schnittstelle zu
debuggen.
//
#include <signal.h>
#include <msp430x44x.h>
#include <io.h>
int main(void)
{
int j,i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
UTCTL0 = SSEL1; // UCLK = SMCLK
UBR00 = 0x6D; // 1MHz 9600
UBR10 = 0x00; // 1MHz 9600
UMCTL0 = 0x00; // no modulation
UCTL0 = CHAR; // 8-bit character SWRST
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
IE1 |= URXIE0; // Enable USART0 RX interrupt
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
P2DIR |= 0x10; // P2.4 output direction
// _EINT(); // Enable interrupts
TXBUF0=1;
RXBUF0=0;
for (;;)
{
P5DIR = BIT7; // Set P5.7 to output
direction
P5OUT = BIT7; // Lights on
TXBUF0!=TXBUF0;
for(i = 0; i < 100; i++){for(j = 0; j < 2; j++);};
RXBUF0!=RXBUF0;
for(i = 0; i < 100; i++){for(j = 0; j < 2; j++);};
// _BIS_SR(CPUOFF); // Enter LPM0
// _NOP(); // Required only for C-spy
}
return 0;
}
Hab den Beispielsource mal angepasst und die Interruptroutine
rausgenommen. In der Endlosschleife müsste er doch eigentlich ein
Rechteckmuster an Pin 2.4 und 2.5 erzeugen oder? Kann das jemand
verifizieren? Hab das diesen Code auch mal für den msp430 kompiliert
angefügt.
Welches Signal hat man auf dem Oszi zu erwarten. Hab ein
Terminalprogramm auf Handshake=off eingestellt und sinnlose
Zeichenfolgen an den Ausgang geworfen und es waren bei mir immer nur 6
ganz kleine Spikes mit 40mV und Tastkopf 10:1. Kaum vom
Hintergrundrauschen zu unterscheiden aber eindeutig auf Tasteneingaben
zurückzuführen. An den Pins der Platine finde ich nur Rauschen...