Interrupt bei TWI Slave (Atmega8)?

Gast #1331251
Hallo!!
Ich bitte um Hilfe, da ich zur zeit "auf der Leitung stehe" :-)!!

Ich will einen ATmega8 im TWI (I2C) Slave Modus laufen lassen, es soll 
eine i2C Motor Steuerung werden.

Nun meine Frage:
Der Atmega8 besitzt einen TWI Interrupt Vector (18), der wird ausgelöst 
wenn das TWINT bit im TWCR Register gesetzt ist.
Wird dieses Bit auch gesetzt, wenn die Slave Adresse, die ich dem Atmega 
gegeben habe, auf den Bus gesendet wurde, oder wird das Bit nur gesetzt 
wenn das TWI Modul mit der Datenübertragung fertig ist??? Oder weder 
noch???

Wenn dadurch kein Interrupt ausgelöst wird, gibt es dann noch eine 
andere möglichkeit den Atmega8 in eine ISR springen zu lassen, wenn 
seine Adresse am Bus liegt oder zumindest wenn die Startbedingung auf 
den Bus gesendet wurde????

Bitte um dringende Hilfe!!!!!

MFG
Gast
Soweit ich mich erinner, wird der Interrupt immer gesetzt, wenn am TWI 
was passiert. Du musst dann in der ISR unterscheiden, was passiert.

z.B. eine der ISRs von mir:
1
ISR (SIG_2WIRE_SERIAL)
2
{
3
  ui8_t data = 0;
4
  switch (TW_STATUS)
5
  {
6
    case TW_SR_SLA_ACK: // 0x60, SID received
7
      TWCR_ACK();
8
      TWI_RxBuf_Cnt = 0x00;
9
      TWI_TxBuf_Cnt = 0x00;
10
      break;
11
    case TW_SR_DATA_ACK: // 0x80, Slave receiver, get data
12
      data = TWDR;  
13
      TWI_RxBuffer[TWI_RxBuf_Cnt++] = data;
14
      TWCR_ACK();
15
      break;
16
    case TW_ST_SLA_ACK:
17
    case TW_ST_DATA_ACK: // 0xB8, Slave transmitter, send data
18
      TWDR = TWI_TxBuffer[TWI_TxBuf_Cnt++];
19
      TWCR_ACK();
20
      break;
21
    case TW_ST_DATA_NACK: // 0xC0, no more data requested
22
    case TW_SR_DATA_NACK: // 0x88
23
    case TW_ST_LAST_DATA: // 0xC8, last data byte transmitted
24
    case TW_SR_STOP: // 0xA0, Stop
25
    default:
26
      TWI_NewMsg = 1;
27
      TWCR_RESET();
28
      break;
29
  }
30
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.