[Top][All Lists]
[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
- [avr-gcc-list] About interrupt vector of GCC,
whiteman <=