Jump to content

Jakki

Members
  • Content Count

    6
  • Joined

  • Last visited

About Jakki

  • Rank
    Noob Class

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I experienced something different: Looking at my code example above, when myISR is executed and during that time "espPin" is pressed (which is attached to myISR2), then myISR2 is executed after the execution of "myISR" is finished. That is the reason why I wanted to use "detach" and "attach" in "myISR". I need to do this because in "myISR" I also need to listen to both switches "switchPin" and "espPin".
  2. Thank you for your replies!! I think you meant "on" instead of "off" right? For now I could successfully work around my issue with flags and I would like to proceed with the other components of my project. But when I have more time I will consider to integrate your solution into my Energia Code. Thanks again!! Jakob
  3. volatile int ledPin = 18; volatile int espPin = 2; volatile int switchPin = 3; void ToggleFast(volatile int pinu) { volatile unsigned long n = 100000; digitalWrite(pinu,HIGH); do{n--;} while(n>0); digitalWrite(pinu,LOW); n = 100000; do{n--;} while(n>0); digitalWrite(pinu,HIGH); n = 100000; do{n--;} while(n>0); digitalWrite(pinu,LOW); n = 100000; do{n--;} while(n>0); } void setup() { pinMode(ledPin, OUTPUT); attachInterrupt(switchPin, myISR, FALLING); attachInterrupt(espPin, myISR2, RISING); } void loop() { //toggle slow digitalWrite(ledPin, LOW); delay(400); digitalWrite(ledPin, HIGH); delay(400); } void myISR() { detachInterrupt(espPin); //ToggleFast(ledPin); //see description below attachInterrupt(espPin, myISR2, RISING); } void myISR2() { ToggleFast(ledPin); ToggleFast(ledPin); ToggleFast(ledPin); } There is two "issues": 1. When I enter "myISR()" it takes about two seconds until the call of "attachInterrupt(espPin, myISR2, RISING)" is finished. 2. When I uncomment "ToggleFast(ledPin)" in "myISR" the program hangs for about 8-10 seconds while toggling the ledPin, when myISR is entered and the call to ToggleFast(ledPin) is executed. However, this call should not even take 1 second or so. And that is the case when I comment out "attachInterrupt(espPin, myISR2, RISING)". "switchPin" is externally configured with a pullup resistor and "espPin" is externally configured with a pulldown resistor.
  4. MSP Launchpad Exp430G2 with Exp430G2553 Rev 1.5 Energia 1.6.10E18 MacOS Sierra 10.12.6 Hello friends, When I call attachInterrupt at the end of a service Routine after I detached it from a pin, I find that it takes a long time for that call to finish (two seconds). Do you have any hint how I can make that faster? Thanks
  5. Found the Issue: deataching and reattaching only seems to work on P1_0 - P1_6. https://github.com/energia/msp432-core/issues/12 But I find that reattaching with "attach" takes a very long time That's not so cool. Any advice on how to get than done faster?
  6. MSP Launchpad Exp430G2 with Exp430G2553 Rev 1.5 Energia 1.6.10E18 MacOS Sierra 10.12.6 Hello friends, Is it possible to use the functions "attachInterrupt" or "Interrupts" inside an Interrupt Service Routine? For me, it doesn't seem to work. I made a little example: I have to pins with momentary switches attached to them. One is externally configured with a PullUp-Resistor, and the other is externally configured with a PullDown-Resistor. Both switches should be attached to another ISR. But I need to turn off the ISR that is not used, if one ISR is entered, because in both ISR's I need to listen for both switches. I can successfully detach the remaining ISR from the other pin when I enter one ISR, but when I try to re-attach it to the other pin at the end of the ISR with attachInterrupt oder with the combination "noInterrupts" and "interrupts" , the program crashes or stops for at least 3 seconds. volatile int switchPin = P2_3; volatile int espPin = P2_6; volatile int ledPin = P2_7; void ToggleFast(volatile int pinu) { volatile unsigned long n = 100000; digitalWrite(pinu,HIGH); do{n--;} while(n>0); digitalWrite(pinu,LOW); n = 100000; do{n--;} while(n>0); digitalWrite(pinu,HIGH); n = 100000; do{n--;} while(n>0); digitalWrite(pinu,LOW); n = 100000; do{n--;} while(n>0); } void setup() { pinMode(ledPin, OUTPUT); attachInterrupt(switchPin, myISR, FALLING); attachInterrupt(espPin, myISR2, RISING); } void loop() { //toggle slow digitalWrite(ledPin, LOW); delay(400); digitalWrite(ledPin, HIGH); delay(400); } void myISR() { detachInterrupt(espPin); ToggleFast(ledPin); // if I uncomment this, the program crashes or stops for at least 3 seconds. . It is the same when using "noInterrupts" and "interrupts" //attachInterrupt(espPin, myISR2, RISING); } void myISR2() { ToggleFast(ledPin); ToggleFast(ledPin); ToggleFast(ledPin); ToggleFast(ledPin); }
×
×
  • Create New...