Forum: Compiler & IDEs STK500 TWI Interrupt Problem


von Peter Can (Gast)


Lesenswert?

Hi all,
Ich versuche gerade das TWI Master Beispeil(AVR315) von Atmel auf dem 
STK500 zum laufen zu kriegen. Das Beispiel ist direkt für das STK500 
programmiert und sollte doch direkt laufen? Das Problem ist nun das die 
Interrupt routine einfach immerwieder aufgerufen wird. Der mega 
"interrupted" sich quasi zu Tode bis er neustartet. Gab es das Problem 
schonmal?

von Peter Can (Gast)


Lesenswert?

Habe es jetzt mal auf allen meinen Controllern ausprobiert, atmega8, 16 
und 1284 überall der selbe Fehler.

von Sauger (Gast)


Lesenswert?

Mahlzeit,

was hat das STK500 mit dem TWI zu tun? Dieses stellt bestenfalls die TWI 
Pins auf seinen Headern zur weiteren Verwendung bereit. Beschreibe mal 
deinen HW Aufbau, sprich wie sind Master und Slave miteinander 
verbunden.

MfG

von Peter Can (Gast)


Lesenswert?

So habe jetzt mal mein eigenes Programm geschrieben, habe jedoch das 
selbe Problem schon wieder. Nachdem TWIE und TWEN logisch 1 sind wird 
TWI_vect ohne Ende aufgerufen.
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
4
ISR(TWI_vect){
5
  PORTD = !PORTD;
6
}
7
  
8
int main(void)
9
{
10
   DDRD |= (1<<PD3);
11
   TWBR = 0xA; 
12
   TWDR = 0xFF; 
13
   TWCR |= (1<<TWEN) | (1<<TWIE); 
14
   sei();
15
}

von MWS (Gast)


Lesenswert?

Lesen des DBs würde erstaunlich viel helfen:

> The TWINT Flag must be cleared by software by writing a logic one to it.
> Note that this flag is not automatically cleared by hardware when
> executing the interrupt routine.

Und:

> TWIE: TWI Interrupt Enable
> When this bit is written to one, and the I-bit in SREG is set, the TWI
> interrupt request will be activated for as long as the TWINT Flag is high.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.