Vielen Dank für den Tip.
Ich habe nun folgenden Code ausprobiert:
1 | USART_SMBASIC.CTRLB=(USART_SMBASIC.CTRLB&(~(USART_RXEN_bm|USART_TXEN_bm)))|USART_TXEN_bm; //Auf Senden schalten
|
2 | send_string(":1F03000A000194",2,true); //String senden
|
3 | while(!((USART_SMBASIC.STATUS) & (USART_TXCIF_bm))){} //Auf Abschluss des Sendevorgangs warten
|
4 | (USART_SMBASIC.STATUS) &= (~(USART_TXCIF_bm)); //Transmit Complete Interrupt Flag manuell zurücksetzen
|
5 | USART_SMBASIC.CTRLB=(USART_SMBASIC.CTRLB&(~(USART_RXEN_bm|USART_TXEN_bm)))|USART_RXEN_bm; //Auf Empfangen schalten
|
Auffälligkeiten während des debuggen:
Zeile1: Im CTRLB wird erfolgreich TXEN gesetzt und RXEN deaktiviert ->
OK
Zeile2: String wird gesendet -> OK
Zeile3: Es wird tatsächlich gewartet bis Senden abgeschlossen ist -> OK
Zeile4: Das TXCIF-Bit wird nicht auf 0 gesetzt. Warum nicht kann ich mir
nicht erklären -> NICHT OK!
Zeile5: Im CTRLB wird erfolgreich RXEN gesetzt und TXEN deaktiviert ->
OK
Vom Sensor erhalte ich leider immernoch keine Antwort. Das größte
Problem, welches ich gerade habe, ist warum ich das Statusregister der
USART nicht beschreiben kann (siehe Zeile4). Ich habe auch schon sowas
versucht:
1 | USART_SMBASIC.STATUS = 0x20; // Register manuell auf 0b00100000 setzen
|
Leider funktiert nicht einmal das. Während des Debugen wird dieser Wert
nicht übernommen... Weiß der Fuchs warum nicht!
Habt ihr noch weitere Tipps für mich, wie ich das Statusregister
beschreiben kann, ob ich oben im Code noch einen Fehler habe, etc...
Wäre superdankbar!
Schönen Abend noch. Es grüßt
Der Matze
P.S.: Bei Bedarf darf das gerne ins GCC-Forum verschoben werden. Ist mir
gerade erst aufgefallen.