Quantcast
Channel: MSP430 Technical Forums
Viewing all articles
Browse latest Browse all 2077

msp430-g++ and interrupts

$
0
0

Hello,

 

I have a problem with strange behavior of gcc compiler, which does not seem to generate interrupt vectors correctly. I tried to search for hints on the forum, but could not find any helpful information.

I have the following C code:

void __attribute__((interrupt(TIMER0_A0_VECTOR))) timer0_isr(void)
{
  //IMPORTANT !!!!!!!
  //Clear TAIV by reading it !!!!
  (void) TAIV;

  /* ... */
}

void __attribute__((interrupt(TIMER0_A1_VECTOR))) timer0_a1_isr(void)
{
  P1OUT ^= PIN0;
}

volatile int qq;
__attribute__((interrupt(USCIAB0TX_VECTOR))) void usci_tx_isr(void)
{
  qq=1;
  P1OUT ^= PIN6;
  IFG2 &= ~UCA0TXIFG;
}

__attribute__((interrupt(USCIAB0RX_VECTOR))) void usci_rx_isr(void)
{
  qq=2;
  P1OUT ^= PIN6;
  if(IFG2 & UCA0RXIFG)
  {
    (void) UCA0RXBUF;
  }
  IFG2 &= ~UCA0RXIFG;
}

Only the TIMER0_A0_VECTOR ISR contains meaningful code at the moment, and the other 3 procedures are just placeholders.

For some strange reason, the only ISRs which are linked in the executable code to the interrupt vector table are TIMER0_A0_VECTOR and TIMER0_A1_VECTOR:

Disassembly of section .vectors:

0000ffe0 <__ivtbl_16>:
    ffe0:       6c c1           bic.b   @r1,    r12     
    ffe2:       6c c1           bic.b   @r1,    r12     
    ffe4:       6c c1           bic.b   @r1,    r12     
    ffe6:       6c c1           bic.b   @r1,    r12     
    ffe8:       6c c1           bic.b   @r1,    r12     
    ffea:       6c c1           bic.b   @r1,    r12     
    ffec:       78 c4           bic.b   @r4+,   r8      
    ffee:       8e c4 6e c4     bic     r4,     -15250(r14);0xc46e(r14)
    fff2:       b8 c3 6c c1     bic     #-1,    -16020(r8);r3 As==11, 0xc16c(r8)
    fff6:       6c c1           bic.b   @r1,    r12     
    fff8:       6c c1           bic.b   @r1,    r12     
    fffa:       6c c1           bic.b   @r1,    r12     
    fffc:       6c c1           bic.b   @r1,    r12     
    fffe:       00 c0           bic     r0,     r0      

I must be doing something wrong, but I can't find where is the mistake.

Target CPU is MSP430G5553, and here is the information about the compiler:

$  ~/.platformio/packages/toolchain-timsp430/bin/msp430-g++ -v
Using built-in specs.
Reading specs from ~/.platformio/packages/toolchain-timsp430/bin/../lib/gcc/msp430/4.6.3/../../../../msp430/lib/msp430mcu.spec
COLLECT_GCC=~/.platformio/packages/toolchain-timsp430/bin/msp430-g++
COLLECT_LTO_WRAPPER=~/.platformio/packages/toolchain-timsp430/bin/../libexec/gcc/msp430/4.6.3/lto-wrapper
Target: msp430
Configured with: ../../gcc/configure --enable-languages=c,c++ --disable-nls --target=msp430 --prefix=/home/robertinant/opt/mspgcc_energia --with-pkgversion='MSPGCC 20120406 (With patches: sf3540953 sf3559978)'
Thread model: single
gcc version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched) (MSPGCC 20120406 (With patches: sf3540953 sf3559978)) 

Has anybody encountered similar problems?

EDIT: Moving void before __attribute__ has no effect.


Viewing all articles
Browse latest Browse all 2077

Trending Articles