Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 1 month ago.
LPC1114 IRQ Problems on GPIO
I wrote two short test programs to try to get to the bottom of my on-going LPC interrupt problems. The way I understand it, all of the LPC1114 GPIO pins should be able to have IRQ's attached to them, bar the ones specically mentioned in the mbed LPC1114 pinout documentation. I am using dp13, dp14, dp26, dp27 and dp28. All are set for pull-up. On both versions, dp27 does NOT work - the input is not being pulled high and hovers around 100-400mV - the others are all sitting at 3.3V. My question is: Why are dp13 and dp27 not working correctly?
#include "mbed.h" //this uses polling to check for PB going low DigitalIn button1(dp13); DigitalIn button2(dp14); DigitalIn button3(dp28); DigitalIn button4(dp27); DigitalIn button5(dp26); DigitalOut leds1(dp10); DigitalOut leds2(dp11); int main() { leds1 = 1; leds2 = 1; wait (3); leds1 = 0; leds2 = 0; button1.mode(PullUp); button2.mode(PullUp); button3.mode(PullUp); button4.mode(PullUp); button5.mode(PullUp); LOOP: if((button1 && button2 && button3 && button5) == 0) { leds1 = 1; wait_ms(250); leds1 = 0; } goto LOOP; }
(Note: Button 4 was note used in the LOOP part of the specific listing above for test purposes)
****************
Listed below is the INTERRUPT driven version.
1. dp14, dp26 and dp28 work. dp13 and dp27 (as mentioned above) do not respond to low going signals. 2. If I disable all IRQ's except dp13 and dp27, I can confirm they still do not work 3. If just dp13 and dp27 are disabled, dp14, dp26 and dp28 work
#include "mbed.h" // this uses IRQ's to check for PB's going low DigitalOut LEDS1(dp10); //DigitalOut LEDS2(dp11); InterruptIn PB1(dp13); InterruptIn PB2(dp14); InterruptIn PB3(dp26); InterruptIn PB4(dp27); InterruptIn PB5(dp28); void PB1isr(void){ LEDS1 != LEDS1; } void PB2isr(void){ LEDS1 =! LEDS1; } void PB3isr(void){ LEDS1 =! LEDS1; } void PB4isr(void){ LEDS1 =! LEDS1; } void PB5isr(void){ LEDS1 =! LEDS1; } int main() { PB1.mode(PullUp); PB2.mode(PullUp); PB3.mode(PullUp); PB4.mode(PullUp); PB5.mode(PullUp); PB1.fall(&PB1isr); PB2.fall(&PB2isr); PB3.fall(&PB3isr); PB4.fall(&PB4isr); PB5.fall(&PB5isr); LEDS1 = 1; wait (3); LEDS1 = 0; wait(3); do { wait_ms(250); __WFI(); wait_ms(250); } while(1); }
Question relating to:
1 Answer
9 years, 1 month ago.
Dp27 is an easy one, it is an opendrain I2C pin: It does not have a pull up, so it is always low. What voltages do you measure on p13?
By the way, use <<code>> and <</code>>
to make it better readable.
Erik, I put a 1k pull-up on p27 - it is now responding correctly (I read open drain as open drain for the output drive - I did not realize that it affected the input - good learning point).
Pin 13 has 3.3V and it goes to 0V when I hit the button, but it is not working - there is no response from the LED.
posted by 26 Nov 2015
I tested all the GPIO pins for IRQ - I have posted the results in the LPC1114 forum.
posted by Andrew R 28 Nov 2015