Hallo leute ich versuche seit ein paar tagen zwei LPC2294 Boards von olimex über CAN Schnittstelle zu verbinden dabei sendet der erste Board ein CAN Nachricht und der zweit lässt bei enthalten der Nachricht die LED leuchten . Dafür habe ich ganz einfache Softwares „eins fürs senden der Nachricht und das andere fürs empfangen“ programmiert und je auf einen Board geflasht.Mit dem ersten board kann ich erfolgreich senden,das was ich im Ozilloskop eindeutig sehen kann, aber mit dem empfangen scheitert es. Obwohl ich die beiden LPC´s richtig verbunden habe, reagiert mein zweites Board nicht und die LED leuchtet nicht. --Das Sende Programm sieht so aus: #include "LPC22xx.H" int main(void) { VPBDIV = 0x00000001; //Set PClk to 60Mhz PINSEL1 |= 0x00010000; //Enable CAN2 RX C2MOD = 0x00000001; //Set CAN controller into reset C2BTR = 0x001C001D; //Set bit timing to 125k C2MOD = 0x00000000; //Release CAN controller while (1) { //See if Tx Buffer 1 is free C2TFI1 = 0x00040000; //Set DLC to 4 bytes C2TID1 = 0x00000022; //Set address to 2 Standard Frame C2TDA1 = 0x40000000; //Copy some data into first four bytes C2CMR = 0x00000001; //Transmit the message } } --Das Empfang programm habe so erstellt: void CANIRQ (void) _attribute_ ((interrupt("IRQ"))); int main(void) { VPBDIV = 0x00000001; //Set PClk to 60MHz IODIR1 = 0x00FF0000; // set all ports to output IODIR0 |= 0x40000000; PINSEL1|= 0x00040000; //Enable Pin 0.25 as CAN1 RX C1MOD = 0x00000001; //Set CAN controller into reset C1BTR = 0x001C001D; //Set bit timing to 125k C1IER =0x00000001; //Enable the Receive interrupt VICVectCntl0 = 0x0000003A; //select a priority slot for a given interrupt VICVectAddr0 = (unsigned) CANIRQ; //pass the address of the IRQ //into the VIC slot VICIntEnable = 0x04000000; //enable interrupt AFMR = 0x00000001; //Disable the Acceptance filters C1MOD = 0x00000000; //Release CAN controller If (C1DRA == 0x40000000){/* Nachricht 0x40000000 die gesendet wurde siehe sende programm wurde empfangen*/ IOSET0 = 0x40000000; //LED leuchtet } while(1){;} } void CANIRQ (void) { IOCLR1 = ~C1RDA; //clear output pins IOSET1 = C1RDA; //set output pins C1CMR = 0x00000004; //release the receive buffer VICVectAddr = 0x00000000; //Signal the end of interrupt } Bitte sagt mir was ich hier falsch mache vielen dank im voraus.
ich kenn mich nicht speziell mit dem lpc2294 nun aus, da ich mit dem LPC2129 unterwegs bin, aber vllt helfen dir die LPC2xxx CAN Examples http://www.keil.com/download/docs/291.asp Dort sind die Treiberfunktionen schon alle implementiert, ich musste sie aufgrund meiner Toolchain ein wenig anpassen (RapidiTTy Lite 1.51) aber sie funktionieren dumm vor sich hin. Vllt findest du in diesen Quellen Anreize für den eigenen Treiberbau bzw. findest den Haken in deinem Code. (Vllt hast du irgendein Register vergessen zu setzen?) VG --magnus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.