www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik lpc2294 CAN receive problem


Autor: idu79 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.