Bitvergleich

Gast #4140496
Lesenswert?
• ▲
▼
Hi, ich möchte eine funktion schreiben um die Register für Maske und 
Filter beim CAN zu beschreiben.
1
void CAN1_SetMask(unsigned int mask_no, unsigned int ID_structure)
2
{
3
        unsigned int CAN1_RxSID  = (ID_structure &= 0x1FFC0000) >> 16;
4
        unsigned int CAN1_RxEIDH = (ID_structure &= 0x0003FFC0) << 2;
5
        unsigned int CAN1_RxEIDL = (ID_structure &= 0x000000FF) << 10;  
6
        
7
        switch(mask_no)
8
        {
9
            case 0:
10
                C1RXM0SIDbits.MIDE = 1;
11
                C1RXM0SID = (C1RXM0SID |= CAN1_RxSID);
12
                C1RXM0EIDH = CAN1_RxEIDH;     
13
                C1RXM0EIDL = CAN1_RxEIDL;          
14
                break;
15
...
Zum Testen rufe ich die Funktion mit
1
CAN1_SetMask(0,0xFF00);
auf.
durch den Simulator kann ich mir die Register angucken. Dabei habe ich 
gesehen, dass durch die Zeile
1
unsigned int CAN1_RxEIDH = (ID_structure &= 0x0003FFC0) << 2;
0x000 raus kommt. Aber eigentlich sollte da meiner Meinung nach 0x3FC00 
raus kommen.
0xFF00 & 0x3FFC0 -> 0xFF00
0xFF00 << 2 -> 3FC00

oder habe ich da einen Denkfehler drinne?

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