Hallo, ich verwende einen M16C/6N0 (M306NaFGTFP). An die Ports P10.0 -P10.2 sind die Zeilen einer Matrix - Tastatur angeschlossen. Die Spalten sind an P0.0 - P0.2. Die 4. Zeile ist amn P10.5 angeschlossen, da dieser Port KI1 ist wollte ich den Key Input Interrupt nutzen. Ich habe die ungenutzten KI0,KI2,KI3 auf Output gesetzt. KUPIC = 0x03; hat ein entsprechendes Interruptlevel bekommen. Die internen Pull-ups der Ports habe ich nicht verwendet da die Zeilen über Wiederstände an 5Volt hängen. Per KUPIC_IR = 1; kann ich den Interrupt auch per Software auslösen, aber leider wird durch Tastendruck kein Interrupt generiert. Könnte das Problem, daran liegen, dass ich nur eine Spalte an KI geschaltet ist? (Ich habe natürlich die entsprechende Taste gedrückt die den Interrupt auslösen müßte) Vielleicht verwendet jemand ja die Key Input Interrupts und könnte mir die Schaltung und das bisschen Software zeigen . Vielen Dank Michael
Hi, beim M16C gibts es im "Funtion select register C" ein Bit PSC_7 für den "Key input interrupt disable bit" Ansonsten ist es egal, welcher /KIx low erhält. Jeder der vier löst den Interrupt aus, sofern er als Eingang definiert ist. Reiner
Danke für die schnelle Antwort, leider kann ich im Datenblatt (M16C / 6N0 / 6N1 Group) nichts zu diesem Register finden :-( (Aber ich suche weiter) Kann man unterscheiden, welcher KIx den Interrupt ausgelöst hat oder muß ich das anschließend "per Hand" überprüfen?
welcher es war wird nicht gespeichert, Du mußt dann die Leitungen abtasten. Das Register ist bei den alternate functions aufgeführt - kommt direkt nach den Portbeschreibungen. Reiner
Ich bin wirklich zu dumm das zu finden. Ich habe das pdf mal in den Anhang gepackt. Vielleicht habe ich ja auch das falsche Dokument. Ansonsten wäre ich unglaublich erleichtert, wenn du mir eine Seitenzahl nennen bzw. den kurzen Textabschnitt posten könntest Gruß Michael
/* If the direction register of any of P104 to P107 is set for input and a falling edge is input to that port, a key input interrupt is generated. */ Sagt eingentlich aus das es bei Dir gehen müste. Der M16C6N hat dieses "Funtion select register C" nicht (bin ich von ausgegangen, da der M16C80 den hat). Tut mir leid wenn Du da nun tagelang nach gegraben hast. Zusammenfassend: A Du hast den Interruptvektor gesetzt B Du hast den Interruptlevel angegeben KUPIC=0x0B (level 3, interrupt ein) C Du hast eine neg. Flanke an /KI1 Pin P10_1 und trotzdem löst kein Interrupt aus Bist Du sicher das Du wirklich den P10_1 wirklich als Eingang(Bedingung D) definiert hast? Wenn A..D erfüllt sind, löst der Interrupt aus Reiner
Hi hast du auch im Startup-File des Compilers den INT-Vector entsprechend umgebogen? Matthias
Hi Matthias, guter Tipp. Habe ich nämlich nicht gemacht. Aber auch bei UART (Interrupt 16,17,18,19) habe ich das nicht gemacht und die funktionieren trotzdem. Mit welchem C-Compiler arbeitest du? Dein MPlay hat sicher schon eine ziemliche Codegröße. Gruß GLH
Hi mit dem NC30. Ob man die Vektoren bei anderen Compilern auch anpassen muß weiß ich nicht. Beim NC30 muß man das aber in jedem Fall in der Datei sect30.inc Dort enthält der Vektor sonst nur einen Verweiß auf dummy_int und dieser enthält nur ein reit. Matthias
Hallo Matthias, danke für die Infos. Ich nutze den Tasking M16C Compiler, der bei dem Glyn Demoboard dabei ist. Die sect30.inc Datei gibt es da auch und darin ist der key_interrupt und alle Uart-Interrupts umgebogen. Ich probiere noch ein wenig rum ,aber werde wohl ohne Interrupt auskommen. Gruß GLH PS: Deine Ansteuerung eines SED1335 klingt sehr interessant, da ich hier ein 160x160 Display mit SED1330 rumliegen habe, dass auch noch angesteuert werden will.
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.