Hallo zusammen,
ich habe folgendes Problem: Ich möchte Daten von einem seriellen Bus
lesen, allerdings springt er nie wieder in den Receive-Interrupt, sobald
ich das Receive-Register auslese. Lese ich das Receive-Register nicht
aus sondern setze manuell den Interrupt-Flag zurück (nichts anderes
macht laut Datenblatt auch der uController!), kriege ich pro empfangenem
Zeichen eine CAN-Nachricht.
Ich habe versucht den Quelltext auf die folgenden Zeilen zu kürzen:
Geht (Verifizierung über CAN):
1 | // RCIF: Receive-Interrupt, RCIE: Reveice-Enable
|
2 | if(PIR1bits.RCIF==1 && PIE1bits.RCIE==1)
|
3 | {
|
4 | PIR1bits.RCIF=0;
|
5 | CANSendMessage(...);
|
6 | }
|
Geht nicht, er geht nur einmal rein, dann nie wieder:
1 | // RCIF: Receive-Interrupt, RCIE: Reveice-Enable
|
2 | if(PIR1bits.RCIF==1 && PIE1bits.RCIE==1)
|
3 | {
|
4 | answer[answer_counter]=RCREG;
|
5 | CANSendMessage(...);
|
6 | }
|
Ich weiß nicht mehr weiter. Saß da jetzt 6 Stunden dran, verrückt macht
mich vor allem dass exakt der gleiche Quelltext auf einer anderen
Platine mit dem logischen gleichen Aufbau und der gleichen Bestückung
lief.
Das eine empfangene Zeichen beim Auslesen von RCREG ist übrigens
plausibel, über das Oszi sieht auch alles gut aus, Senden klappt auch
hervorragend.
Würde mich freuen wenn ihr weiter weißt. :-)
Grüße vom Bodensee,
Daniel