Interrupt AT91SAM7x

Gast #3019325
Lesenswert?
• ▲
▼
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
Gast #3019407
Lesenswert?
• ▲
▼
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; //
Gast #3019484
Lesenswert?
• ▲
▼
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
Gast #3019759
Lesenswert?
• ▲
▼
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.