avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-gcc-list] Problem with interrupt handler?


From: Chris Baugher
Subject: [avr-gcc-list] Problem with interrupt handler?
Date: Fri, 19 Oct 2001 01:43:07 -0500 (CDT)

Hi everyone,

I recently decided to try building some projects using the AVR chips and
have been trying to get some simple test code to run on an at90s2313. I'm
using avr-gcc 3.0.1 and binutils 2.11.2. The problem comes when I try to
compile a program that has an interrupt routine declared. When I try to
run the code on the chip I get all kinds of eratic behaviour, meaning it
doesn't do what it's supposed to.
So after poking around here is what I think.

This is the program I'm trying to run:


/* START */

#include <io.h>
#include <interrupt.h>
#include <sig-avr.h>
#include <timer.h>

static unsigned char ix=0;

SIGNAL(SIG_OVERFLOW0)
{
        ++ix;
}

void main(void)
{       
        outp(0xFF,DDRB);        /* set port B for output mode */
        
        outp(0xFF,DDRD);
        
        for(;;) {
                outp(ix,PORTD);
        }
}
/* END */


NOTICE!! Interrupts are never enabled so the ISR should never execute, but
I think it does! Below is the list file generated by the assembler. It
sure looks to me like the ISR is the very first thing executed.



GAS LISTING dro.s                       page 1


   1                            .file   "dro.c"
   2                            .arch at90s2313
   3                    __SREG__ = 0x3f
   4                    __SP_H__ = 0x3e
   5                    __SP_L__ = 0x3d
   6                    __tmp_reg__ = 0
   7                    __zero_reg__ = 1
   8                    _PC_ = 2
   9                            .data
  10                            .type   ix,@object
  11                            .size   ix,1
  12                    ix:
  13 0000 00                    .byte 0
  14                            .text
  15                    .global _overflow0_
  16                            .type   _overflow0_,@function
  17                    _overflow0_:
  18                    /* prologue: frame size=0 */
  19 0000 1F92                  push __zero_reg__
  20 0002 0F92                  push __tmp_reg__
  21 0004 0FB6                  in __tmp_reg__,__SREG__
  22 0006 0F92                  push __tmp_reg__
  23 0008 1124                  clr __zero_reg__
  24 000a 8F93                  push r24
  25                    /* prologue end (size=6) */
  26 000c 8091 0000             lds r24,ix
  27 0010 8F5F                  subi r24,lo8(-(1))
  28 0012 8093 0000             sts ix,r24
  29                    /* epilogue: frame size=0 */
  30 0016 8F91                  pop r24
  31 0018 0F90                  pop __tmp_reg__
  32 001a 0FBE                  out __SREG__,__tmp_reg__
  33 001c 0F90                  pop __tmp_reg__
  34 001e 1F90                  pop __zero_reg__
  35 0020 1895                  reti
  36                    /* epilogue end (size=6) */
  37                    /* function _overflow0_ size 17 (5) */
  38                    .Lfe1:
  39                            .size   _overflow0_,.Lfe1-_overflow0_
  40                    .global main
  41                            .type   main,@function
  42                    main:
  43                    /* prologue: frame size=0 */
  44 0022 C0E0                  ldi r28,lo8(__stack - 0)
  45 0024 D0E0                  ldi r29,hi8(__stack - 0)
  46 0026 DEBF                  out __SP_H__,r29
  47 0028 CDBF                  out __SP_L__,r28
  48                    /* prologue end (size=4) */
  49 002a 8FEF                  ldi r24,lo8(-1)
  50                    /* #APP */
  51 002c 87BB                  out 23,r24
  52 002e 81BB                  out 17,r24
  53                    /* #NOAPP */
  54 0030 8091 0000             lds r24,ix
  55                    .L43:
  56                    /* #APP */
  57 0034 82BB                  out 18,r24
GAS LISTING dro.s                      page 2


  58                    /* #NOAPP */
  59 0036 FECF                  rjmp .L43
  60                    /* epilogue: frame size=0 */
  61                    __stop_progIi__:
  62 0038 FFCF                  rjmp __stop_progIi__
  63                    /* epilogue end (size=1) */
  64                    /* function main size 15 (10) */
  65                    .Lfe2:
  66                            .size   main,.Lfe2-main
  67                    /* File dro.c: code   32 = 0x0020 (  15), prologues  
10, epilogues   7 */
GAS LISTING dro.s                      page 3


DEFINED SYMBOLS
                            *ABS*:00000000 dro.c
                            *ABS*:0000003f __SREG__
                            *ABS*:0000003e __SP_H__
                            *ABS*:0000003d __SP_L__
                            *ABS*:00000000 __tmp_reg__
                            *ABS*:00000001 __zero_reg__
                            *ABS*:00000002 _PC_
               dro.s:12     .data:00000000 ix
               dro.s:17     .text:00000000 _overflow0_
               dro.s:42     .text:00000022 main
               dro.s:61     .text:00000038 __stop_progIi__
                            *ABS*:00000000 *ABS*

UNDEFINED SYMBOLS
__stack



Looking at this list file it sure looks like the program starts at line 19
which is a push instruction. Isn't the first instruction supposed to be a
jump to the main routine? Am I missing something? I can give more info if
needed.

Thanks!

Chris|




reply via email to

[Prev in Thread] Current Thread [Next in Thread]