Also zum Unterbrechen einer Übertragung schreibt das Datenblatt:
3.6 Aborting Transmission
The MCU can request to abort a message in a specific
message buffer by clearing the associated
TXBnCTRL.TXREQ bit.
In addition, all pending messages can be requested to
be aborted by setting the CANCTRL.ABAT bit. This bit
MUST be reset (typically after the TXREQ bits have
been verified to be cleared) to continue transmitting
messages. The CANCTRL.ABTF flag will only be set if
the abort was requested via the CANCTRL.ABAT bit.
Aborting a message by resetting the TXREQ bit does
NOT cause the ABTF bit to be set.
also, um alle Übertragungen zu unterbrechen
erstmal TXREQ auf 0 setzen, anschließend
den ABAT bit auch auf 1 schreiben.
Um wieder zu senden dann wieder den ABAT auf
0 setzen.
Das sollte es schon gewesen sein.
edit:
Eine weitere Schwäche des Codes ist dann noch hier:
Mcpempfang:
Print "Empfangen"
Mcp2515_read_register Canintf 'Spi_rx_status
Canstat = Canin
Print "CANINTF: " ; Canstat
If Canstat.0 = 1 Then Gosub Mcp_read_buffer0
If Canstat.1 = 1 Then Gosub Mcp_read_buffer1
Return
Es wird als Intquelle nur der Buffer0 und der Buffer1 ausgewertet,
wenn ein Fehler auftritt wird der glatt ignoriert.
Kann zwar gut gehen, aber bei größeren Projekten wirds dann
bei debuggen schon "interessant"
ich schlage folgende Ergänzug vor:
if Canstat.7 = 1 then
print "MERRF-Error"
endif
if Canstat.5 = 1 then
print "ERRIF-Error"
endif
sinnvoll währ dann klaro auch die Ints zu enablen:
Mcp2515_write_register Caninte , &B10100011
Dann hat der Code noch n kleines Problemchen.
Hier wird zwar:
'Device zurück in den normalen Modus versetzen
Mcp2515_bitmodify Canctrl , &B11100000 , &B00000000
aber in den Modify-Modus wird der Canctrl zu Anfang nicht gebracht:
Mcp2515_bitmodify Canctrl , &B11100000 , &B10000000 ' = Set Configuration mode
Ausserdem hat man in diesem Register auch den OSM auf Bit 3,
wenn man den aktiviert wird jede Message nur einmal gesendet, also dann:
'Device zurück in den normalen Modus versetzen
Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000
PS:
>Wenn ich mich in jedes Programm so tief rein hängen müsste, könnte ich es auch gleich bleiben lassen.
Nein, Du sparst Zeit, indem Du Dich selbst in den Code einarbeitest, weil Du dann kapiert hast was läuft und dies in anderen Projekten dann übertragen kannst. Du hast ergo was gelernt.
Lesezeichen