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
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