AT90can128 - UART Interrupt + CAN

Gast #1677267
Lesenswert?
• ▲
▼
Ich habe einen AT90can128 und will ein rs232 signal auf can bus 
ausgeben...
Nun habe ich Peter Fleurys Uart library verwendet um die uart per 
interrupt einzulesen...
Nun habe ich folgendes Problem: Der Interrupt zerhackt die CAN Messages, 
immer dann wenn während dem CAN Senden gerade ein Zeichen eintrift...

So sieht die CAN Sende Funktion aus:
1
void send_std_can_msg(unsigned int std_id, unsigned char std_dlc, unsigned char * buffer)
2
{
3
  st_cmd_t msg;     // message descriptor store in code area
4

5
  msg.pt_data = &buffer[0];
6
  
7
  msg.status = 0;
8
  msg.handle = 0;
9
   
10

11
     msg.ctrl.ide = 0;   //-- CAN 2.0A
12
        msg.dlc = std_dlc;        //-- Max
13
        msg.id.std = std_id;
14
        msg.cmd = CMD_TX_DATA;
15

16
        while(can_cmd(&msg) != CAN_CMD_ACCEPTED);
17
    while(can_get_status(&msg) == CAN_STATUS_NOT_COMPLETED);
18
    
19
  
20
}

Muss ich das Schreiben der CAN-Register atomar machen? Wenn ich beim 
ganzen CAN Sende prozess die interrupts deaktiviere, dann verpass ich 
doch die eintreffenden Zeichen per UART...
Gast #2064031
Lesenswert?
• ▲
▼
Hi,
was würde denn passieren, wenn du den Status undefiniert hast. In der 
can_lib.c wird den Status vom (cmd->status==MOB_PENDING) abgefragt, ein 
undefinierter status wie z.B.:
1
 st_cmd_t msg;     // message descriptor store in code area
2
 msg.pt_data = &buffer[0]; 
3
// msg.status = 0;
4
 msg.handle = 0;
5
 msg.ctrl.ide = 0;   //-- CAN 2.0A
6
 msg.dlc = std_dlc;        //-- Max
7
 msg.id.std = std_id;
8
 msg.cmd = CMD_TX_DATA;

macht die Abfrage in der Luft, trotzdem habe ich ohne (msg.status = 0;) 
Daten auf dem CAN senden können. Erklärung?

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.