diff --git a/arch/arm/include/sam34/sam3u_irq.h b/arch/arm/include/sam34/sam3u_irq.h index 9f7c4d771b..e3e8aded71 100644 --- a/arch/arm/include/sam34/sam3u_irq.h +++ b/arch/arm/include/sam34/sam3u_irq.h @@ -58,7 +58,7 @@ #define SAM_PID_PMC (5) /* Power Management Controller */ #define SAM_PID_EEFC0 (6) /* Enhanced Embedded Flash Controller 0 */ #define SAM_PID_EEFC1 (7) /* Enhanced Embedded Flash Controller 1 */ -#define SAM_PID_UART0 (8) /* Universal Asynchronous Receiver Transmitter */ +#define SAM_PID_UART0 (8) /* Universal Asynchronous Receiver Transmitter 0 */ #define SAM_PID_SMC (9) /* Static Memory Controller */ #define SAM_PID_PIOA (10) /* Parallel I/O Controller A */ #define SAM_PID_PIOB (11) /* Parallel I/O Controller B */ diff --git a/arch/arm/src/arm/Kconfig b/arch/arm/src/arm/Kconfig index 758dbaff0e..8756b9389d 100644 --- a/arch/arm/src/arm/Kconfig +++ b/arch/arm/src/arm/Kconfig @@ -7,8 +7,8 @@ comment "ARM Configuration Options" choice prompt "Toolchain Selection" - default ARM_TOOLCHAIN_CODESOURCERYW if HOST_WINDOWS - default ARM_TOOLCHAIN_GNU_EABI if !HOST_WINDOWS + default ARM_TOOLCHAIN_GNU_EABIW if HOST_WINDOWS + default ARM_TOOLCHAIN_GNU_EABIL if !HOST_WINDOWS config ARM_TOOLCHAIN_BUILDROOT bool "Buildroot (Cygwin or Linux)" @@ -30,8 +30,15 @@ config ARM_TOOLCHAIN_DEVKITARM bool "devkitARM GNU toolchain" depends on HOST_WINDOWS -config ARM_TOOLCHAIN_GNU_EABI - bool "Generic GNU EABI toolchain" +config ARM_TOOLCHAIN_GNU_EABIL + bool "Generic GNU EABI toolchain under Linux (or other POSIX environment)" + ---help--- + This option should work for any modern GNU toolchain (GCC 4.5 or newer) + configured for arm-none-eabi-. + +config ARM_TOOLCHAIN_GNU_EABIW + bool "Generic GNU EABI toolchain under Windows" + depends on HOST_WINDOWS ---help--- This option should work for any modern GNU toolchain (GCC 4.5 or newer) configured for arm-none-eabi-. diff --git a/arch/arm/src/arm/Toolchain.defs b/arch/arm/src/arm/Toolchain.defs index cd16d7ec98..6e1cff9682 100644 --- a/arch/arm/src/arm/Toolchain.defs +++ b/arch/arm/src/arm/Toolchain.defs @@ -51,6 +51,7 @@ ifeq ($(filter y, \ ),y) CONFIG_ARM_TOOLCHAIN ?= BUILDROOT endif + ifeq ($(filter y, \ $(CONFIG_DM320_CODESOURCERYL) \ $(CONFIG_LPC31_CODESOURCERYL) \ @@ -59,6 +60,7 @@ ifeq ($(filter y, \ ),y) CONFIG_ARM_TOOLCHAIN ?= CODESOURCERYL endif + ifeq ($(filter y, \ $(CONFIG_DM320_CODESOURCERYW) \ $(CONFIG_LPC31_CODESOURCERYW) \ @@ -67,6 +69,7 @@ ifeq ($(filter y, \ ),y) CONFIG_ARM_TOOLCHAIN ?= CODESOURCERYW endif + ifeq ($(filter y, \ $(CONFIG_DM320_DEVKITARM) \ $(CONFIG_LPC31_DEVKITARM) \ @@ -75,10 +78,17 @@ ifeq ($(filter y, \ ),y) CONFIG_ARM_TOOLCHAIN ?= DEVKITARM endif + ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_GNU_EABI) \ + $(CONFIG_ARM_TOOLCHAIN_GNU_EABIL) \ ),y) - CONFIG_ARM_TOOLCHAIN ?= GNU_EABI + CONFIG_ARM_TOOLCHAIN ?= GNU_EABIL +endif + +ifeq ($(filter y, \ + $(CONFIG_ARM_TOOLCHAIN_GNU_EABIW) \ + ),y) + CONFIG_ARM_TOOLCHAIN ?= GNU_EABIW endif # @@ -91,7 +101,7 @@ endif # Each toolchain definition should set: # # CROSSDEV The GNU toolchain triple (command prefix) -# ARCROSSDEV If required, an alternative prefix used when +# ARCROSSDEV If required, an alternative prefix used when # invoking ar and nm. # ARCHCPUFLAGS CPU-specific flags selecting the instruction set # FPU options, etc. @@ -143,9 +153,20 @@ endif # Generic GNU EABI toolchain on OS X, Linux or any typical Posix system -ifeq ($(CONFIG_ARM_TOOLCHAIN),GNU_EABI) +ifeq ($(CONFIG_ARM_TOOLCHAIN),GNU_EABIL) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- - MAXOPTIMIZATION = -O3 -endif + MAXOPTIMIZATION = -Os +endif + +# Generic GNU EABI toolchain under Windows + +ifeq ($(CONFIG_ARM_TOOLCHAIN),GNU_EABIW) + CROSSDEV ?= arm-none-eabi- + ARCROSSDEV ?= arm-none-eabi- + MAXOPTIMIZATION = -Os + ifneq ($(CONFIG_WINDOWS_NATIVE),y) + WINTOOL = y + endif +endif diff --git a/arch/arm/src/armv6-m/Kconfig b/arch/arm/src/armv6-m/Kconfig index e22ef5a8f4..9dc5ca2c4e 100644 --- a/arch/arm/src/armv6-m/Kconfig +++ b/arch/arm/src/armv6-m/Kconfig @@ -7,8 +7,8 @@ comment "ARMV6M Configuration Options" choice prompt "Toolchain Selection" - default ARMV6M_TOOLCHAIN_CODESOURCERYW if HOST_WINDOWS - default ARMV6M_TOOLCHAIN_GNU_EABI if !HOST_WINDOWS + default ARMV6M_TOOLCHAIN_GNU_EABIW if HOST_WINDOWS + default ARMV6M_TOOLCHAIN_GNU_EABIL if !HOST_WINDOWS config ARMV6M_TOOLCHAIN_ATOLLIC bool "Atollic Lite/Pro for Windows" @@ -38,8 +38,15 @@ config ARMV6M_TOOLCHAIN_DEVKITARM bool "devkitARM GNU toolchain" depends on HOST_WINDOWS -config ARMV6M_TOOLCHAIN_GNU_EABI - bool "Generic GNU EABI toolchain" +config ARMV6M_TOOLCHAIN_GNU_EABIL + bool "Generic GNU EABI toolchain under Linux (or other POSIX environment)" + ---help--- + This option should work for any modern GNU toolchain (GCC 4.5 or newer) + configured for arm-none-eabi. + +config ARMV6M_TOOLCHAIN_GNU_EABIW + bool "Generic GNU EABI toolchain under Windows" + depends on HOST_WINDOWS ---help--- This option should work for any modern GNU toolchain (GCC 4.5 or newer) configured for arm-none-eabi. diff --git a/arch/arm/src/armv6-m/Toolchain.defs b/arch/arm/src/armv6-m/Toolchain.defs index 9cd70a8803..5af6a65524 100644 --- a/arch/arm/src/armv6-m/Toolchain.defs +++ b/arch/arm/src/armv6-m/Toolchain.defs @@ -45,26 +45,37 @@ ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_ATOLLIC)),y) CONFIG_ARMV6M_TOOLCHAIN ?= ATOLLIC endif + ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_BUILDROOT)),y) CONFIG_ARMV6M_TOOLCHAIN ?= BUILDROOT endif + ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_CODEREDL)),y) CONFIG_ARMV6M_TOOLCHAIN ?= CODEREDL endif + ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_CODEREDW)),y) CONFIG_ARMV6M_TOOLCHAIN ?= CODEREDW endif + ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_CODESOURCERYL)),y) CONFIG_ARMV6M_TOOLCHAIN ?= CODESOURCERYL endif + ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_CODESOURCERYW)),y) CONFIG_ARMV6M_TOOLCHAIN ?= CODESOURCERYW endif + ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_DEVKITARM)),y) CONFIG_ARMV6M_TOOLCHAIN ?= DEVKITARM endif -ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_GNU_EABI)),y) - CONFIG_ARMV6M_TOOLCHAIN ?= GNU_EABI + +ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_GNU_EABIL)),y) + CONFIG_ARMV6M_TOOLCHAIN ?= GNU_EABIL +endif + +ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_GNU_EABIW)),y) + CONFIG_ARMV6M_TOOLCHAIN ?= GNU_EABIW endif # @@ -77,7 +88,7 @@ endif # Each toolchain definition should set: # # CROSSDEV The GNU toolchain triple (command prefix) -# ARCROSSDEV If required, an alternative prefix used when +# ARCROSSDEV If required, an alternative prefix used when # invoking ar and nm. # ARCHCPUFLAGS CPU-specific flags selecting the instruction set # options, etc. @@ -155,11 +166,20 @@ endif # Generic GNU EABI toolchain on OS X, Linux or any typical Posix system -ifeq ($(CONFIG_ARMV6M_TOOLCHAIN),GNU_EABI) +ifeq ($(CONFIG_ARMV6M_TOOLCHAIN),GNU_EABIL) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- ARCHCPUFLAGS = -mcpu=cortex-m0 -mthumb -march=armv6-m -mfloat-abi=soft -endif +endif + +ifeq ($(CONFIG_ARMV6M_TOOLCHAIN),GNU_EABIW) + CROSSDEV ?= arm-none-eabi- + ARCROSSDEV ?= arm-none-eabi- + ifneq ($(CONFIG_WINDOWS_NATIVE),y) + WINTOOL = y + endif + ARCHCPUFLAGS = -mcpu=cortex-m0 -mthumb -march=armv6-m -mfloat-abi=soft +endif # Individual tools may limit the optimizatin level but, by default, the # optimization level will be set to to -Os diff --git a/arch/arm/src/armv7-m/Kconfig b/arch/arm/src/armv7-m/Kconfig index a154a4c5c4..3f3cd95c03 100644 --- a/arch/arm/src/armv7-m/Kconfig +++ b/arch/arm/src/armv7-m/Kconfig @@ -7,8 +7,8 @@ comment "ARMV7M Configuration Options" choice prompt "Toolchain Selection" - default ARMV7M_TOOLCHAIN_CODESOURCERYW if HOST_WINDOWS - default ARMV7M_TOOLCHAIN_GNU_EABI if !HOST_WINDOWS + default ARMV7M_TOOLCHAIN_GNU_EABIW if HOST_WINDOWS + default ARMV7M_TOOLCHAIN_GNU_EABIL if !HOST_WINDOWS config ARMV7M_TOOLCHAIN_ATOLLIC bool "Atollic Lite/Pro for Windows" @@ -38,8 +38,15 @@ config ARMV7M_TOOLCHAIN_DEVKITARM bool "devkitARM GNU toolchain" depends on HOST_WINDOWS -config ARMV7M_TOOLCHAIN_GNU_EABI - bool "Generic GNU EABI toolchain" +config ARMV7M_TOOLCHAIN_GNU_EABIL + bool "Generic GNU EABI toolchain under Linux (or other POSIX environment)" + ---help--- + This option should work for any modern GNU toolchain (GCC 4.5 or newer) + configured for arm-none-eabi. + +config ARMV7M_TOOLCHAIN_GNU_EABIW + bool "Generic GNU EABI toolchain under Windows" + depends on HOST_WINDOWS ---help--- This option should work for any modern GNU toolchain (GCC 4.5 or newer) configured for arm-none-eabi. diff --git a/arch/arm/src/armv7-m/Toolchain.defs b/arch/arm/src/armv7-m/Toolchain.defs index 4de5b49f4a..ec8988a2d8 100644 --- a/arch/arm/src/armv7-m/Toolchain.defs +++ b/arch/arm/src/armv7-m/Toolchain.defs @@ -51,6 +51,7 @@ ifeq ($(filter y, \ ),y) CONFIG_ARMV7M_TOOLCHAIN ?= ATOLLIC endif + ifeq ($(filter y, \ $(CONFIG_KINETIS_BUILDROOT) \ $(CONFIG_LM_BUILDROOT) \ @@ -62,12 +63,14 @@ ifeq ($(filter y, \ ),y) CONFIG_ARMV7M_TOOLCHAIN ?= BUILDROOT endif + ifeq ($(filter y, \ $(CONFIG_LPC17_CODEREDL) \ $(CONFIG_ARMV7M_TOOLCHAIN_CODEREDL) \ ),y) CONFIG_ARMV7M_TOOLCHAIN ?= CODEREDL endif + ifeq ($(filter y, \ $(CONFIG_LPC17_CODEREDW) \ $(CONFIG_LPC43_CODEREDW) \ @@ -75,6 +78,7 @@ ifeq ($(filter y, \ ),y) CONFIG_ARMV7M_TOOLCHAIN ?= CODEREDW endif + ifeq ($(filter y, \ $(CONFIG_KINETIS_CODESOURCERYL) \ $(CONFIG_LM_CODESOURCERYL) \ @@ -86,6 +90,7 @@ ifeq ($(filter y, \ ),y) CONFIG_ARMV7M_TOOLCHAIN ?= CODESOURCERYL endif + ifeq ($(filter y, \ $(CONFIG_KINETIS_CODESOURCERYW) \ $(CONFIG_LM_CODESOURCERYW) \ @@ -97,6 +102,7 @@ ifeq ($(filter y, \ ),y) CONFIG_ARMV7M_TOOLCHAIN ?= CODESOURCERYW endif + ifeq ($(filter y, \ $(CONFIG_KINETIS_DEVKITARM) \ $(CONFIG_LM_DEVKITARM) \ @@ -108,11 +114,7 @@ ifeq ($(filter y, \ ),y) CONFIG_ARMV7M_TOOLCHAIN ?= DEVKITARM endif -ifeq ($(filter y, \ - $(CONFIG_ARMV7M_TOOLCHAIN_GNU_EABI) \ - ),y) - CONFIG_ARMV7M_TOOLCHAIN ?= GNU_EABI -endif + ifeq ($(filter y, \ $(CONFIG_STM32_RAISONANCE) \ $(CONFIG_ARMV7M_TOOLCHAIN_RAISONANCE) \ @@ -120,6 +122,18 @@ ifeq ($(filter y, \ CONFIG_ARMV7M_TOOLCHAIN ?= RAISONANCE endif +ifeq ($(filter y, \ + $(CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= GNU_EABIL +endif + +ifeq ($(filter y, \ + $(CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIW) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= GNU_EABIW +endif + # # Supported toolchains # @@ -130,7 +144,7 @@ endif # Each toolchain definition should set: # # CROSSDEV The GNU toolchain triple (command prefix) -# ARCROSSDEV If required, an alternative prefix used when +# ARCROSSDEV If required, an alternative prefix used when # invoking ar and nm. # ARCHCPUFLAGS CPU-specific flags selecting the instruction set # FPU options, etc. @@ -240,10 +254,10 @@ endif # Generic GNU EABI toolchain on OS X, Linux or any typical Posix system -ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),GNU_EABI) +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),GNU_EABIL) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- - MAXOPTIMIZATION = -O3 + MAXOPTIMIZATION = -Os ifeq ($(CONFIG_ARCH_CORTEXM4),y) ifeq ($(CONFIG_ARCH_FPU),y) ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard @@ -253,7 +267,27 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),GNU_EABI) else ifeq ($(CONFIG_ARCH_CORTEXM3),y) ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft endif -endif +endif + +# Generic GNU EABI toolchain under Windows + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),GNU_EABIW) + CROSSDEV ?= arm-none-eabi- + ARCROSSDEV ?= arm-none-eabi- + MAXOPTIMIZATION = -Os + ifeq ($(CONFIG_ARCH_CORTEXM4),y) + ifeq ($(CONFIG_ARCH_FPU),y) + ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard + else + ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft + endif + else ifeq ($(CONFIG_ARCH_CORTEXM3),y) + ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft + endif + ifneq ($(CONFIG_WINDOWS_NATIVE),y) + WINTOOL = y + endif +endif # Raisonance RIDE7 under Windows diff --git a/arch/arm/src/sam34/sam_serial.c b/arch/arm/src/sam34/sam_serial.c index 2afc302e54..4d28227c63 100644 --- a/arch/arm/src/sam34/sam_serial.c +++ b/arch/arm/src/sam34/sam_serial.c @@ -903,6 +903,7 @@ static int up_interrupt(int irq, void *context) { PANIC(); } + priv = (struct up_dev_s*)dev->priv; /* Loop until there are no characters to be transferred or, until we have @@ -937,13 +938,14 @@ static int up_interrupt(int irq, void *context) if ((pending & UART_INT_TXRDY) != 0) { - /* Transmit data regiser empty ... process outgoing bytes */ + /* Transmit data register empty ... process outgoing bytes */ uart_xmitchars(dev); handled = true; } } - return OK; + + return OK; } /**************************************************************************** @@ -1175,6 +1177,9 @@ void up_earlyserialinit(void) #ifdef TTYS4_DEV up_disableallints(TTYS4_DEV.priv, NULL); #endif +#ifdef TTYS5_DEV + up_disableallints(TTYS5_DEV.priv, NULL); +#endif /* Configuration whichever one is the console */ @@ -1216,6 +1221,9 @@ void up_serialinit(void) #ifdef TTYS4_DEV (void)uart_register("/dev/ttyS4", &TTYS4_DEV); #endif +#ifdef TTYS5_DEV + (void)uart_register("/dev/ttyS5", &TTYS5_DEV); +#endif } /****************************************************************************