Add support for the SAM4L Xplained Pro I/O1 module

This commit is contained in:
Gregory Nutt 2013-06-15 10:56:08 -06:00
parent aaf102b5c8
commit 44fe999aea
17 changed files with 427 additions and 91 deletions

View File

@ -4966,3 +4966,15 @@
files): Add support for a generic Windows EABI toolchain (2013-6-13).
6.29 2013-xx-xx Gregory Nutt <gnutt@nuttx.org>
* arch/arm/src/sam34/chip/sam4l_pinmap.h: Change naming of some pin
configurations to match names used with other SAM part (2013-6-15).
* arch/arm/src/sam34/sam4l_clockconfig.c: Corrected some typos
(2013-6-15).
* configs/sam4l-xplained/src/sam_buttons.c: Eliminate a warning
(2013-6-15).
* configs/sam4l-xplained/src/sam_mmcsd.c, sam_nsh.c, sam_spi.c,
sam3u-ek.h, Kconfig, Makefile, sam4l-xplained.h,
configs/sam4l-xplained/README.txt, and
configs/sam4l-xplained/include/board.h: Add support for the SPI-
based SD card on the I/O1 module (2013-6-15).

View File

@ -2556,13 +2556,6 @@ nsh>
USB device (and possible LCD support).
These extensions may or may not happen soon as my plate is kind of full now.
</p>
<blockquote><small>
<b>NuttX-6.28 Update</b>.
I just recently got a new SAM3U-EK board after bricking mine a year or so ago.
In the NuttX-6.28 release, there are some problems with the SAM3U-EK LCD and touchscreen.
I do not know if this is a consequence of board differences, changes in NuttX-6.28 for the SAM4S and SAM4L which affect the same code, or just &quot;bit-rot&quot; from disuse.
I hope to have these issues resolved for NuttX-6.29.
</small></blockquote>
</ul>
<p>
<b>Development Environments:</b>

View File

@ -386,36 +386,36 @@
/* Serial Peripheral Interface */
#define GPIO_SPI_MISO_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN21)
#define GPIO_SPI_MISO_2 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN27)
#define GPIO_SPI_MISO_3 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN4)
#define GPIO_SPI_MISO_4 (GPIO_FUNCB | GPIO_PORTA | GPIO_PIN3)
#define GPIO_SPI_MISO_5 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN14)
#define GPIO_SPI_MISO_6 (GPIO_FUNCB | GPIO_PORTC | GPIO_PIN28)
#define GPIO_SPI_MOSI_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN22)
#define GPIO_SPI_MOSI_2 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN28)
#define GPIO_SPI_MOSI_3 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN5)
#define GPIO_SPI_MOSI_4 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN15)
#define GPIO_SPI_MOSI_5 (GPIO_FUNCB | GPIO_PORTC | GPIO_PIN29)
#define GPIO_SPI_NPCS0_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN24)
#define GPIO_SPI_NPCS0_2 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN30)
#define GPIO_SPI_NPCS0_3 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN3)
#define GPIO_SPI_NPCS0_4 (GPIO_FUNCB | GPIO_PORTA | GPIO_PIN2)
#define GPIO_SPI_NPCS0_5 (GPIO_FUNCB | GPIO_PORTC | GPIO_PIN31)
#define GPIO_SPI_NPCS1_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN31)
#define GPIO_SPI_NPCS1_2 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN2)
#define GPIO_SPI_NPCS1_3 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN13)
#define GPIO_SPI_NPCS1_4 (GPIO_FUNCC | GPIO_PORTA | GPIO_PIN13)
#define GPIO_SPI_NPCS2_1 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN0)
#define GPIO_SPI_NPCS2_2 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN11)
#define GPIO_SPI_NPCS2_3 (GPIO_FUNCC | GPIO_PORTA | GPIO_PIN14)
#define GPIO_SPI_NPCS3_1 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN1)
#define GPIO_SPI_NPCS3_2 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN12)
#define GPIO_SPI_NPCS3_3 (GPIO_FUNCC | GPIO_PORTA | GPIO_PIN15)
#define GPIO_SPI_SCK_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN23)
#define GPIO_SPI_SCK_2 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN29)
#define GPIO_SPI_SCK_3 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN6)
#define GPIO_SPI_SCK_4 (GPIO_FUNCB | GPIO_PORTC | GPIO_PIN30)
#define GPIO_SPI0_MISO_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN21)
#define GPIO_SPI0_MISO_2 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN27)
#define GPIO_SPI0_MISO_3 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN4)
#define GPIO_SPI0_MISO_4 (GPIO_FUNCB | GPIO_PORTA | GPIO_PIN3)
#define GPIO_SPI0_MISO_5 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN14)
#define GPIO_SPI0_MISO_6 (GPIO_FUNCB | GPIO_PORTC | GPIO_PIN28)
#define GPIO_SPI0_MOSI_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN22)
#define GPIO_SPI0_MOSI_2 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN28)
#define GPIO_SPI0_MOSI_3 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN5)
#define GPIO_SPI0_MOSI_4 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN15)
#define GPIO_SPI0_MOSI_5 (GPIO_FUNCB | GPIO_PORTC | GPIO_PIN29)
#define GPIO_SPI0_NPCS0_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN24)
#define GPIO_SPI0_NPCS0_2 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN30)
#define GPIO_SPI0_NPCS0_3 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN3)
#define GPIO_SPI0_NPCS0_4 (GPIO_FUNCB | GPIO_PORTA | GPIO_PIN2)
#define GPIO_SPI0_NPCS0_5 (GPIO_FUNCB | GPIO_PORTC | GPIO_PIN31)
#define GPIO_SPI0_NPCS1_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN31)
#define GPIO_SPI0_NPCS1_2 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN2)
#define GPIO_SPI0_NPCS1_3 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN13)
#define GPIO_SPI0_NPCS1_4 (GPIO_FUNCC | GPIO_PORTA | GPIO_PIN13)
#define GPIO_SPI0_NPCS2_1 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN0)
#define GPIO_SPI0_NPCS2_2 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN11)
#define GPIO_SPI0_NPCS2_3 (GPIO_FUNCC | GPIO_PORTA | GPIO_PIN14)
#define GPIO_SPI0_NPCS3_1 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN1)
#define GPIO_SPI0_NPCS3_2 (GPIO_FUNCB | GPIO_PORTB | GPIO_PIN12)
#define GPIO_SPI0_NPCS3_3 (GPIO_FUNCC | GPIO_PORTA | GPIO_PIN15)
#define GPIO_SPI0_SPCK_1 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN23)
#define GPIO_SPI0_SPCK_2 (GPIO_FUNCA | GPIO_PORTA | GPIO_PIN29)
#define GPIO_SPI0_SPCK_3 (GPIO_FUNCA | GPIO_PORTC | GPIO_PIN6)
#define GPIO_SPI0_SPCK_4 (GPIO_FUNCB | GPIO_PORTC | GPIO_PIN30)
/* Timer/Counters */

View File

@ -425,11 +425,11 @@
# define SAM_DFLLO_REFCLK SCIF_GCCTRL_OSCSEL_RCSYS
# elif defined(BOARD_DFLL0_SOURCE_OSC32K)
# define SAM_DFLLO_REFCLK SCIF_GCCTRL_OSCSEL_OSC32K
# elif define(BOARD_DFLL0_SOURCE_OSC0)
# elif defined(BOARD_DFLL0_SOURCE_OSC0)
# define SAM_DFLLO_REFCLK SCIF_GCCTRL_OSCSEL_OSC0
# elif define(BOARD_DFLL0_SOURCE_RC80M)
# elif defined(BOARD_DFLL0_SOURCE_RC80M)
# define SAM_DFLLO_REFCLK SCIF_GCCTRL_OSCSEL_RC80M
# elif define(BOARD_DFLL0_SOURCE_RC32K)
# elif defined(BOARD_DFLL0_SOURCE_RC32K)
# define SAM_DFLLO_REFCLK SCIF_GCCTRL_OSCSEL_RC32K
# else
# error No DFLL0 source for reference clock defined

View File

@ -63,7 +63,6 @@ fi
# the Atollic bin path because there is are binaries named gcc.exe and g++.exe
# at those locations as well.
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for ARM Pro 2.3.0/ARMTools/bin"
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for STMicroelectronics STM32 Lite 2.3.0/ARMTools/bin"
# This is the Cygwin path to the location where I build the buildroot
# toolchain.

View File

@ -213,7 +213,7 @@
*
************************************************************************************/
extern void weak_function sam_spiinitialize(void);
void weak_function sam_spiinitialize(void);
/************************************************************************************
* Name: sam_usbinitialize
@ -223,7 +223,7 @@ extern void weak_function sam_spiinitialize(void);
*
************************************************************************************/
extern void weak_function sam_usbinitialize(void);
void weak_function sam_usbinitialize(void);
/****************************************************************************
* Name: sam_hsmciinit
@ -234,7 +234,7 @@ extern void weak_function sam_usbinitialize(void);
****************************************************************************/
#ifdef CONFIG_SAM34_HSMCI
extern int weak_function sam_hsmciinit(void);
int weak_function sam_hsmciinit(void);
#else
# define sam_hsmciinit()
#endif
@ -256,7 +256,7 @@ void up_ledinit(void);
****************************************************************************/
#ifdef CONFIG_SAM34_HSMCI
extern bool sam_cardinserted(unsigned char slot);
bool sam_cardinserted(unsigned char slot);
#else
# define sam_cardinserted(slot) (false)
#endif
@ -270,7 +270,7 @@ extern bool sam_cardinserted(unsigned char slot);
****************************************************************************/
#ifdef CONFIG_SAM34_HSMCI
extern bool sam_writeprotected(unsigned char slot);
bool sam_writeprotected(unsigned char slot);
#else
# define sam_writeprotected(slot) (false)
#endif

View File

@ -4,4 +4,43 @@
#
if ARCH_BOARD_SAM4L_XPLAINED
menu "SAM4L Xplained Pro Modules"
config SAM4L_XPLAINED_IOMODULE
bool "I/O1 Module"
default n
---help---
The I/O 1 module is attached. This module provides an MMC/SD card
slot.
if SAM4L_XPLAINED_IOMODULE
choice
prompt "I/O1 Module Location"
default SAM4L_XPLAINED_IOMODULE_EXT1
config SAM4L_XPLAINED_IOMODULE_EXT1
bool "EXT1"
config SAM4L_XPLAINED_IOMODULE_EXT2
bool "EXT2"
endchoice
endif
config SAM4L_XPLAINED_OLED1MODULE
bool "OLED1 Module"
default n
---help---
The OLED 1 module is attached. This module provides an OLED plus 3
additional switches and 3 additional LEDs.
config SAM4L_XPLAINED_SLCD1MODULE
bool "SLCD1 Module"
default n
---help---
The SLCD 1 module is attached. This module provides a segment LCD
that connects directly to the "EXT5 SEGMENT LCD" connector
endmenu
endif

View File

@ -3,11 +3,22 @@ README
This README discusses issues unique to NuttX configurations for the
Atmel SAM4L Xplained Pro development board. This board features the
ATSAM4LC4C MCU
ATSAM4LC4C MCU.
The SAM4L Xplained Pro Starter Kit is bundled with four modules:
1) I/O1 - An MMC/SD card slot, PWM LED control, ADC light sensor, UART
loopback, TWI AT30TSE758 Temperature sensor.
2) OLED1 - An OLED plus 3 additional switches and 3 additional LEDs
3) SLCD1 - A segment LCD that connects directly to the "EXT5 SEGMENT LCD"
connector
4) PROTO1 - A prototyping board with logic on board (other than power-related
logic).
Contents
^^^^^^^^
- Modules
- Development Environment
- GNU Toolchain Options
- IDEs
@ -19,6 +30,123 @@ Contents
- SAM4L Xplained Pro-specific Configuration Options
- Configurations
Modules
^^^^^^^
The SAM4L Xplained Pro Starter Kit is bundled with four modules:
I/O1
----
The primary function of this module is to provide SD card support, but
the full list of modules features include:
- microSD card connector (SPI interface)
- PWM (LED control)
- ADC (light sensor)
- UART loopback
- TWI AT30TSE758 Temperature sensor with EEPROM
SPI is available on two of the SAM4L Xplained connectors, EXT1 and EXT2.
They mate with the I/O1 connector as indicated in this table.
I/O1 Connector
--------------
I/O1 EXT1 EXT2 Other use of either pin
----------------- -------------------- -------------------- ------------------------------------
1 ID 1 1
2 GND 2 GND 2
3 LIGHTSENSOR 3 PA04 ADCIFE/AD0 3 PA07 ADCIFE/AD2
4 LP_OUT 4 PA05 ADCIFE/AD1 4 PB02 ADCIFE/AD3
5 GPIO1 5 PB12 GPIO 5 PC08 GPIO PB12 and PC8 on EXT5
6 GPIO2 6 PC02 GPIO 6 PB10 GPIO PB10 on EXT5
7 LED 7 PC00 TC/1/A0 7 PC04 TC/1/A2
8 LP_IN 8 PC01 TC/1/B0 8 PC05 TC/1/B2 PC05 on EXT5
9 TEMP_ALERT 9 PC25 EIC/EXTINT2 9 PC06 EIC/EXTINT8 PC25 on EXT5
10 microSD_DETECT 10 PB13 SPI/NPCS1 10 PC09 GPIO PB13 on EXT5
11 TWI SDA 11 PA23 TWIMS/0/TWD 11 PB14 TWIMS/3/TWD PB14 on EXT3&4, PA23 and PB14 on EXT5
12 TWI SCL 12 PA24 TWIMS/0/TWCK 12 PB15 TWIMS/3/TWCK PB15 on EXT3&4, PA24 and PB15 on EXT5
13 UART RX 13 PB00 USART/0/RXD 13 PC26 USART/1/RXD PB00 on EXT4, PC26 on EXT3&5
14 UART TX 14 PB01 USART/0/TXD 14 PC27 USART/1/TXD PB01 on EXT4, PC27 on EXT3&5
15 microSD_SS 15 PC03 SPI/NPCS0 15 PB11 SPI/NPCS2 PB11 on EXT5
16 SPI_MOSI 16 PA22 SPI/MOSI 16 PA22 SPI/MOSI PA22 on EXT5
17 SPI_MISO 17 PA21 SPI/MISO 17 PA21 SPI/MISO PA21 on EXT5
18 SPI_SCK 18 PC30 SPI/SCK 18 PC30 SPI/SCK PC30 on EXT5
19 GND 19 GND GND
20 VCC 20 VCC VCC
The mapping between the I/O1 pins and the SD connector are shown in the
following table.
SD Card Connection
------------------
I/O1 SD PIN Description
---- ---- --- -------------------------------------------------
D2 1 Data line 2 (not used)
15 D3 2 Data line 3. Active low chip select, pulled high
16 CMD 3 Command line, connected to SPI_MOSI.
20 VDD 4
18 CLK 5 Clock line, connected to SPI_SCK.
2/19 GND 6
17 D0 7 Data line 0, connected to SPI_MISO.
D1 8 Data line 1 (not used)
10 SW_A 9 Card detect
2/19 SW_B 10 GND
Card Detect
-----------
When a microSD card is put into the connector SW_A and SW_B are short-
circuited. SW_A is connected to the microSD_DETECT signal. To use this
as a card indicator remember to enable internal pullup in the target
device.
GPIOs
-----
So all that is required to connect the SD is configure the SPI
PIN EXT1 EXT2 Description
--- -------------- --------------- -------------------------------------
15 PC03 SPI/NPCS0 PB11 SPI/NPCS2 Active low chip select OUTPUT, pulled
high on board.
10 PB13 SPI/NPCS1 10 PC09 GPIO Active low card detect INPUT, must
use internal pull-up.
Configuration Options:
----------------------
CONFIG_SAM4L_XPLAINED_IOMODULE=y : Informs the system that the
I/O1 module is installed
CONFIG_SAM4L_XPLAINED_IOMODULE_EXT1=y : The module is installed in EXT1
CONFIG_SAM4L_XPLAINED_IOMODULE_EXT2=y : The mdoule is installed in EXT2
NOTE: As of this writing, only the SD card slot is supported in the I/O1
module.
OLED1
-----
This module provides an OLED plus 3 additional switches and 3 additional\
LEDs.
Configuration Options:
----------------------
CONFIG_SAM4L_XPLAINED_OLED1MODULE=y : Informs the system that the
I/O1 module is installed
NOTE: As of this writing, the OLED1 module is not supported.
SLCD1
-----
This module provides a A segment LCD that connects directly to the "EXT5 SEGMENT LCD"
connector
Configuration Options:
----------------------
CONFIG_SAM4L_XPLAINED_SLCD1MODULE=y : Informs the system that the
I/O1 module is installed
NOTE: As of this writing, the SLCD1 module is not supported.
PROTO1
------
A prototyping board with logic on board (other than power-related logic).
There is no built-in support for the PROTO1 module.
Development Environment
^^^^^^^^^^^^^^^^^^^^^^^
@ -548,4 +676,46 @@ Configuration sub-directories
NOTES:
nsh:
This configuration directory will built the NuttShell. See NOTES above.
This configuration directory will built the NuttShell. See NOTES above
and below:
NOTE:
If the I/O1 module is connected to the SAM4L Xplained Pro, then support
for the SD card slot can be enabled by making the following changes
to the configuration:
File Systems:
CONFIG_FS_FAT=y : Enable the FAT file system
CONFIG_FAT_LCNAMES=y : Enable upper/lower case 8.3 file names (Optional, see below)
CONFIG_FAT_LFN=y : Enable long file named (Optional, see below)
CONFIG_FAT_MAXFNAME=32 : Maximum supported file name length
There are issues related to patents that Microsoft holds on FAT long
file name technologies. See the top level COPYING file for further
details.
System Type -> Peripherals:
CONFIG_SAM34_SPI=y : Enable the SAM4L SPI peripheral
Board Selection -> Common Board Options
CONFIG_NSH_MMCSDSLOTNO=0 : Only one slot, slot 0
CONFIG_NSH_MMCSDSPIPORTNO=0 : Only one SPI port, port 0
Board Selection -> SAM4L Xplained Pro Modules
CONFIG_SAM4L_XPLAINED_IOMODULE=y : I/O1 module is connected
CONFIG_SAM4L_XPLAINED_IOMODULE_EXT1=y : In EXT1, or EXT2
CONFIG_SAM4L_XPLAINED_IOMODULE_EXT2=y
Device Drivers
CONFIG_SPI=y : Enable SPI support
CONFIG_SPI_EXCHANGE=y : The exchang() method is supported
CONFIG_MMCSD=y : Enable MMC/SD support
CONFIG_MMCSD_NSLOTS=1 : Only one MMC/SD card slot
CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : I tested this way, but this may not be required
CONFIG_MMCSD_HAVECARDDETECT=y : I/O1 module as a card detect GPIO
CONFIG_MMCSD_SPI=y : Use the SPI interface to the MMC/SD card
CONFIG_MMCSD_SPICLOCK=20000000 : This is a guess for the optimal MMC/SD frequency
Application Configuration -> NSH Library
CONFIG_NSH_ARCHINIT=y : Board has architecture-specific initialization

View File

@ -276,6 +276,17 @@
#define GPIO_USART1_RXD GPIO_USART1_RXD_2
#define GPIO_USART1_TXD GPIO_USART1_TXD_2
/* SPI pins are brought out on EXT1 and EXT2 as:
*
* PA22 SPI/MOSI
* PA21 SPI/MISO
* PC30 SPI/SCK
*/
#define GPIO_SPI0_MISO GPIO_SPI0_MISO_1
#define GPIO_SPI0_MOSI GPIO_SPI0_MOSI_1
#define GPIO_SPI0_SPCK GPIO_SPI0_SPCK_4
/************************************************************************************
* Public Data
************************************************************************************/

View File

@ -32,7 +32,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
if [ "$_" = "$0" ] ; then
echo "You must source this script, not run it!" 1>&2
exit 1
@ -48,11 +47,23 @@ if [ -z "${PATH_ORIG}" ]; then
export PATH_ORIG="${PATH}"
fi
# This is the Cygwin path to the location where I installed the Atmel GCC
# toolchain under Windows. You will also have to edit this if you install
# this toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/Atmel/Atmel Toolchain/ARM GCC/Native/4.7.3.99/arm-gnu-toolchain/bin"
# This is the Cygwin path to the location where I installed the CodeSourcery
# toolchain under windows. You will also have to edit this if you install
# the CodeSourcery toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery G++ Lite/bin"
# These are the Cygwin paths to the locations where I installed the Atollic
# toolchain under windows. You will also have to edit this if you install
# the Atollic toolchain in any other location. /usr/bin is added before
# the Atollic bin path because there is are binaries named gcc.exe and g++.exe
# at those locations as well.
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for ARM Pro 2.3.0/ARMTools/bin"
# This is the Cygwin path to the location where I build the buildroot
# toolchain.
export TOOLCHAIN_BIN="${WD}/../misc/buildroot/build_arm_nofpu/staging_dir/bin"

View File

@ -32,7 +32,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
if [ "$_" = "$0" ] ; then
echo "You must source this script, not run it!" 1>&2
exit 1
@ -48,11 +47,23 @@ if [ -z "${PATH_ORIG}" ]; then
export PATH_ORIG="${PATH}"
fi
# This is the Cygwin path to the location where I installed the Atmel GCC
# toolchain under Windows. You will also have to edit this if you install
# this toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/Atmel/Atmel Toolchain/ARM GCC/Native/4.7.3.99/arm-gnu-toolchain/bin"
# This is the Cygwin path to the location where I installed the CodeSourcery
# toolchain under windows. You will also have to edit this if you install
# the CodeSourcery toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery G++ Lite/bin"
# These are the Cygwin paths to the locations where I installed the Atollic
# toolchain under windows. You will also have to edit this if you install
# the Atollic toolchain in any other location. /usr/bin is added before
# the Atollic bin path because there is are binaries named gcc.exe and g++.exe
# at those locations as well.
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for ARM Pro 2.3.0/ARMTools/bin"
# This is the Cygwin path to the location where I build the buildroot
# toolchain.
export TOOLCHAIN_BIN="${WD}/../misc/buildroot/build_arm_nofpu/staging_dir/bin"

View File

@ -40,7 +40,11 @@ CFLAGS += -I$(TOPDIR)/sched
ASRCS =
AOBJS = $(ASRCS:.S=$(OBJEXT))
CSRCS = sam_boot.c sam_spi.c
CSRCS = sam_boot.c
ifeq ($(CONFIG_SAM34_SPI),y)
CSRCS += sam_spi.c
endif
ifeq ($(CONFIG_HAVE_CXX),y)
CSRCS += sam_cxxinitialize.c
@ -56,6 +60,14 @@ ifeq ($(CONFIG_ARCH_BUTTONS),y)
CSRCS += sam_buttons.c
endif
ifeq ($(CONFIG_NSH_ARCHINIT),y)
CSRCS += sam_nsh.c
endif
ifeq ($(CONFIG_SAM4L_XPLAINED_IOMODULE),y)
CSRCS += sam_mmcsd.c
endif
COBJS = $(CSRCS:.c=$(OBJEXT))
SRCS = $(ASRCS) $(CSRCS)

View File

@ -99,10 +99,54 @@
* PC24 SW0
*/
#define GPIO_SW0 (GPIO_INPUT | GPIO_PULL_UP | GPIO_GLITCH_FILTER | \
#define GPIO_SW0 (GPIO_INTERRUPT | GPIO_PULL_UP | GPIO_GLITCH_FILTER | \
GPIO_PORTC | GPIO_PIN24)
#define IRQ_SW0 SAM_IRQ_PC24
/* I/O1
*
* Support for the microSD card slot on the I/O1 module. The I/O1 requires
* SPI support and two GPIOs. These two GPIOs will vary if the
*
*
* PIN EXT1 EXT2 Description
* --- -------------- --------------- -------------------------------------
* 15 PC03 SPI/NPCS0 PB11 SPI/NPCS2 Active low chip select OUTPUT, pulled
* high on board.
* 10 PB13 SPI/NPCS1 10 PC09 GPIO Active low card detect INPUT, must
* use internal pull-up.
*/
#ifdef CONFIG_SAM4L_XPLAINED_IOMODULE
# ifndef CONFIG_SAM34_SPI
# error CONFIG_SAM34_SPI is required to use the I/O1 module
# endif
# if defined(CONFIG_SAM4L_XPLAINED_IOMODULE_EXT1)
# define GPIO_SD_CD (GPIO_INTERRUPT | GPIO_INT_CHANGE | GPIO_PULL_UP | \
GPIO_GLITCH_FILTER | GPIO_PORTB | GPIO_PIN13)
# define IRQ_SD_CD SAM_IRQ_PB13
# define GPIO_SD_CS (GPIO_OUTPUT | GPIO_PULL_NONE | GPIO_OUTPUT_SET | \
GPIO_PORTC | GPIO_PIN3)
# define SD_CSNO 0
# elif defined(CONFIG_SAM4L_XPLAINED_IOMODULE_EXT2)
# define GPIO_CD (GPIO_INTERRUPT | GPIO_INT_CHANGE | GPIO_PULL_UP | \
GPIO_GLITCH_FILTER | GPIO_PORTC | GPIO_PIN9)
# define IRQ_CD SAM_IRQ_PC9
# define GPIO_SD_CS (GPIO_OUTPUT | GPIO_PULL_NONE | GPIO_OUTPUT_SET | \
GPIO_PORTB | GPIO_PIN11)
# define SD_CSNO 2
# else
# error Which connector is the I/O1 module installed in?
# endif
#endif
/************************************************************************************
* Public Types
************************************************************************************/
@ -127,9 +171,22 @@
void weak_function sam_spiinitialize(void);
/****************************************************************************
/************************************************************************************
* Name: sam_sdinitialize
*
* Description:
* Initialize the SPI-based SD card. Requires CONFIG_SAM4L_XPLAINED_IOMODULE=y,
* CONFIG_DISABLE_MOUNTPOINT=n, CONFIG_MMCSD=y, and CONFIG_SAM34_SPI=y
*
************************************************************************************/
#ifdef CONFIG_SAM4L_XPLAINED_IOMODULE
int sam_sdinitialize(int minor);
#endif
/************************************************************************************
* Name: up_ledinit
****************************************************************************/
************************************************************************************/
#ifdef CONFIG_ARCH_LEDS
void up_ledinit(void);

View File

@ -59,7 +59,9 @@
* Private Data
****************************************************************************/
#if defined(CONFIG_GPIOA_IRQ) && defined(CONFIG_ARCH_IRQBUTTONS)
static xcpt_t g_irqsw0;
#endif
/****************************************************************************
* Private Functions

View File

@ -39,7 +39,6 @@
#include <nuttx/config.h>
#include <stdint.h>
#include <stdbool.h>
#include <debug.h>
#include <errno.h>
@ -92,14 +91,15 @@
void weak_function sam_spiinitialize(void)
{
/* The ZigBee module connects used NPCS0. However, there is not yet any
* ZigBee support.
/* The I/O module containing the SD connector may or may not be installed. And, if
* it is installed, it may be in connector EXT1 or EXT2.
*/
/* The touchscreen connects using NPCS2 (PC14). */
#ifdef CONFIG_SAM4L_XPLAINED_IOMODULE
/* TODO: enable interrupt on card detect */
#if defined(CONFIG_INPUT) && defined(CONFIG_INPUT_ADS7843E)
sam_configgpio(GPIO_TSC_NPCS2);
sam_configgpio(GPIO_SD_CD); /* Card detect input */
sam_configgpio(GPIO_SD_CS); /* Chip select output */
#endif
}
@ -161,12 +161,12 @@ int sam_spicsnumber(enum spi_dev_e devid)
{
int cs = -EINVAL;
#if defined(CONFIG_INPUT) && defined(CONFIG_INPUT_ADS7843E)
if (devid == SPIDEV_TOUCHSCREEN)
#ifdef CONFIG_SAM4L_XPLAINED_IOMODULE
if (devid == SPIDEV_MMCSD)
{
/* Assert the CS pin to the OLED display */
/* Return the chip select number */
cs = 2;
cs = SD_CSNO;
}
#endif
@ -201,18 +201,14 @@ int sam_spicsnumber(enum spi_dev_e devid)
void sam_spiselect(enum spi_dev_e devid, bool selected)
{
/* The touchscreen chip select is implemented as a GPIO OUTPUT that must
* be controlled by this function. This is because the ADS7843E driver
* must be able to sample the device BUSY GPIO input between SPI transfers.
* However, the AD7843E will tri-state the BUSY input whenever the chip
* select is de-asserted. So the only option is to control the chip select
* manually and hold it low throughout the SPI transfer.
*/
#ifdef CONFIG_SAM4L_XPLAINED_IOMODULE
/* Select/de-select the SD card */
#if defined(CONFIG_INPUT) && defined(CONFIG_INPUT_ADS7843E)
if (devid == SPIDEV_TOUCHSCREEN)
if (devid == SPIDEV_MMCSD)
{
sam_gpiowrite(GPIO_TSC_NPCS2, !selected);
/* Active low */
sam_gpiowrite(GPIO_SD_CS, !selected);
}
#endif
}
@ -233,7 +229,23 @@ void sam_spiselect(enum spi_dev_e devid, bool selected)
uint8_t sam_spistatus(FAR struct spi_dev_s *dev, enum spi_dev_e devid)
{
return 0;
uint8_t ret = 0;
#ifdef CONFIG_SAM4L_XPLAINED_IOMODULE
/* Check if an SD card is present in the microSD slot */
if (devid == SPIDEV_MMCSD)
{
/* Active low */
if (!sam_gpioread(GPIO_SD_CD))
{
ret |= SPI_STATUS_PRESENT;
}
}
#endif
return ret;
}
#endif /* CONFIG_SAM34_SPI */

View File

@ -32,27 +32,23 @@
# POSSIBILITY OF SUCH DAMAGE.
#
if [ "$_" = "$0" ] ; then
echo "You must source this script, not run it!" 1>&2
exit 1
fi
WD=`pwd`
if [ ! -x "setenv.sh" ]; then
echo "This script must be executed from the top-level NuttX build directory"
exit 1
fi
if [ -z "${PATH_ORIG}" ]; then
export PATH_ORIG="${PATH}"
fi
# This is the Cygwin path to the location where I installed the Atmel GCC
# toolchain under Windows. You will also have to edit this if you install
# this toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/Atmel/Atmel Toolchain/ARM GCC/Native/4.7.3.99/arm-gnu-toolchain/bin"
# This is the Cygwin path to the location where I installed the CodeSourcery
# toolchain under windows. You will also have to edit this if you install
# the CodeSourcery toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery G++ Lite/bin"
# These are the Cygwin paths to the locations where I installed the Atollic
# toolchain under windows. You will also have to edit this if you install
# the Atollic toolchain in any other location. /usr/bin is added before
# the Atollic bin path because there is are binaries named gcc.exe and g++.exe
# at those locations as well.
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for ARM Pro 2.3.0/ARMTools/bin"
# This is the Cygwin path to the location where I build the buildroot
# toolchain.
export TOOLCHAIN_BIN="${WD}/../misc/buildroot/build_arm_nofpu/staging_dir/bin"

View File

@ -32,7 +32,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
if [ "$_" = "$0" ] ; then
echo "You must source this script, not run it!" 1>&2
exit 1
@ -48,11 +47,23 @@ if [ -z "${PATH_ORIG}" ]; then
export PATH_ORIG="${PATH}"
fi
# This is the Cygwin path to the location where I installed the Atmel GCC
# toolchain under Windows. You will also have to edit this if you install
# this toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/Atmel/Atmel Toolchain/ARM GCC/Native/4.7.3.99/arm-gnu-toolchain/bin"
# This is the Cygwin path to the location where I installed the CodeSourcery
# toolchain under windows. You will also have to edit this if you install
# the CodeSourcery toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery G++ Lite/bin"
# These are the Cygwin paths to the locations where I installed the Atollic
# toolchain under windows. You will also have to edit this if you install
# the Atollic toolchain in any other location. /usr/bin is added before
# the Atollic bin path because there is are binaries named gcc.exe and g++.exe
# at those locations as well.
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for ARM Pro 2.3.0/ARMTools/bin"
# This is the Cygwin path to the location where I build the buildroot
# toolchain.
export TOOLCHAIN_BIN="${WD}/../misc/buildroot/build_arm_nofpu/staging_dir/bin"