Hallo zusammen, ich bin auf der Suche nach einem Beispielprogramm für CAN-Interrupt (GNU). ich benutze das EVAL-Board von OLIMEX-SAM7-EX256, als Entwicklungsumgebung benutze ich auch (Eclipse, Yagarto, Open-OCD). Ich versuche die CAN-Schnittstelle zu betreiben. Das Senden funktioniert super. Beim Empfangen siehe ich Daten auf der Leitung aber die Interrupt wird nicht ausgelöst. Danke im Voraus
Hallo gerhard, Vielen Dank erstma;-) Anbei mein Init_Code. Kannst du mir bitte sagen was ich hier falsch mache. Danke im Voraus void can_protocol_init() { //enable Pins AT91C_BASE_PIOA->PIO_ASR = AT91C_PA19_CANRX|AT91C_PA20_CANTX; AT91C_BASE_PIOA->PIO_PDR = AT91C_PA19_CANRX|AT91C_PA20_CANTX; //enable Clock AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_CAN; //init AIC-CAN AT91C_BASE_AIC->AIC_IDCR = 1 << AT91C_ID_CAN; //set baudrate AT91C_BASE_CAN->CAN_BR = CAN_BR_250K; // //enable WAKEUP Int // AT91C_BASE_CAN->CAN_IER = AT91C_CAN_WAKEUP; //disable Reception Mailbox 0-7 interrupt //AT91C_BASE_CAN->CAN_IDR = AT91C_CAN_MB1; //| AT91C_CAN_MB1 | AT91C_CAN_MB2 | AT91C_CAN_MB3 //| AT91C_CAN_MB4 | AT91C_CAN_MB5 | AT91C_CAN_MB6 | AT91C_CAN_MB7; AT91C_BASE_AIC->AIC_SMR[AT91C_ID_CAN] = 0x7; //set prior AT91C_BASE_AIC->AIC_SVR[AT91C_ID_CAN] = (unsigned int) can_interrupt_handler; AT91C_BASE_AIC->AIC_ICCR = 1 << AT91C_ID_CAN; // Clear Interrupt AT91C_BASE_CAN->CAN_IER = AT91C_CAN_WAKEUP; AT91C_BASE_AIC->AIC_IECR = 1 << AT91C_ID_CAN; //Enable Interrupt //enable WAKEUP Int //Configure MB1 for reception AT91C_BASE_CAN_MB1->CAN_MB_MMR = AT91C_CAN_MOT_RXOVERWRITE; AT91C_BASE_CAN_MB1->CAN_MB_MAM = 0x000 << 18; //reset acceptance AT91C_BASE_CAN_MB1->CAN_MB_MID = 0x000 << 18; //reset filter AT91C_BASE_CAN->CAN_IER = AT91C_CAN_MB1 ;//| AT91C_CAN_MB2 | AT91C_CAN_MB3 | AT91C_CAN_MB4 | AT91C_CAN_MB5; // Clear and trigger Transfer AT91C_BASE_CAN->CAN_TCR = AT91C_CAN_MB1;// | AT91C_CAN_MB2 | AT91C_CAN_MB3 | AT91C_CAN_MB4 | AT91C_CAN_MB5;; AT91C_BASE_CAN->CAN_MB1.CAN_MB_MCR = AT91C_CAN_MTCR; AT91C_BASE_CAN->CAN_MR = AT91C_CAN_CANEN; //
hallo gast, ich kann dir bei deinem problem leide rnicht helfen da ich das can-interface noch nie benutzt habe. Ich würde mir mal das beispiel ansehen, da sollte die initialisierung entsprechend codiert sein. gruss gerhard
Hallo Gerhard, das ist ja ein Beispiel für den internen Transfer. Ich bekomme meine Daten von einer Labview Oberfläsche. Die Daten kann ich mit dem Oszillator sehen. Ich weiß nicht warum die Interrupt sich nicht auslöst. Gruß Moris
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.