M16C- Key Input Interrupt

Gast #29427
Lesenswert?

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
Gast #29428
Lesenswert?

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
Gast #29429
Lesenswert?

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?
Gast #29431
Lesenswert?

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
Angehängte Dateien:
Gast #29432
Lesenswert?

/*
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
Gast #29434
Lesenswert?

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
Gast #29435
Lesenswert?

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
Gast #29436
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren