Avatar billede atomizer Nybegynder
02. december 2003 - 11:31 Der er 2 kommentarer

MSP430x14x MCU og Interrupts

Hej

Vi sidder og arbejder på et projekt hvor vi skal bruge flere interrupts på
en MSP430F149 MCU.
Projektet bliver kompileret med mspgcc (mspgcc.sf.net) toolchain.

Når vi bruger flere interrupts så får vi en fejl:
msp430-ld:      section .vectors [0000ffe0 -> 0000ffff] overlaps section
.text [0000fc00 -> 000100d7]


Vi skal gerne bruge:
UART0TX_VECTOR
ADC_VECTOR


Vi har husket og køre:

eint();


og kalder interruptene således:

interrupt(ADC_VECTOR) ADC12ISR(void)
{
  ADC[0] = ADC12MEM0;
  ADC[1] = ADC12MEM1;    // Move results, IFG is cleared
  ADC[2] = ADC12MEM2;
  ADC[3] = ADC12MEM3;
}

interrupt(UART0TX_VECTOR) send_uart0(void)
{
...
...
...
}


Makefile:

# Project: MSP430
CPP  = msp430-gcc.exe
CC  = msp430-gcc.exe
RES  =
OBJ  = main.o konfiguration/konfiguration.o fejl/fejl.o toolboks/toolboks.o
porthandler/porthandler.o porthandler/adc.o terminalkomm/RS232.o $(RES)
LINKOBJ  = main.o konfiguration/konfiguration.o fejl/fejl.o
toolboks/toolboks.o porthandler/porthandler.o porthandler/adc.o
terminalkomm/RS232.o $(RES)
LIBS =  -L"C:/mspgcc/lib"
INCS =  -I"C:/mspgcc/msp430/include"
BIN  = main.exe
CFLAGS = $(INCS)-g -O2 -Wall -mmcu=msp430x149

.PHONY: all all-before all-after clean clean-custom

all: all-before main.exe all-after


clean: clean-custom
rm -f $(OBJ) $(BIN)

$(BIN): $(LINKOBJ)
$(CC) $(LINKOBJ) -o "main.exe" $(LIBS)

main.o: main.c
$(CC) -c main.c -o main.o $(CFLAGS)

konfiguration/konfiguration.o: konfiguration/konfiguration.c
$(CC) -c konfiguration/konfiguration.c -o konfiguration/konfiguration.o
$(CFLAGS)

fejl/fejl.o: fejl/fejl.c
$(CC) -c fejl/fejl.c -o fejl/fejl.o $(CFLAGS)

toolboks/toolboks.o: toolboks/toolboks.c
$(CC) -c toolboks/toolboks.c -o toolboks/toolboks.o $(CFLAGS)

porthandler/porthandler.o: porthandler/porthandler.c
$(CC) -c porthandler/porthandler.c -o porthandler/porthandler.o $(CFLAGS)

porthandler/adc.o: porthandler/adc.c
$(CC) -c porthandler/adc.c -o porthandler/adc.o $(CFLAGS)

terminalkomm/RS232.o: terminalkomm/RS232.c
$(CC) -c terminalkomm/RS232.c -o terminalkomm/RS232.o $(CFLAGS)



Vi vil gerne høre fra folk som har brugt flere interrupts på MSP'en
Avatar billede chries Nybegynder
02. december 2003 - 11:36 #1
Nu kender jeg intet til processoren, men jeg tror "i" smider kode hvor hvor der bare skal være en jump til koden i vil afvikle.
Avatar billede chries Nybegynder
02. december 2003 - 11:43 #2
Jeg fandt et eksempel, skal der ikke stå pragma foran interrupten ?
#pragma vector=UART0TX_VECTOR
__interrupt void uart0_tx(void)
{
  _EINT();
  if (ucTXCharCount)
  { // send if chars are in buffer
      U0TXBUF = ucTXBuffer[ucTXReadIndex++]; // load tx register, inc index
      ucTXReadIndex &= TXBUFSIZE-1;        // adjust index
      ucTXCharCount--;                      // char sent, dec count
  }
  else // buffer empty, nothing to do
      bTXBufferEmpty = BUFFER_EMPTY;        // set empty flag
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester