From a588a32556d8c71402bb89e62b6002b390d246fc Mon Sep 17 00:00:00 2001 From: patacongo Date: Sun, 24 Feb 2013 00:31:45 +0000 Subject: [PATCH] A few more NuTiny-SDK-NUC120 fixes git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5668 42af7a65-404d-4744-a932-0658087f49c3 --- arch/arm/src/nuc1xx/chip/nuc_gpio.h | 2 +- arch/arm/src/nuc1xx/nuc_gpio.c | 26 +++++++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/arch/arm/src/nuc1xx/chip/nuc_gpio.h b/arch/arm/src/nuc1xx/chip/nuc_gpio.h index 5ad806ea18..4e2f2d7f74 100644 --- a/arch/arm/src/nuc1xx/chip/nuc_gpio.h +++ b/arch/arm/src/nuc1xx/chip/nuc_gpio.h @@ -426,7 +426,7 @@ #define GPIO_PMD_OPENDRAIN 2 /* Open drain output */ #define GPIO_PMD_BIDI 3 /* Quasi bi-directional */ -#define GPIO_PMD_SHIFT(n) ((n) << 1) /* Bits 2n-2n+_1: GPIOx Pin[n] mode control */ +#define GPIO_PMD_SHIFT(n) ((n) << 1) /* Bits 2n-2n+1: GPIOx Pin[n] mode control */ #define GPIO_PMD_MASK(n) (3 << GPIO_PMD_SHIFT(n)) # define GPIO_PMD(n,v) ((v) << GPIO_PMD_SHIFT(n)) diff --git a/arch/arm/src/nuc1xx/nuc_gpio.c b/arch/arm/src/nuc1xx/nuc_gpio.c index be59191570..1ba92a801f 100644 --- a/arch/arm/src/nuc1xx/nuc_gpio.c +++ b/arch/arm/src/nuc1xx/nuc_gpio.c @@ -101,7 +101,7 @@ int nuc_configgpio(gpio_cfgset_t cfgset) /* Set the the GPIO PMD register */ - regaddr = base + NUC_GPIOA_PMD_OFFSET; + regaddr = base + NUC_GPIO_PMD_OFFSET; regval = getreg32(regaddr); regval &= ~GPIO_PMD_MASK(pin); @@ -131,7 +131,7 @@ int nuc_configgpio(gpio_cfgset_t cfgset) /* Check if we need to disable the digital input path */ regaddr = base + NUC_GPIO_OFFD_OFFSET; - regval = getreg32(regaddr); + regval = getreg32(regaddr); regval &= ~GPIO_OFFD(pin); if ((cfgset & GPIO_ANALOG) != 0) @@ -144,7 +144,7 @@ int nuc_configgpio(gpio_cfgset_t cfgset) /* Check if we need to enable debouncing */ regaddr = base + NUC_GPIO_DBEN_OFFSET; - regval = getreg32(regaddr); + regval = getreg32(regaddr); regval &= ~GPIO_DBEN(pin); if ((cfgset & GPIO_DEBOUNCE) != 0) @@ -174,24 +174,24 @@ int nuc_configgpio(gpio_cfgset_t cfgset) case GPIO_INTERRUPT_FALLING_EDGE: isrc |= GPIO_ISRC(pin); - ien |= GPIO_IF_EN(pin); + ien |= GPIO_IF_EN(pin); break; case GPIO_INTERRUPT_BOTH_EDGES: isrc |= GPIO_ISRC(pin); - ien |= (GPIO_IF_EN(pin) | GPIO_IR_EN(pin)); + ien |= (GPIO_IF_EN(pin) | GPIO_IR_EN(pin)); break; case GPIO_INTERRUPT_HIGH_LEVEL: isrc |= GPIO_ISRC(pin); - imd |= GPIO_IMD(pin); - ien |= GPIO_IR_EN(pin); + imd |= GPIO_IMD(pin); + ien |= GPIO_IR_EN(pin); break; case GPIO_INTERRUPT_LOW_LEVEL: isrc |= GPIO_ISRC(pin); - imd |= GPIO_IMD(pin); - ien |= GPIO_IF_EN(pin); + imd |= GPIO_IMD(pin); + ien |= GPIO_IF_EN(pin); break; default: @@ -201,6 +201,14 @@ int nuc_configgpio(gpio_cfgset_t cfgset) putreg32(ien, base + NUC_GPIO_IEN_OFFSET); putreg32(imd, base + NUC_GPIO_IMD_OFFSET); putreg32(isrc, base + NUC_GPIO_ISRC_OFFSET); + + /* If the pin is an output, set the initial output value */ + + if ((cfgset & GPIO_MODE_MASK) == GPIO_OUTPUT) + { + nuc_gpiowrite(cfgset, (cfgset & GPIO_OUTPUT_SET) != 0); + } + return 0; }