From 508d96b571aff5b9bc4d55428b004fcc3d6dfbd5 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Wed, 11 Mar 2015 11:23:19 -0600 Subject: [PATCH] SAMV7-XULT: Enable I- and D-caches, correct polaty of LEDs --- arch/arm/src/armv7-m/nvic.h | 17 +++++++++++++++++ configs/samv71-xult/README.txt | 4 ++-- configs/samv71-xult/nsh/defconfig | 7 ++++--- configs/samv71-xult/src/sam_autoleds.c | 15 ++++----------- configs/samv71-xult/src/sam_userleds.c | 2 +- 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/arch/arm/src/armv7-m/nvic.h b/arch/arm/src/armv7-m/nvic.h index 7c58fc7f4be..bba30f44af2 100644 --- a/arch/arm/src/armv7-m/nvic.h +++ b/arch/arm/src/armv7-m/nvic.h @@ -662,6 +662,23 @@ # define NVIC_TCMCR_SZ_8MB (14 << NVIC_TCMCR_SZ_SHIFT) # define NVIC_TCMCR_SZ_16MB (15 << NVIC_TCMCR_SZ_SHIFT) +/* AHBP Control Register (AHBPCR, Cortex-M7) */ + +#define NVIC_AHBPCR_EN (1 << 0) /* Bit 0: AHBP enable */ +#define NVIC_AHBPCR_SZ_SHIFT (1) /* Bits 1-3: AHBP size */ +#define NVIC_AHBPCR_SZ_MASK (7 << NVIC_AHBPCR_SZ_SHIFT) +# define NVIC_AHBPCR_SZ_DISABLED (0 << NVIC_AHBPCR_SZ_SHIFT) +# define NVIC_AHBPCR_SZ_64MB (1 << NVIC_AHBPCR_SZ_SHIFT) +# define NVIC_AHBPCR_SZ_128MB (2 << NVIC_AHBPCR_SZ_SHIFT) +# define NVIC_AHBPCR_SZ_256MB (3 << NVIC_AHBPCR_SZ_SHIFT) +# define NVIC_AHBPCR_SZ_512MB (4 << NVIC_AHBPCR_SZ_SHIFT) + +/* L1 Cache Control Register (CACR, Cortex-M7) */ + +#define NVIC_CACR_SIWT (1 << 0) /* Bit 0: Shared cacheable-is-WT for data cache */ +#define NVIC_CACR_ECCDIS (1 << 1) /* Bit 1: Enables ECC in the instruction and data cache */ +#define NVIC_CACR_FORCEWT (1 << 2) /* Bit 2: Enables Force Write-Through in the data cache */ + /******************************************************************************************** * Public Types ********************************************************************************************/ diff --git a/configs/samv71-xult/README.txt b/configs/samv71-xult/README.txt index fc564b2842d..e41c22e7373 100644 --- a/configs/samv71-xult/README.txt +++ b/configs/samv71-xult/README.txt @@ -276,8 +276,8 @@ Configuration sub-directories 4. Performance-related Configuration settings: - # CONFIG_ARMV7M_ICACHE is not set : Can be enabled, not verified - # CONFIG_ARMV7M_DCACHE is not set : Can be enabled, not verified + CONFIG_ARMV7M_ICACHE=y : Instruction cache is enabled + CONFIG_ARMV7M_DCACHE=y : Data cache is enabled # CONFIG_ARCH_FPU is not set : Can be enabled, not verified # CONFIG_ARMV7M_ITCM is not set : Support not yet in place # CONFIG_ARMV7M_DTCM is not set : Support not yet in place diff --git a/configs/samv71-xult/nsh/defconfig b/configs/samv71-xult/nsh/defconfig index 55eabdab85c..1dd7699e035 100644 --- a/configs/samv71-xult/nsh/defconfig +++ b/configs/samv71-xult/nsh/defconfig @@ -120,8 +120,8 @@ CONFIG_ARCH_HAVE_DPFPU=y # CONFIG_ARMV7M_HAVE_ICACHE=y CONFIG_ARMV7M_HAVE_DCACHE=y -# CONFIG_ARMV7M_ICACHE is not set -# CONFIG_ARMV7M_DCACHE is not set +CONFIG_ARMV7M_ICACHE=y +CONFIG_ARMV7M_DCACHE=y CONFIG_ARMV7M_HAVE_ITCM=y CONFIG_ARMV7M_HAVE_DTCM=y # CONFIG_ARMV7M_ITCM is not set @@ -255,7 +255,7 @@ CONFIG_ARCH_HAVE_RAMVECTORS=y # # Board Settings # -CONFIG_BOARD_LOOPSPERMSEC=42445 +CONFIG_BOARD_LOOPSPERMSEC=51262 # CONFIG_ARCH_CALIBRATION is not set # @@ -509,6 +509,7 @@ CONFIG_MCU_SERIAL=y CONFIG_STANDARD_SERIAL=y # CONFIG_SERIAL_IFLOWCONTROL is not set # CONFIG_SERIAL_OFLOWCONTROL is not set +# CONFIG_SERIAL_TIOCSERGSTRUCT is not set CONFIG_ARCH_HAVE_SERIAL_TERMIOS=y # CONFIG_SERIAL_TERMIOS is not set CONFIG_UART3_SERIAL_CONSOLE=y diff --git a/configs/samv71-xult/src/sam_autoleds.c b/configs/samv71-xult/src/sam_autoleds.c index 247f3a48839..e1e085feb17 100644 --- a/configs/samv71-xult/src/sam_autoleds.c +++ b/configs/samv71-xult/src/sam_autoleds.c @@ -139,16 +139,13 @@ void board_led_initialize(void) void board_led_on(int led) { - bool led0on = false; /* High illuminates */ - bool led1on = false; /* High illuminates */ - switch (led) { case 0: /* LED_STARTED, LED_HEAPALLOCATE, LED_IRQSENABLED */ break; case 1: /* LED_STACKCREATED */ - led0on = true; + sam_gpiowrite(GPIO_LED0, false); /* Low illuminates */ break; default: @@ -156,12 +153,9 @@ void board_led_on(int led) return; case 3: /* LED_PANIC */ - led1on = true; + sam_gpiowrite(GPIO_LED1, false); /* Low illuminates */ break; } - - sam_gpiowrite(GPIO_LED0, led0on); - sam_gpiowrite(GPIO_LED1, led1on); } /**************************************************************************** @@ -170,10 +164,9 @@ void board_led_on(int led) void board_led_off(int led) { - if (led != 2) + if (led == 3) { - sam_gpiowrite(GPIO_LED0, false); /* High illuminates */ - sam_gpiowrite(GPIO_LED1, false); /* High illuminates */ + sam_gpiowrite(GPIO_LED1, true); /* High extinguishes */ } } diff --git a/configs/samv71-xult/src/sam_userleds.c b/configs/samv71-xult/src/sam_userleds.c index 465dca4befa..aea9575985e 100644 --- a/configs/samv71-xult/src/sam_userleds.c +++ b/configs/samv71-xult/src/sam_userleds.c @@ -101,7 +101,7 @@ void sam_setled(int led, bool ledon) void sam_setleds(uint8_t ledset) { - /* Hight illuminates */ + /* Low illuminates */ sam_gpiowrite(GPIO_LED0, (ledset & BOARD_LED0_BIT) == 0); sam_gpiowrite(GPIO_LED1, (ledset & BOARD_LED1_BIT) == 0);