Forum: Mikrocontroller und Digitale Elektronik M16C- Key Input Interrupt


von Michael Martin (Gast)


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

von Reiner (Gast)


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

von Michael Martin (Gast)


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?

von Reiner (Gast)


Lesenswert?

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

von Michael Martin (Gast)


Angehängte Dateien:

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

von Reiner (Gast)


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

von Matthias (Gast)


Lesenswert?

Hi

hast du auch im Startup-File des Compilers den INT-Vector entsprechend 
umgebogen?

Matthias

von Michael Martin (Gast)


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

von Matthias (Gast)


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

von Michael Martin (Gast)


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.

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
Noch kein Account? Hier anmelden.