Forum: Mikrocontroller und Digitale Elektronik [STM32F105RB] Frage zu den CAN-Filtern, keine automatische Umschaltung zwischen Fifo0 und fifo1


von Andreas W. (geier99)


Lesenswert?

Hallo alle,

ich steige gerade in die Programmierrung von einem STM32F105RB Prozessor 
ein und habe eine Frage zu den CAN Fifos.

Ich habe jetzt zwei Filter definiert (alle ID's zulassen) und weise die 
Filter einmal dem Fifo0 und Fifo1 zu. Nun hatte ich gedacht, wenn der 
Fifo0 voll ist, wird der Fifo1 automatisch beschrieben, dies ist leider 
nicht so. Gib es bei der Konfiguration ein Bit, mit dem man sagt, dass 
bei vollem Fifo automatisch der andere verwendet wird. Oder muss man den 
vollen Fifo mit einem Fifo-Full ISR abfangen und dann dann den Filter 
händisch umkonfigurieren?.

und hier mein Code-Schnipsel von der Filterinitialsierung:
1
   if(pSetupFilter) {
2
    /* CAN filter init */
3
    pSetupFilter->CAN_FilterNumber=0;
4
    pSetupFilter->CAN_FilterMode=CAN_FilterMode_IdMask;
5
    pSetupFilter->CAN_FilterScale=CAN_FilterScale_32bit;
6
    pSetupFilter->CAN_FilterIdHigh=0x0000;
7
    pSetupFilter->CAN_FilterIdLow=0x0000;
8
    pSetupFilter->CAN_FilterMaskIdHigh=0x0000;
9
    pSetupFilter->CAN_FilterMaskIdLow=0x0000;
10
    pSetupFilter->CAN_FilterFIFOAssignment=0;
11
    pSetupFilter->CAN_FilterActivation=ENABLE;
12
    
13
    if (CANx == CAN1) {
14
      pSetupFilter->CAN_FilterFIFOAssignment = 0;
15
      pSetupFilter->CAN_FilterNumber = 0;
16
      CAN_FilterInit(pSetupFilter);
17
18
      pSetupFilter->CAN_FilterNumber = 1;                     // dieser eintrag scheint nicht zu wirken, keine automatische Umschaltung auf Fifo1 wenn der Fifo0 voll ist
19
      pSetupFilter->CAN_FilterFIFOAssignment = 1;
20
      CAN_FilterInit(pSetupFilter);
21
    }
22
    else {
23
      // CAN2 filter init
24
      CAN_SlaveStartBank(14);
25
      pSetupFilter->CAN_FilterNumber = 14;
26
      pSetupFilter->CAN_FilterFIFOAssignment = 0;
27
      CAN_FilterInit(pSetupFilter);
28
29
      pSetupFilter->CAN_FilterNumber = 15;
30
      pSetupFilter->CAN_FilterFIFOAssignment = 1;
31
      CAN_FilterInit(pSetupFilter);
32
    }
33
   } // end pSetupFilter
34
}

Gruss
  Andi
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
Noch kein Account? Hier anmelden.