I2C Slave antwortet nicht richtig

Gast #934748
Lesenswert?

Hallo Forum,
ich habe ein kleines  Problem, ich habe einen DSP der über I2C mit einem 
Atmega8 kommunizieren soll, wobei der DSP der Master ist, der Atmega8 
soll nur im Slave Transmit Modus betrieben werden.
Er reagiert auch mit dem Interrupt auf die Anfrage des DSP aber 
antwortet nicht richtig. Anstatt der Daten die der Atmega8 senden soll, 
sendet er seine eigene Adresse.
Hier der Quellcode der Interruptroutine und die Initialisierung

1
TWI_INI:
2
  ldi        temp, ADRESS
3
  out        TWAR,temp          ; Adresse für das I2C Interface
4
  ldi       temp,(1<<TWEA)|(1<<TWEN)|(1<<TWIE)  ; TWI-Modul als Slave initialisieren
5
  out        TWCR,temp
6
  ldi        temp,0xFC
7
  out        TWSR,temp          ; Prescaler für TWI auf 1
8

9
;interrupt
10
I2CInt:
11

12
  in      Bufferi,SREG
13
  ldi     tempi, (1<<TWINT)|(1<<TWEA)|(1<<TWEN)|(1<<TWIE)    ; Interrupt Flag löschen
14
  out     TWCR,tempi  
15
  in       Tempi, TWSR    ; Status-Register abfragen            
16
  andi     Tempi, 0xF8    ; Bit0...2 ausblenden (Prescaler und Reserve-Bit)
17

18
  cpi     Tempi, TW_ST_SLA_ACK          ; 0xA8   SLA+R
19
  breq     TWSI_TW_ST_SLA_ACK  
20
TWSI_TW_ST_SLA_ACK:            ; xA8   10101000 (SLA+R wurde empfangen; ACK wurde zurückgesendet)    
21
  sbi    PortD,1    
22
  out    TWDR,temp2
23
  cbi    PortD,1
24
  ldi    Tempi, (1<<TWINT|1<<TWEA|1<<TWEN|1<<TWIE)
25
  out    TWCR,Tempi
26
  out      SREG,Bufferi
27

28
reti

über den Trigger an PD1 sehe ich, das er auch jedes mal da lang kommt?

Sieht hier jemand einen Fehler?

Gruß
Mathias

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren