PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XMega TWI-Slave Interrupt



Che Guevara
08.10.2012, 13:10
Hi,

bin gerade dabei, einen XMega als TWI-Slave zu verwenden. Das Empfangen von Daten funktioniert auch, jedoch weiß ich nicht so recht, wie ich Daten an den Master zurücksenden soll ... Das DB finde ich diesbezüglich nicht sehr leicht verständlich... Vielleicht kann mir ja jemand helfen. Hier mein aktuelles Programm zum Empfangen:



$regfile = "xm32a4def.dat"
$crystal = 32000000
$framesize = 100
$swstack = 100
$hwstack = 100


$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014


Config Osc = Disabled , 32mhzosc = Enabled
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1



Config Porta.2 = Output
Config Porta.3 = Output
Config Porta.4 = Output
Config Porta.5 = Output

Porta.2 = 0
Porta.3 = 0
Porta.4 = 0
Porta.5 = 0


Twie_slave_ctrla = &B11111001
Twie_slave_addr = &H50


On Twie_slave Twi_int
Enable Twie_slave , Hi


Dim Rbyte As Byte



Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled , Hi = Enabled
Enable Interrupts




Do


Toggle Porta.2
Waitms 500


Loop

End


Twi_int:
Toggle Porta.3

If Twie_slave_status.6 = 1 Then 'Valid Address has been detected
Twie_slave_ctrlb = &B00000011 'Send Address Ack
End If

If Twie_slave_status.7 = 1 Then 'Byte successful received
Rbyte = Twie_slave_data
End If

Return

Ob der Master lesen oder Schreiben will erfahre ich durch das DIR-Bit (TWIE_Slave_Status.1). Aber wie gehts dann weiter? Einfach nur die Daten auf den Bus schreiben funktioniert irgendwie nicht...

Wäre nett, wenn jemand sich dazu äußern würde.

Gruß
Chris