Hi,
ich habe jetzt mal eine SPI Kommunikation zwischen zwei Mega32 aufgebaut. Allerdings bin ich nicht ganz zufrieden: Mein Master überträgt 4 bytes zum Slave. Nur scheint dadurch der Slave total ausgelastet zu sein. Das liegt wohl daran dass ich ein "on SPI" interrupt verwende, aber wie komme ich ohne den aus..?

Hier der Code vom Master:
Code:
'MASTER
'===CHIP SETTINGS===
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32              
$hwstack = 32              
$crystal = 16000000
$baud = 19200

'SPI
Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4

'SPI
Dim A(4) As Byte
Enable Interrupts
Spiinit

'Main Loop soll nur die 4 Bytes verändern
Do
  If A(1) < 200 Then
    Incr A(1)
  Else
    A(1) = 16
  End If

  If A(2) < 250 Then
    Incr A(2)
  Else
    A(2) = 0
  End If

  If A(3) > 1 Then
    Decr A(3)
  Else
    A(3) = 233
  End If

  If A(4) > 60 Then
    Decr A(4)
  Else
    A(4) = 160
  End If

  Spiout A(1) , 4
  Waitms 3                     '300Hz transfer von 4 bytes ist das ziel
Loop
Der code vom Slave:
Code:
'===CHIP SETTINGS===
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32                                    
$hwstack = 32                                    
$crystal = 16000000
$baud = 19200

'SPI
Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = No , Polarity = High , Phase = 1 , Clockrate = 4
Dim A(4) As Byte

Enable Interrupts
On Spi Wasempfangen
Enable Spi
Spiinit

Do
Toggle Led_gelb
Waitms 3                   'wenn die led regelmäßig hell ist -> µC läuft ungestört. Ist aber nicht so
Loop

'SPI
Wasempfangen:
Spiin A(1) , 4
Toggle Led_rot            'diese flackert auch sehr unregelmäßig
Return
Alle Leitungen (MOSI, MISO, SCK, SS) sind direkt 1:1 verbunden. Hatte es zwar erst aus "Sicherheitsgründen" mit 10k Widerständen versucht aber da ging gar nix.

Hat jemand einen Tipp wie ich ohne Interrupts auskomme? Ich dachte mein Haupt-µC soll der Slave sein, da er dann kein SCK erzeugen muss. Ist das sinnvoll? Wie könnte überhaupt ein Master Daten vom Slave empfangen?

Was auch ein bisschen nervt: Zum programmieren (über die ISP Schnittstelle) muss ich jedes mal die SPI Verbindung Master/Slave trennen, sonst werden die µC's nicht erkannt. Gibts da vielleicht nen Trick?

Vielen Dank für eure Hilfe!