[STM32F105RB] Frage zu den CAN-Filtern, keine automatische Umschaltung zwischen Fifo0 und fifo1

OP #2479453
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren