sect30.inc: .glb _uart1recint .lword _uart1recint ; uart1 receive(for user)(vector 20) init: //ConfigUart1(); u1brg = (CLOCK/ 16/ BAUD1) - 1; s1ric=0x05; //UART1 rec Int Prio 5 asm( "\tFSET I"); /* Enable interrupt */ Interrupt: void far uart1recint(void) {unsigned char data; LedOff(11); //Test LED data=u1rbl; //read UDR rx_buffer[rx_wr_index]=data; if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) {rx_counter=0; }; return; } Hab ich was vergessen? Interrupt kommt nie, getchar() aber funktioniert. Muss das ganze aber auf Interruptbetrieb umstellen. Irgendwelche Ideen?
#pragma INTERRUPT ta0int /* Declares interrupt handler TA0 */ #pragma INTERRUPT ta1int /* Declares interrupt handler TA1 */ #pragma INTERRUPT uart1recint //interrupt handler UART1 receive #pragma INTERRUPT int0 /* Declares interrupt handler INT0 */ #pragma INTERRUPT int1 /* Declares interrupt handler INT1 */ ne, leider, das ist schon drin.
Bitte um etwas Nachsicht, ist mein erstes Projekt mit einem M16. Komischerweise wird die Funktion gar nicht als Interruptfunktion vom Compiler (NC30) eingetütet?? Siehe snapshot.
u1mr: explizit ich nicht, aber das wurde vom Compiler erledigt. putchar/getchar funktioniert ja, aber eben nur im polling. Beim Senden kann ich damit prima leben, aber nicht beim Empfang. Ich will einfach nur die ankommenden Bytes in einen Buffer schreiben und mit alternate_getchar von dort lesen. Gibts eigentlich einen Simulator für die Teile? Der KD30 nützt mir in diesem Fall wenig, da er unbedingt mit UART1 arbeiten will.
Kommando zurück, ist doch eine Interrupt-Funktion. Hatte wohl ein altes File in den STK-Viewer geladen. Und beim Versuch: uart1recint(); meckert der Compiler erwartungsgemäss: Error, interrupt function called. Es gibt eigentlich nur 2 Möglichkeiten: -entweder ist der Interrupt nicht freigegeben, aber das müsste mit s1ric=0x05; erledigt sein. -oder der Interruptvektor stimmt nicht, das habe ich 10mal überprüft. ratlos :-)
> Gibts eigentlich einen Simulator für die Teile?
Es gibt ein Monitor, der ins Flash geschrieben werden kann. Damit kannst
du ohne weitere Hardware dein M16C debuggen. Die Monitor-Programme gibt
es auch für die anderen Schnittstellen.
Ich habe meine Interruptroutinen noch nie mir einem "return" beendet,
man kann ja eh keine Parameter zurück geben. Das wird aber nicht das
Problem sein. Setzt mal trotzdem das m1mr-Register selber. Sicher ist
sicher :-) .
Überprüfe nochmal, ob deine sect30.inc wirklich richtig ist, nicht das
du aus Versehen eine Zeile gelöscht hast und dadurch sind nie Vectoren
verschoben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.