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