From d92f89d08d0729d4c7c32fd5d6d2892c4408dcb4 Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 12 Mar 2013 00:19:30 +0000 Subject: Updated LPC1788 SDCARD logic from Rommel Marcelo git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5733 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/arch/arm/src/lpc17xx/chip/lpc17_sdcard.h | 12 ++++++------ nuttx/arch/arm/src/lpc17xx/lpc17_sdcard.c | 8 +++++++- nuttx/arch/arm/src/stm32/chip/stm32_sdio.h | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) (limited to 'nuttx/arch/arm') diff --git a/nuttx/arch/arm/src/lpc17xx/chip/lpc17_sdcard.h b/nuttx/arch/arm/src/lpc17xx/chip/lpc17_sdcard.h index eecabc346..5e91435ef 100644 --- a/nuttx/arch/arm/src/lpc17xx/chip/lpc17_sdcard.h +++ b/nuttx/arch/arm/src/lpc17xx/chip/lpc17_sdcard.h @@ -48,10 +48,10 @@ #define LPC17_SDCARD_CMD_OFFSET 0x000c /* SD card command register */ #define LPC17_SDCARD_RESPCMD_OFFSET 0x0010 /* SD card command response register */ #define LPC17_SDCARD_RESP_OFFSET(n) (0x0010+4*(n)) -#define LPC17_SDCARD_RESP0_OFFSET 0x0014 /* SD card response 1 register */ -#define LPC17_SDCARD_RESP1_OFFSET 0x0018 /* SD card response 2 register */ -#define LPC17_SDCARD_RESP2_OFFSET 0x001c /* SD card response 3 register */ -#define LPC17_SDCARD_RESP3_OFFSET 0x0020 /* SD card response 4 register */ +# define LPC17_SDCARD_RESP0_OFFSET 0x0014 /* SD card response 1 register */ +# define LPC17_SDCARD_RESP1_OFFSET 0x0018 /* SD card response 2 register */ +# define LPC17_SDCARD_RESP2_OFFSET 0x001c /* SD card response 3 register */ +# define LPC17_SDCARD_RESP3_OFFSET 0x0020 /* SD card response 4 register */ #define LPC17_SDCARD_DTIMER_OFFSET 0x0024 /* SD card data timer register */ #define LPC17_SDCARD_DLEN_OFFSET 0x0028 /* SD card data length register */ #define LPC17_SDCARD_DCTRL_OFFSET 0x002c /* SD card data control register */ @@ -151,7 +151,7 @@ /* MCI - Data Length Register DATALENGTH - 0x400C 0028 */ #define SDCARD_DATALENGTH_SHIFT (0) /* Bits 0-15: Data length value */ -#define SDCARD_DATALENGTH_MASK (0xffff << SDCARD_DATALENGTH_MASK) +#define SDCARD_DATALENGTH_MASK (0xffff << SDCARD_DATALENGTH_SHIFT) /* Bits 16-31: Reserved */ #define SDCARD_DLEN_RESET (0) /* Reset value */ @@ -227,7 +227,7 @@ #define SDCARD_CLEAR_DBCKENDC (1 << 10) /* Bit 10: DBCKEND flag clear bit */ /* Bits 11-31: Reserved */ -#define SDCARD_CLEAR_RESET 0x000005ff +#define SDCARD_CLEAR_RESET 0x000007ff #define SDCARD_CLEAR_STATICFLAGS 0x000005ff /* MCI - Interrupt Mask Registers - MASK0 - 0x400c 003c */ diff --git a/nuttx/arch/arm/src/lpc17xx/lpc17_sdcard.c b/nuttx/arch/arm/src/lpc17xx/lpc17_sdcard.c index 2a0e81b27..f52a9a35e 100644 --- a/nuttx/arch/arm/src/lpc17xx/lpc17_sdcard.c +++ b/nuttx/arch/arm/src/lpc17xx/lpc17_sdcard.c @@ -619,8 +619,12 @@ static void lpc17_setpwrctrl(uint32_t pwrctrl) { uint32_t regval; + /* Set the new value of the PWRCTRL field of the PWR register. Also, as a + * side-effect, clear the OPENDRAIN and ROD bits as well. + */ + regval = getreg32(LPC17_SDCARD_PWR); - regval &= ~SDCARD_PWR_CTRL_MASK; + regval &= ~(SDCARD_PWR_CTRL_MASK | SDCARD_PWR_OPENDRAIN | SDCARD_PWR_ROD); regval |= pwrctrl; putreg32(regval, LPC17_SDCARD_PWR); } @@ -643,6 +647,8 @@ static void lpc17_setpwrctrl(uint32_t pwrctrl) static inline uint32_t lpc17_getpwrctrl(void) { + /* Extract and return the PWRCTRL field of the PWR register. */ + return getreg32(LPC17_SDCARD_PWR) & SDCARD_PWR_CTRL_MASK; } diff --git a/nuttx/arch/arm/src/stm32/chip/stm32_sdio.h b/nuttx/arch/arm/src/stm32/chip/stm32_sdio.h index d2af8a32c..7f1a68b48 100644 --- a/nuttx/arch/arm/src/stm32/chip/stm32_sdio.h +++ b/nuttx/arch/arm/src/stm32/chip/stm32_sdio.h @@ -1,7 +1,7 @@ /************************************************************************************ * arch/arm/src/stm32/chip/stm32_sdio.h * - * Copyright (C) 2009, 2011-2012 Gregory Nutt. All rights reserved. + * Copyright (C) 2009, 2011-2013 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without -- cgit v1.2.3