diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2013-06-28 15:34:51 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2013-06-28 15:34:51 -0600 |
commit | 3dd16319a370900bc07d31378334ac2611b461bc (patch) | |
tree | 3d19eb1304f0ff7953ee827807c5a03939161917 /nuttx/arch/arm/src | |
parent | ee6d71b6242b37666c09cc480e6df1ae44654b83 (diff) | |
download | px4-nuttx-3dd16319a370900bc07d31378334ac2611b461bc.tar.gz px4-nuttx-3dd16319a370900bc07d31378334ac2611b461bc.tar.bz2 px4-nuttx-3dd16319a370900bc07d31378334ac2611b461bc.zip |
SAM33/4: Need to disable write protection before modify PIO pin configuration
Diffstat (limited to 'nuttx/arch/arm/src')
-rw-r--r-- | nuttx/arch/arm/src/sam34/chip/sam3u_pio.h | 3 | ||||
-rw-r--r-- | nuttx/arch/arm/src/sam34/sam3u_gpio.c | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/nuttx/arch/arm/src/sam34/chip/sam3u_pio.h b/nuttx/arch/arm/src/sam34/chip/sam3u_pio.h index 0ce331d18..c1cc045e7 100644 --- a/nuttx/arch/arm/src/sam34/chip/sam3u_pio.h +++ b/nuttx/arch/arm/src/sam34/chip/sam3u_pio.h @@ -58,7 +58,7 @@ /* 0x000c: Reserved */ #define SAM_PIO_OER_OFFSET 0x0010 /* Output Enable Register */ #define SAM_PIO_ODR_OFFSET 0x0014 /* Output Disable Register */ -#define SAM_PIO_OSR_OFFSET 0x0018 /* utput Status Register */ +#define SAM_PIO_OSR_OFFSET 0x0018 /* Output Status Register */ /* 0x001c: Reserved */ #define SAM_PIO_IFER_OFFSET 0x0020 /* Glitch Input Filter Enable Register */ #define SAM_PIO_IFDR_OFFSET 0x0024 /* Glitch Input Filter Disable Register */ @@ -444,6 +444,7 @@ #define PIO_WPMR_WPEN (1 << 0) /* Bit 0: Write Protect Enable */ #define PIO_WPMR_WPKEY_SHIFT (8) /* Bits 8-31: Write Protect KEY */ #define PIO_WPMR_WPKEY_MASK (0xffffff << PIO_WPMR_WPKEY_SHIFT) +# define PIO_WPMR_WPKEY (0x50494f << PIO_WPMR_WPKEY_SHIFT) /* PIO Write Protect Status Register */ diff --git a/nuttx/arch/arm/src/sam34/sam3u_gpio.c b/nuttx/arch/arm/src/sam34/sam3u_gpio.c index a1ce7953f..d94f2a3f8 100644 --- a/nuttx/arch/arm/src/sam34/sam3u_gpio.c +++ b/nuttx/arch/arm/src/sam34/sam3u_gpio.c @@ -377,6 +377,14 @@ int sam_configgpio(gpio_pinset_t cfgset) uint32_t pin = sam_gpiopin(cfgset); int ret; + /* Enable writing to GPIO registers + * TODO: This probably requires some protection against re-entry. + */ + + putreg32(PIO_WPMR_WPKEY, base + SAM_PIO_WPMR_OFFSET); + + /* Handle the pin configuration according to pin type */ + switch (cfgset & GPIO_MODE_MASK) { case GPIO_INPUT: @@ -400,6 +408,11 @@ int sam_configgpio(gpio_pinset_t cfgset) ret = -EINVAL; break; } + + /* Enable writing to GPIO registers */ + + putreg32(PIO_WPMR_WPEN | PIO_WPMR_WPKEY, base + SAM_PIO_WPMR_OFFSET); + return ret; } |