closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

Interrupt-Frage



Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1757
Registered: 03 / 2003
Private message
Subject: Interrupt-Frage  -  Posted: 20.12.2020 - 12:41   -  
Hallo Zusammen,

ich hätte da mal ne Frage bezüglich Hardware-Interrupts. Es heißt ja, daß der Code in einem IRQ möglichst kurz sein soll, aber leider ist "kurz" eine recht ungenaue Aussage. Konkret: Kann ich einen Touch-Controller via I²C in der Interrupt-Routine abfragen oder sollte ich das eher nicht machen?

Code

Import ...., PCIntD;

Define
  PCintDmask       = $08;                   { IRQ PINS --> PD3 / für Touch     }
  PCintDedge       = $08;                   { rising edge PortD,3              }

.....

Procedure PCIntD3;                               // externer Interrupt an D3
  Begin                                          // Touch betätigt
    Touch:=true;
    TLED:=1;
  End PCIntD3;

--- o d e r ---

Procedure PCIntD3;                               // externer Interrupt an D3
  Begin                                          // Touch betätigt
    TWIinpE(TWITouch,TouchRxData);
    Touch:=true;
    TLED:=1;
  End PCIntD3;


Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 20.12.2020 - 12:42 by Harry.
go down go up
golf offline
Benutzer
Avatar
Gender: male
Location: GERMANY  Donauwörth
Age: 67
Posts: 177
Registered: 11 / 2009
Private message
Subject: Re: Interrupt-Frage  -  Posted: 20.12.2020 - 13:24   -  
Hallo Harry,
ich kann Dir nicht sagen, was da noch sinnvoll möglich wäre in der Interruptroutine. Ich mache das einfach immer so, daß ich da immer nur ein Flag setzte (Touch:= true) und den Rest in der Hauptroutine.

if Touch= true then
Touch:= false;
TWIinpE....
TLed1:= true;
endif;

golf
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1757
Registered: 03 / 2003
Private message
Subject: Re: Interrupt-Frage  -  Posted: 20.12.2020 - 14:53   -  
Hallo Golf,

ich hab es mal getestet und es geht überhaupt nicht. Mein Prog hängt sich komplett auf, wenn ich die TWI-Abfrage im IRQ mache. Ok wieder was gelernt.

Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
Merlin offline
Schreiberling
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 925
Registered: 03 / 2005
Private message
Subject: Re: Interrupt-Frage  -  Posted: 20.12.2020 - 21:32   -  
I suspect TWI would not hang for soft SPI but hang with hardware SPI because hardware SPI generates an interrupt, and interrupts are suspended in an interrupt routine! But the flag approach suggested by golf is in any case better, although sometimes a counter is appropriate. 'Small' is of course imprecise but it is time to execute rather than size that is important. For that reason you should never try to execute any kind of comms within an interrupt routine.

Regards

Merlin
Merlin.

:magic:

Software is a black art.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1757
Registered: 03 / 2003
Private message
Subject: Re: Interrupt-Frage  -  Posted: 22.12.2020 - 11:31   -  
Hallo Zusammen,

sorry, aber ich muß noch mal Fragen, da das durch das Handbuch nicht eindeutig erklärt wird.

Ich verwende einen PinChangeInterrupt und dieser wird auch korrekt mit der steigenden Flanke ausgelöst, aber wie wird das Flag dafür gelöscht? Oder geschieht das durch die CallBack-Funktion automatisch?

Ich habe folgendes Problem: Der PCInt wird durch einen TouchController ausgelöst. Dieser löst aber zyklisch Interrupts aus, so lange ich den Touch gedrückt halte. Ich hätte gerne, daß der Interrupt nicht beachtet wird, so lange der Touch vom auslösenden Druck immer noch gedrückt ist.

Gruss
Harry

[Edit]Ok noch was: Im Handbuch steht
Code
PCintEmask = %00100001;     // only Pin0 and Pin5 used
PCintEedge = $FF;           // all rising edges

Sollte das nicht PCintEedge = $21; heißen, da ja eh nur 2 Eingänge verwendet werden?
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 22.12.2020 - 11:40 by Harry.
go down go up
Merlin offline
Schreiberling
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 925
Registered: 03 / 2005
Private message
Subject: Re: Interrupt-Frage  -  Posted: 22.12.2020 - 14:09   -  
Quote
Shouldn't that be PCintEedge = $ 21; mean, since only 2 inputs are used anyway?


It makes no difference. If you think about it $21 means use rising edges for these inputs and falling edges for the rest.
Merlin.

:magic:

Software is a black art.
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 20.01.2021 - 23:56