www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik M16C: Immer noch UART-Rec-Interrupt


Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Judge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fehlt noch folgendes:

#pragma INTERRUPT uart1recint

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#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.

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher M16C?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M16C62P, ganz genau der M30626FHPFP

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du das u1mr-Register gesetzt?

Autor: crazy horse (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.