From f42c357654c3f7431073c12993479001ad175d2d Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Tue, 22 Apr 2014 07:52:08 -0600 Subject: [PATCH] examples/cpuhog and serialblaster from Bob Doiron --- configs/sam4s-xplained-pro/TODO.txt | 54 ++++++++++- configs/sam4s-xplained-pro/include/board.h | 6 +- configs/sam4s-xplained-pro/nsh/defconfig | 102 +++------------------ 3 files changed, 68 insertions(+), 94 deletions(-) diff --git a/configs/sam4s-xplained-pro/TODO.txt b/configs/sam4s-xplained-pro/TODO.txt index 0048df71de..5c1a088abd 100644 --- a/configs/sam4s-xplained-pro/TODO.txt +++ b/configs/sam4s-xplained-pro/TODO.txt @@ -1,12 +1,56 @@ - implement flash driver - see arch/arm/src/stm32/stm32_flash.c and related - - both banks could be mapped with care taken not to erase the active code. + - both banks could be mapped with care taken not to erase the active code. - perhaps the MPU could block code corruption? - - - once implemented, the free() cmd replacement can show flash information. + + - once implemented, the free() cmd replacement can show flash information. - Seen crashes when running serial ports below 921600 + + - COM34 (UART1, ttyS1) runs the smoothest with 'serialblaster' test... + the other two (UART0, USART1) seem to stutter... + + - created a cpuhog test. Each instance takes a semaphore, burns cpu for 6ms and then releases + the sem to exercises semaphores passing and a busy cpu. The first two instances become a + producer/consumer pair using a pipe (FIFO) to exercise the fileio data passing. + -> no crashes with 8 instances running. (No MMU, No BASEPRI) + -> no crashes with 8 instances running. (MMU + BASEPRI) + -> not however that the serial ports are very finicky with BASEPRI enabled! + This setup sends single charactes for each produced or consumed block, + and doesn't seem to have any issues: + NuttShell (NSH) + nsh> cpuhog > /dev/ttyS1 & + cpuhog [5:50] + nsh> cpuhog > /dev/ttyS2 & + cpuhog [7:50] + nsh> cpuhog & + cpuhog [8:50] + nsh> cpuhog 2 + cpuhog & + cpuhog [9:50] + nsh> cpuhog 3 + cpuhog & + cpuhog [10:50] + nsh> cpuhog 4 + cpuhog & + cpuhog [11:50] + nsh> cpuhog 5 + + nsh> cpuhog & + cpuhog [12:50] + nsh> cpuhog 6 + + nsh> cpuhog & + cpuhog [13:50] + nsh> cpuhog 7 + - USB serial not quite stable when pushing lots of data - + - UARTs don't use DMA. We may need this for high baudrates. - - Inbound hardware flow control requires dma. + - Inbound hardware flow control requires dma. + +Current Test: + +40mA: 120Mhz (240 MHz PLL) with SDCard mounted, UART0+UART1+USART1 enabled, USB Device availible (but nothing plugged in) +37.8mA: 120Mhz (120 MHz PLL) with SDCard mounted, UART0+UART1+USART1 enabled +16.9mA: "" with WFI added to up_idle() diff --git a/configs/sam4s-xplained-pro/include/board.h b/configs/sam4s-xplained-pro/include/board.h index 064494b513..05de1ea671 100644 --- a/configs/sam4s-xplained-pro/include/board.h +++ b/configs/sam4s-xplained-pro/include/board.h @@ -135,6 +135,7 @@ #define HSMCI_SDXFR_CLKDIV (2 << HSMCI_MR_CLKDIV_SHIFT) #define HSMCI_SDWIDEXFR_CLKDIV HSMCI_SDXFR_CLKDIV +#ifdef CONFIG_SAM34_UDP /* The PLL clock (USB_48M or UDPCK) is driven from the output of the PLL, * PLLACK. The PLL clock must be 48MHz. PLLACK can be divided down via the * PMC USB register to provide the PLL clock. So in order to use the USB @@ -144,8 +145,9 @@ * PLLACK = 192MHz, USBDIV=5, USB_48M = 192 MHz / (3 + 1) = 48MHz */ -#define BOARD_PMC_USBS (0) -#define BOARD_PMC_USBDIV (4 << PMC_USB_USBDIV_SHIFT) +# define BOARD_PMC_USBS (0) +# define BOARD_PMC_USBDIV (4 << PMC_USB_USBDIV_SHIFT) +#endif /* FLASH wait states: * diff --git a/configs/sam4s-xplained-pro/nsh/defconfig b/configs/sam4s-xplained-pro/nsh/defconfig index 0564f3843f..e25f354db1 100644 --- a/configs/sam4s-xplained-pro/nsh/defconfig +++ b/configs/sam4s-xplained-pro/nsh/defconfig @@ -50,7 +50,6 @@ CONFIG_ARCH_HAVE_STACKCHECK=y # # CONFIG_DEBUG_MM is not set # CONFIG_DEBUG_SCHED is not set -# CONFIG_DEBUG_USB is not set # CONFIG_DEBUG_FS is not set # CONFIG_DEBUG_LIB is not set # CONFIG_DEBUG_BINFMT is not set @@ -222,7 +221,7 @@ CONFIG_SAM34_SMC=y # CONFIG_SAM34_TWIS1 is not set CONFIG_SAM34_UART0=y CONFIG_SAM34_UART1=y -CONFIG_SAM34_UDP=y +# CONFIG_SAM34_UDP is not set # CONFIG_SAM34_USART0 is not set CONFIG_SAM34_USART1=y CONFIG_SAM34_WDT=y @@ -250,11 +249,6 @@ CONFIG_SAM34_GPIOC_IRQ=y CONFIG_SAM34_HSMCI_RDPROOF=y CONFIG_SAM34_HSMCI_WRPROOF=y -# -# AT91SAM3/4 USB Full Speed Device Controller driver (DCD) options -# -# CONFIG_SAM34_UDP_REGDEBUG is not set - # # AT91SAM3/4 Watchdog Configuration # @@ -265,7 +259,7 @@ CONFIG_WDT_MINTIME=2000 CONFIG_WDT_THREAD=y CONFIG_WDT_THREAD_NAME="wdog" CONFIG_WDT_THREAD_INTERVAL=2000 -CONFIG_WDT_THREAD_PRIORITY=99 +CONFIG_WDT_THREAD_PRIORITY=220 CONFIG_WDT_THREAD_STACKSIZE=512 # @@ -280,9 +274,8 @@ CONFIG_ARCH_HAVE_IRQPRIO=y CONFIG_ARCH_HAVE_VFORK=y # CONFIG_ARCH_HAVE_MMU is not set # CONFIG_ARCH_NAND_HWECC is not set -CONFIG_ARCH_IRQPRIO=y +# CONFIG_ARCH_IRQPRIO is not set CONFIG_ARCH_STACKDUMP=y -CONFIG_ARCH_USBDUMP=y # CONFIG_ENDIAN_BIG is not set # CONFIG_ARCH_IDLE_CUSTOM is not set CONFIG_ARCH_HAVE_RAMFUNCS=y @@ -438,7 +431,7 @@ CONFIG_PTHREAD_STACK_DEFAULT=4096 # # Device Drivers # -CONFIG_DISABLE_POLL=y +# CONFIG_DISABLE_POLL is not set CONFIG_DEV_NULL=y CONFIG_DEV_ZERO=y # CONFIG_LOOP is not set @@ -473,14 +466,13 @@ CONFIG_MMCSD_SDIO=y # CONFIG_SDIO_MUXBUS is not set CONFIG_SDIO_BLOCKSETUP=y # CONFIG_MTD is not set -# CONFIG_PIPES is not set +CONFIG_PIPES=y # CONFIG_PM is not set # CONFIG_POWER is not set # CONFIG_SENSORS is not set # CONFIG_SERCOMM_CONSOLE is not set CONFIG_SERIAL=y # CONFIG_DEV_LOWCONSOLE is not set -CONFIG_SERIAL_REMOVABLE=y # CONFIG_16550_UART is not set # CONFIG_ARCH_HAVE_UART is not set CONFIG_ARCH_HAVE_UART0=y @@ -510,6 +502,7 @@ CONFIG_ARCH_HAVE_USART1=y CONFIG_USART1_ISUART=y CONFIG_MCU_SERIAL=y CONFIG_STANDARD_SERIAL=y +CONFIG_SERIAL_NPOLLWAITERS=2 # CONFIG_SERIAL_TIOCSERGSTRUCT is not set CONFIG_UART0_SERIAL_CONSOLE=y # CONFIG_UART1_SERIAL_CONSOLE is not set @@ -521,7 +514,7 @@ CONFIG_UART0_SERIAL_CONSOLE=y # CONFIG_UART0_RXBUFSIZE=256 CONFIG_UART0_TXBUFSIZE=256 -CONFIG_UART0_BAUD=912600 +CONFIG_UART0_BAUD=115200 CONFIG_UART0_BITS=8 CONFIG_UART0_PARITY=0 CONFIG_UART0_2STOP=0 @@ -533,7 +526,7 @@ CONFIG_UART0_2STOP=0 # CONFIG_UART1_RXBUFSIZE=256 CONFIG_UART1_TXBUFSIZE=256 -CONFIG_UART1_BAUD=921600 +CONFIG_UART1_BAUD=115200 CONFIG_UART1_BITS=8 CONFIG_UART1_PARITY=0 CONFIG_UART1_2STOP=0 @@ -545,7 +538,7 @@ CONFIG_UART1_2STOP=0 # CONFIG_USART1_RXBUFSIZE=256 CONFIG_USART1_TXBUFSIZE=256 -CONFIG_USART1_BAUD=921600 +CONFIG_USART1_BAUD=115200 CONFIG_USART1_BITS=8 CONFIG_USART1_PARITY=0 CONFIG_USART1_2STOP=0 @@ -553,49 +546,7 @@ CONFIG_USART1_2STOP=0 # CONFIG_USART1_OFLOWCONTROL is not set # CONFIG_SERIAL_IFLOWCONTROL is not set # CONFIG_SERIAL_OFLOWCONTROL is not set -CONFIG_USBDEV=y - -# -# USB Device Controller Driver Options -# -# CONFIG_USBDEV_ISOCHRONOUS is not set -# CONFIG_USBDEV_DUALSPEED is not set -# CONFIG_USBDEV_SELFPOWERED is not set -CONFIG_USBDEV_BUSPOWERED=y -CONFIG_USBDEV_MAXPOWER=100 -# CONFIG_USBDEV_DMA is not set -CONFIG_ARCH_USBDEV_STALLQUEUE=y -CONFIG_USBDEV_TRACE=y -CONFIG_USBDEV_TRACE_NRECORDS=256 -CONFIG_USBDEV_TRACE_STRINGS=y - -# -# USB Device Class Driver Options -# -# CONFIG_USBDEV_COMPOSITE is not set -# CONFIG_PL2303 is not set -CONFIG_CDCACM=y -# CONFIG_CDCACM_CONSOLE is not set -CONFIG_CDCACM_EP0MAXPACKET=64 -CONFIG_CDCACM_EPINTIN=1 -CONFIG_CDCACM_EPINTIN_FSSIZE=64 -CONFIG_CDCACM_EPINTIN_HSSIZE=64 -CONFIG_CDCACM_EPBULKOUT=3 -CONFIG_CDCACM_EPBULKOUT_FSSIZE=64 -CONFIG_CDCACM_EPBULKOUT_HSSIZE=512 -CONFIG_CDCACM_EPBULKIN=2 -CONFIG_CDCACM_EPBULKIN_FSSIZE=64 -CONFIG_CDCACM_EPBULKIN_HSSIZE=512 -CONFIG_CDCACM_NWRREQS=4 -CONFIG_CDCACM_NRDREQS=4 -CONFIG_CDCACM_BULKIN_REQLEN=250 -CONFIG_CDCACM_RXBUFSIZE=1024 -CONFIG_CDCACM_TXBUFSIZE=1024 -CONFIG_CDCACM_VENDORID=0x0525 -CONFIG_CDCACM_PRODUCTID=0xa4a7 -CONFIG_CDCACM_VENDORSTR="NuttX" -CONFIG_CDCACM_PRODUCTSTR="CDC/ACM Serial" -# CONFIG_USBMSC is not set +# CONFIG_USBDEV is not set # CONFIG_USBHOST is not set # CONFIG_WIRELESS is not set @@ -688,8 +639,8 @@ CONFIG_BUILTIN=y # # Standard C Library Options # -CONFIG_STDIO_BUFFER_SIZE=64 -CONFIG_STDIO_LINEBUFFER=y +CONFIG_STDIO_BUFFER_SIZE=0 +# CONFIG_STDIO_LINEBUFFER is not set CONFIG_NUNGET_CHARS=2 # CONFIG_LIBM is not set # CONFIG_NOPRINTF_FIELDWIDTH is not set @@ -714,14 +665,7 @@ CONFIG_LIB_SENDFILE_BUFSIZE=512 # Non-standard Library Support # CONFIG_SCHED_WORKQUEUE=y -CONFIG_SCHED_HPWORK=y -CONFIG_SCHED_WORKPRIORITY=192 -CONFIG_SCHED_WORKPERIOD=50000 -CONFIG_SCHED_WORKSTACKSIZE=2048 -CONFIG_SCHED_LPWORK=y -CONFIG_SCHED_LPWORKPRIORITY=50 -CONFIG_SCHED_LPWORKPERIOD=50000 -CONFIG_SCHED_LPWORKSTACKSIZE=2048 +# CONFIG_SCHED_HPWORK is not set # CONFIG_LIB_KBDCODEC is not set # CONFIG_LIB_SLCDCODEC is not set @@ -753,6 +697,7 @@ CONFIG_BUILTIN_PROXY_STACKSIZE=1024 # CONFIG_EXAMPLES_BUTTONS is not set # CONFIG_EXAMPLES_CAN is not set # CONFIG_EXAMPLES_CONFIGDATA is not set +CONFIG_EXAMPLES_CPUHOG=y # CONFIG_EXAMPLES_CXXTEST is not set # CONFIG_EXAMPLES_DHCPD is not set # CONFIG_EXAMPLES_ELF is not set @@ -787,6 +732,7 @@ CONFIG_EXAMPLES_NSH_CXXINITIALIZE=y # CONFIG_EXAMPLES_RGMP is not set # CONFIG_EXAMPLES_ROMFS is not set # CONFIG_EXAMPLES_SENDMAIL is not set +CONFIG_EXAMPLES_SERIALBLASTER=y # CONFIG_EXAMPLES_SERLOOP is not set # CONFIG_EXAMPLES_SLCD is not set # CONFIG_EXAMPLES_SMART_TEST is not set @@ -910,12 +856,10 @@ CONFIG_NSH_NESTDEPTH=3 # CONFIG_NSH_DISABLE_LOOPS is not set # CONFIG_NSH_DISABLEBG is not set CONFIG_NSH_CONSOLE=y -# CONFIG_NSH_USBCONSOLE is not set # # USB Trace Support # -# CONFIG_NSH_USBDEV_TRACE is not set CONFIG_NSH_CONDEV="/dev/console" CONFIG_NSH_ARCHINIT=y @@ -1013,13 +957,6 @@ CONFIG_SYSTEM_STACKMONITOR_INTERVAL=2 # # USB CDC/ACM Device Commands # -CONFIG_SYSTEM_CDCACM=y -CONFIG_SYSTEM_CDCACM_DEVMINOR=0 -CONFIG_SYSTEM_CDCACM_TRACEINIT=y -CONFIG_SYSTEM_CDCACM_TRACECLASS=y -CONFIG_SYSTEM_CDCACM_TRACETRANSFERS=y -CONFIG_SYSTEM_CDCACM_TRACECONTROLLER=y -CONFIG_SYSTEM_CDCACM_TRACEINTERRUPTS=y # # USB Composite Device Commands @@ -1032,15 +969,6 @@ CONFIG_SYSTEM_CDCACM_TRACEINTERRUPTS=y # # USB Monitor # -CONFIG_SYSTEM_USBMONITOR=y -CONFIG_SYSTEM_USBMONITOR_STACKSIZE=1024 -CONFIG_SYSTEM_USBMONITOR_PRIORITY=50 -CONFIG_SYSTEM_USBMONITOR_INTERVAL=2 -CONFIG_SYSTEM_USBMONITOR_TRACEINIT=y -CONFIG_SYSTEM_USBMONITOR_TRACECLASS=y -CONFIG_SYSTEM_USBMONITOR_TRACETRANSFERS=y -CONFIG_SYSTEM_USBMONITOR_TRACECONTROLLER=y -CONFIG_SYSTEM_USBMONITOR_TRACEINTERRUPTS=y # # Zmodem Commands