Hallo,
arbeite seit kurzem mit dem Lm3S9B96 und bin dabei den CAN in betrieb zu
nehmen. Soweit funktioniert es ja. Kurz zur Info: Ich send eüber einen
CAnalyzer CANIDs und daten und empfange die mit dem LM3S9B96, der
wiederum sendet die über CAN empfangenen Daten über das EPI Bus an das
Ram im FPGA.
Ich sende 5 IDs: 0x200-0x204. Nur für die ID 0x200 funktioniert
einwandfrei alles, datenw erden ins Ram sgeschrieben. So sjetzzt kommst,
für alle anderen IDs wird im FPGA nichts reingeschrieben, das komische
dabei ist, das wenn ich mit einem LogicAnalyzer das EPI Bus welches mit
dem FPGA angeschlossen ist untersuche, dann liegen die Adressen und
Daten richtig an, nur es wird nichts im FPGA geschrieben. So hab mir
gedacht, gut da stimmt was mit dem write nicht. obwohl das ALE bit und
write bit gesetzt werden.
Nun was ich gefunden habe ist, dass vielleicht meine IDMASK nicht
richtig ist. weis leider auch nicht genau wie ich Sie bestimme.
Hi,
na einen Teil der Voruntersuchungen hast du ja schon erledigt.
Wenn ich dich richtig verstehe dann gehen die Daten die du über CAN
bekommst, und zwar alle IDs an den FPGA. Somit bekommt der
CAN-Controller alle Daten und filtert diese nicht raus. Sonst würden die
gefilterten Daten nicht an deinen FPGA gesendet.
Somit liegt das Problem doch in der Kommunikation zwischen
CAN-Controller und FPGA.
Gruß,
Schorschi.
Danke für deine Antwort,
Hab leider nicht ganz verstanden was du meinst.
Also Di Daten von CAN werden auf dem EPI BUS gesetzt, welchres wiederumg
mit den PINS vom FPGA angeschlossen ist.
Wie gesagt, bei der CANID 0x200 funktioniert es einwandfrei, nur bei den
anderen IDS nicht,
wie genau filtere ich denn nun die IDS, das wollte ich ja wissen, wie
muss mein IDMAsk denn definiert sein.
Wie ich es gemacht habe ist es falsch?
Danke.
So sieht meine Main loop aus, wenn der CanIntHandler durchgelaufen ist
und das entsprechende Flag für die bestimmte ID gesetzt hat, werden die
Daten über dasd EPI gesendet
1
if(g_bRXFlag1)
2
{
3
//
4
// Reuse the same message object that was used earlier to configure
5
// the CAN for receiving messages. A buffer for storing the
6
// received data must also be provided, so set the buffer pointer
7
// within the message object.
8
//
9
sCANMessage.pucMsgData=ucMsgData;
10
11
//
12
// Read the message from the CAN. Message object number 1 is used
13
// (which is not the same thing as CAN ID). The interrupt clearing
14
// flag is not set because this interrupt was already cleared in
wenn ich das richtig verstehe holst du dir mit
CANMessageGet(CAN0_BASE, 1, &sCANMessage, 0);
nur die gespeicherten Nachrichten mit objektnummer 1 ab (= 200) musst du
nicht auch die restlichen lesen ( und dann verspeichern)?
Hallo Danke für die Antwort.
Also weiterhin habe ich doch für ein 2tes Objekt wieder die Funktion
aufgerufen:
CANMessageSet(CAN0_BASE, 2, &sCANMessage, MSG_OBJ_TYPE_RX);
diesmal halt soll dies in Objekt 2 abgelegt werden, und die gspeicherte
Message vom Objekt 1 wird von dem Inhalt von Objekt 2 überschrieben.
Hast du das Beispiel aus dem UserGuide schon durch?
http://www.ti.com/lit/ug/spmu019o/spmu019o.pdf
Kapitel 5 Seite 45
Dann ist mir noch aufgefallen dass du die Message 0x200 2x definierst.
und beim Überfliegen der Userguides ist mir noch diese Zeile Kommentar
aufgefallen:
// Last message object does not have the MSG_OBJ_FIFO set to indicate
that
// this is the last message.
Ich arbeite mich auch gerade in die CAN / CANopen Welt ein.
Ich fand dieses E-Learning angebot noch informativ.
https://www.vector.com/vl_can_introduction_de.html
Registrierung ist pflicht, jedoch kostenlos.
Aber gibt dir einen guten Überblick was da eigentlich so abläuft.
Inklusive seten der Masken.
Gruss codehamster
Danke für deine Antwort,
Hab das Beispiel schon gelesen, hab soweit das mit der ISMask
verstanden, habs ausgeschaltet brauche die nicht, will ja kein
explizites Message empfangen, unter mehreren IDs, hab ja festdefinierte
IDs.
was heist das:
// Last message object does not have the MSG_OBJ_FIFO set to indicate
that
// this is the last message.
hab doch kein FIFO.
Brauchst du nicht wenn du nicht mehr als 8 Byte Daten in deiner Message
hast.
bist du inzwischen weiter gekommen?
Ich habe nochmal den ganzen Thread gelesen und mir ist nicht mehr klar
wo dein Problem jetzt eigentlich liegt.
Masken hast du korrekt gesetzt. Wenn du mit "festen" ID's arbeitest.
Erklär doch nochmal was jetzt nicht funktioniert. Aus dem bisherigen
schliesse ich mich eigentlich der Meinung von Schorschi an.
> Somit liegt das Problem doch in der Kommunikation zwischen> CAN-Controller und FPGA.