Hallo ale miteinander. Seit gestern nachmittag versuche ich verzweifelt auf meinem RN-Control ein kleines Programm zum Laufen zu bringen. Es soll in der Hauptschleife die LED am PortC.4 blinken lassen (tut es auch) und wenn ich den Interrupt 0 auslöse die LED am PortC.0 blinken lassen (tut es nicht).

Ich habe jetzt viele Stunden dieses und etliche andere Foren gewälzt, Tutorials, Datenblätter und Google gequält, aber ich finde die Lösung einfach nicht... Könnt ihr bitte mal kurz in meinen Code schauen und mir sagen, wo der Fehler liegt?



Quellcode:
Code:
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>


int main(void)
{

	/*###Initialisierungsphase###*/

	//Pins bzw. Ports als Ein-/Ausgänge konfigurieren
	DDRC |= 0x11;	//10001000 -> PORTC.4 ist blinkende LED im Hauptprogramm, PORTC.0 ist Anzeige des Interrupts
	DDRD |= 0x00;	//00000000 -> PORTD.2 ist Interrupt0 (Der ausgelöst werden soll)
	
	//Variablen
	uint8_t counter;

	//Interrupts initialisieren - ist der Kram hier richtig?
	MCUCR = ~(1<<ISC01);
	MCUCR = (1<<ISC00);
	GICR = (1<<INT0);
	sei();

	//Interruptroutine, die ausgelöst werden soll - aber nicht wird
	ISR(INT0_vect)
	{
		for(uint8_t i=0; i<5; i++)
		{
		PORTC |= (1<<0);
		
		//wait 16*65536
		counter = 0;
		while(counter < 16)
		{
			counter++;
			_delay_loop_2(65535);
		}

		PORTC &= ~(1<<0);
		
		//wait 16*65536
		counter = 0;
		while(counter < 16)
		{
			counter++;
			_delay_loop_2(65535);
		}
		}
	}

	while(1)
	{
		PORTC |= (1<<4);
		
		//wait 16*65536
		counter = 0;
		while(counter < 16)
		{
			counter++;
			_delay_loop_2(65535);
		}

		PORTC &= ~(1<<4);
		
		//wait 16*65536
		counter = 0;
		while(counter < 16)
		{
			counter++;
			_delay_loop_2(65535);
		}
	{

	}
	}
	
	
	return 1;
}


Compilerausgabe:
Code:
> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.6
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Size before:
interrupts.elf  :
section    size      addr
.text       228         0
.data         0   8388704
.bss          0   8388704
.noinit       0   8388704
.eeprom       0   8454144
.stab      1980         0
.stabstr   1866         0
Total      4074




Converting to AVR Extended COFF: interrupts.cof
avr-objcopy --debugging --change-section-address .data-0x800000 --change-section-address .bss-0x800000 --change-section-address .noinit-0x800000 --change-section-address .eeprom-0x810000  -O coff-ext-avr interrupts.elf interrupts.cof
Warning: file C:/DOCUME~1/EWEDDI~1/LOCALS~1/Temp/cc0Eeaaa.s not found in symbol table, ignoring
Warning: ignoring function __vectors() outside any compilation unit
Warning: ignoring function __bad_interrupt() outside any compilation unit

Size after:
interrupts.elf  :
section    size      addr
.text       228         0
.data         0   8388704
.bss          0   8388704
.noinit       0   8388704
.eeprom       0   8454144
.stab      1980         0
.stabstr   1866         0
Total      4074



Errors: none
-------- end --------


> Process Exit Code: 0
> Time Taken: 00:01


Ich weiß, dass sich dieser Effekt über Timer oder sonstwas viel einfacher erreichen ließe, aber ich will verstehen, wie ich externe Interrupts auslöse. Bin für jede Hilfe sehr dankbar!


Gruß
Corone