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

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

[avr-gcc-list] About interrupt vector of GCC


From: whiteman
Subject: [avr-gcc-list] About interrupt vector of GCC
Date: Mon, 28 Jun 2004 17:1:14 +0800

hi,all!

In my project, I used Atmega8 and enable the RDX interrup. But it seem that the 
interrupt vector is wrong. When any data is

received, the Atmega8 is hung. Whether it is the GCC bug or my error?  I ever 
compared ADC interrup with RDX interrup

statement in LST file. They are difference.
Here is my portion of code:

////////////////////////////////////////////////////////

SIGNAL(SIG_USART0_RECV)
{
        temp_flg = UCSRA;
        received_data = UDR;
        receiver_counter ++;
        B_RECEIVED = TRUE;
}

SIGNAL(SIG_ADC)
{
        ADResult = ADCW;
}
int main(void)
{
        DDRB = (1 << DDB2)|(1 << DDB3)|(1 << DDB4);
        PORTB |= 0X20;
        PORTD |= 0x03;
        
        Delay(60000);
        
        sei();
        USART_Init(3);  //250K
        Init_6311();
        char_ram[0] = 0;
        char_ram[1] = char_ram[2] = char_ram[3] = char_ram[4] = char_ram[5] = 
char_ram[6] = 0;
        Convert_dispdat(NO_ASCII);
        set_disp_ram_data();
        B_UPDATEDISP = TRUE;
        while(1)
        {
                CHK_Task();
        }
        return(0);
}
////////////////////////////////////////////////////


////////Here is portion of LST file////////////////
 207                    .Lscope1:
 210                    .global SIG_USART0_RECV
 212                    SIG_USART0_RECV:
  31:dmxlight.c    ****
  32:dmxlight.c    **** SIGNAL(SIG_UART0_RECV)
  33:dmxlight.c    **** {
 214                    .LM7:
 215                    /* prologue: frame size=0 */
 216 0062 1F92                  push __zero_reg__
 217 0064 0F92                  push __tmp_reg__
 218 0066 0FB6                  in __tmp_reg__,__SREG__
 219 0068 0F92                  push __tmp_reg__
 220 006a 1124                  clr __zero_reg__
 221 006c 8F93                  push r24
 222 006e 9F93                  push r25
 223                    /* prologue end (size=7) */
 43:dmxlight.c    ****  temp_flg = UCSRA;
 225                    .LM8:
 226 0070 8BB1                  in r24,43-0x20
 227 0072 8093 0000             sts temp_flg,r24
  44:dmxlight.c    ****         received_data = UDR;
 229                    .LM9:
 230 0076 8CB1                  in r24,44-0x20
 231 0078 8093 0000             sts received_data,r24
  45:dmxlight.c    ****         receiver_counter ++;
 233                    .LM10:
 234 007c 8091 0000             lds r24,receiver_counter
 235 0080 9091 0000             lds r25,(receiver_counter)+1
 236 0084 0196                  adiw r24,1
 237 0086 9093 0000             sts (receiver_counter)+1,r25
 238 008a 8093 0000             sts receiver_counter,r24
  46:dmxlight.c    ****         B_RECEIVED = TRUE;
 240                    .LM11:
 241 008e 8091 0000             lds r24,flag_register
 242 0092 8160                  ori r24,lo8(1)
 243 0094 8093 0000             sts flag_register,r24
  47:dmxlight.c    **** }
 245                    .LM12:
 246                    /* epilogue: frame size=0 */
 247 0098 9F91                  pop r25
 248 009a 8F91                  pop r24
 249 009c 0F90                  pop __tmp_reg__
 250 009e 0FBE                  out __SREG__,__tmp_reg__
 251 00a0 0F90                  pop __tmp_reg__
 252 00a2 1F90                  pop __zero_reg__
 253 00a4 1895                  reti
 254                    /* epilogue end (size=7) */
 255                    /* function SIG_UART0_RECV size 34 (20) */
 257                    .Lscope2:
 260                    .global __vector_14
 262                    __vector_14:
  48:dmxlight.c    ****
  49:dmxlight.c    **** SIGNAL(SIG_ADC)
  50:dmxlight.c    **** {
 264                    .LM13:
 265                    /* prologue: frame size=0 */
 266 00a6 1F92                  push __zero_reg__
 267 00a8 0F92                  push __tmp_reg__
 268 00aa 0FB6                  in __tmp_reg__,__SREG__
 269 00ac 0F92                  push __tmp_reg__
 270 00ae 1124                  clr __zero_reg__
 271 00b0 8F93                  push r24
 272 00b2 9F93                  push r25
 273                    /* prologue end (size=7) */
  51:dmxlight.c    ****         ADResult = ADCW;
 275                    .LM14:
 276 00b4 84B1                  in r24,36-0x20
 277 00b6 95B1                  in r25,(36)+1-0x20
 278 00b8 9093 0000             sts (ADResult)+1,r25
 279 00bc 8093 0000             sts ADResult,r24
  52:dmxlight.c    **** }
 281                    .LM15:
 282                    /* epilogue: frame size=0 */
 283 00c0 9F91                  pop r25
 284 00c2 8F91                  pop r24
 285 00c4 0F90                  pop __tmp_reg__
 286 00c6 0FBE                  out __SREG__,__tmp_reg__
 287 00c8 0F90                  pop __tmp_reg__
 288 00ca 1F90                  pop __zero_reg__
 289 00cc 1895                  reti
 290                    /* epilogue end (size=7) */
 291                    /* function __vector_14 size 20 (6) */
////////////////////////////////////////////////////////////////////////

The RDX interrupt didn't declare the interrup vector, but the ADC have!!, like 
this:
"
 260                    .global __vector_14
 262                    __vector_14:
"

please help me!
        
best regard                     

        whiteman
address@hidden
          2004-06-28






reply via email to

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