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