From d8f2758a03c65d2a3e6327c04e29f183b2561f82 Mon Sep 17 00:00:00 2001 From: patacongo Date: Sun, 1 Jan 2012 15:57:03 +0000 Subject: [PATCH] Fix an integer overflow bug in LPC17xx GPIO interrupt configuration git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4247 42af7a65-404d-4744-a932-0658087f49c3 --- ChangeLog | 6 ++++-- arch/arm/src/lpc17xx/lpc17_gpio.c | 6 +++--- configs/olimex-lpc1766stk/src/up_leds.c | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1acdfdadfc..b84bc3600e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2312,13 +2312,15 @@ * configs/olimex-lpc1766stk/src/up_leds.c: Add new interfaces so that is CONFIG_ARCH_LEDS are not set, the LEDs may be controlled from application logic. - *configs/olimex-lpc1766stk/src/up_buttons.c: Add support form the buttons + * configs/olimex-lpc1766stk/src/up_buttons.c: Add support form the buttons on the Olimex LPC1766-STK board. * Makefile: Added 'apps_clean' and 'apps_distclean' target to simplify managing the state of the application directory while in the NuttX directory * Documentation/NuttXGettingStarted.html: Added a "Getting Started" Guide for NuttX. At present, this is just a stub and it refers to the NuttX top-level README.txt file which is the only, real "Getting Started" Guide - that exists for the time being. + that exists at the time being. * arch/arm/src/lpc17xx/lpc17_gpioint.c: Correct an value used as the lower end of an IRQ number range test. + * arch/arm/src/lpc17xx/lpc17_gpio.c: Fix a integer flow problem in shift. + This error would prevent pins > 15 from being used as interrupt sources. diff --git a/arch/arm/src/lpc17xx/lpc17_gpio.c b/arch/arm/src/lpc17xx/lpc17_gpio.c index 9dd594c31e..4cc73a3fc6 100755 --- a/arch/arm/src/lpc17xx/lpc17_gpio.c +++ b/arch/arm/src/lpc17xx/lpc17_gpio.c @@ -301,9 +301,9 @@ static void lpc17_setintedge(unsigned int port, unsigned int pin, /* Set the requested value in the PINSEL register */ - shift = pin << 1; - *intedge &= ~(3 << shift); - *intedge |= (value << shift); + shift = pin << 1; + *intedge &= ~((uint64_t)3 << shift); + *intedge |= ((uint64_t)value << shift); } #endif diff --git a/configs/olimex-lpc1766stk/src/up_leds.c b/configs/olimex-lpc1766stk/src/up_leds.c index 088f04583a..c79d4a4829 100755 --- a/configs/olimex-lpc1766stk/src/up_leds.c +++ b/configs/olimex-lpc1766stk/src/up_leds.c @@ -109,6 +109,7 @@ static bool g_uninitialized = true; void up_ledinit(void) { /* Configure all LED GPIO lines */ + led_dumpgpio("up_ledinit() Entry)"); lpc17_configgpio(LPC1766STK_LED1);