Stefan Wagner schrieb:
> Bend Guet schrieb:
>> ich möchte ein 16 bit HW register auslesen
>
> Bei Zugriffen auf Statusregister etc. muss man immer im Datenblatt
> prüfen, ob ein Lesezugriff Werte verändert (z.B. Flags löscht).
>
> In deinem Codebeispiel wird der Wert des TEC beim ersten Lesen
> "weggeworfen". Löscht der Lesezugriff die Bits, bekommst du beim zweiten
> Lesezugriff einen falschen Wert.
>
> Im Zweifelsfall das komplette Register erst zwischenspeichern und dann
> aufteilen.
>
>
1 | > uint16_t temp;
|
2 | > uint8_t Rx_EC, Tx_EC;
|
3 | >
|
4 | > temp = CAN_NECNTxL; // Register nur EINMAL lesen
|
5 | >
|
6 | > Rx_EC = tmp & 0xFF; // Rx error count im low byte
|
7 | > Tx_EC = tmp >> 8; // Tx error count im high byte
|
8 | >
|
>
> Grüße
>
> Stefan
Hi Stefan Wagner,
vielen Dank Deine Antwort hat mir sehr geholfen zum ziel zu kommen.
Grüße
Bend