From a25451807c7806c182b03d148accead73d93849f Mon Sep 17 00:00:00 2001 From: patacongo Date: Thu, 26 Apr 2012 22:10:40 +0000 Subject: Add completed LCD driver for the STM3240G-EVAL git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4662 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/configs/Kconfig | 2 +- nuttx/configs/stm3240g-eval/Kconfig | 58 ++++++ nuttx/configs/stm3240g-eval/README.txt | 53 ++++- nuttx/configs/stm3240g-eval/nsh/defconfig | 310 ++++++++++++++++++++++++++++++ nuttx/configs/stm3240g-eval/src/up_lcd.c | 275 +------------------------- 5 files changed, 428 insertions(+), 270 deletions(-) (limited to 'nuttx/configs') diff --git a/nuttx/configs/Kconfig b/nuttx/configs/Kconfig index 61d633edb..834f54857 100644 --- a/nuttx/configs/Kconfig +++ b/nuttx/configs/Kconfig @@ -334,7 +334,7 @@ config ARCH_BOARD_STM3220G_EVAL microcontroller (ARM Cortex-M3). config ARCH_BOARD_STM3240G_EVAL - bool "STMicro STM3210G-EVAL development board" + bool "STMicro STM3240G-EVAL development board" depends on ARCH_CHIP_STM32F407IG ---help--- STMicro STM3240G-EVAL development board based on the STMicro STM32F103ZET6 diff --git a/nuttx/configs/stm3240g-eval/Kconfig b/nuttx/configs/stm3240g-eval/Kconfig index a451e1b73..e47bd4121 100644 --- a/nuttx/configs/stm3240g-eval/Kconfig +++ b/nuttx/configs/stm3240g-eval/Kconfig @@ -16,4 +16,62 @@ config ARCH_BUTTONS ---help--- "Support interfaces to use buttons provided by the board." +config STM3240G_LCD + bool "Select support for the STM3210E-EVAL LCD" + default y + depends on STM32_FSMC + +choice + prompt "STM3240G-EVAL LCD Orientation" + default LCD_LANDSCAPE + depends on STM3240G_LCD + +config LCD_LANDSCAPE + bool "320x240 landscape display" + ---help--- + Define for 320x240 display "landscape" support. Default is this 320x240 + "landscape" orientation (this setting is informative only... not used). + +config LCD_PORTRAIT + bool "240x320 portrait display" + ---help--- + Define for 240x320 display "portrait" orientation support. In this + orientation, the STM3210E-EVAL's LCD ribbon cable is at the bottom of + the display. Default is 320x240 "landscape" orientation. + +config LCD_RPORTRAIT + bool "240x320 reverse portrait display" + ---help--- + Define for 240x320 display "reverse portrait" orientation support. In + this orientation, the STM3210E-EVAL's LCD ribbon cable is at the top + of the display. Default is 320x240 "landscape" orientation. + +endchoice + +config LCD_RDSHIFT + int "LCD data shift" + default 5 + depends on STM3240G_LCD + ---help--- + When reading 16-bit gram data, there appears to be a shift in the returned + data. This value fixes the offset. Default 5. + +config CONFIG_STM32_ILI9320_DISABLE + bool "Disable LCD_ILI9320 (and LCD_ILI9321) support" + default n + depends on STM3240G_LCD + ---help--- + The LCD driver dynamically selects the LCD based on the reported LCD + ID value. However, code size can be reduced by suppressing support for + individual LCDs using this option. + +config CONFIG_STM32_ILI9325_DISABLE + bool "Disable LCD_ILI9325 support" + default n + depends on STM3240G_LCD + ---help--- + The LCD driver dynamically selects the LCD based on the reported LCD + ID value. However, code size can be reduced by suppressing support for + individual LCDs using this option + endif diff --git a/nuttx/configs/stm3240g-eval/README.txt b/nuttx/configs/stm3240g-eval/README.txt index b93ee07ef..e38dbfbf5 100755 --- a/nuttx/configs/stm3240g-eval/README.txt +++ b/nuttx/configs/stm3240g-eval/README.txt @@ -768,6 +768,42 @@ STM3240G-EVAL-specific Configuration Options STM3240G-EVAL LCD Hardware Configuration + The LCD driver supports the following LCDs on the STM324xG_EVAL board: + + AM-240320L8TNQW00H (LCD_ILI9320 or LCD_ILI9321) OR + AM-240320D5TOQW01H (LCD_ILI9325) + + Configuration options. + + CONFIG_LCD_LANDSCAPE - Define for 320x240 display "landscape" + support. Default is this 320x240 "landscape" orientation + (this setting is informative only... not used). + CONFIG_LCD_PORTRAIT - Define for 240x320 display "portrait" + orientation support. In this orientation, the STM3210E-EVAL's + LCD ribbon cable is at the bottom of the display. Default is + 320x240 "landscape" orientation. + CONFIG_LCD_RPORTRAIT - Define for 240x320 display "reverse + portrait" orientation support. In this orientation, the + STM3210E-EVAL's LCD ribbon cable is at the top of the display. + Default is 320x240 "landscape" orientation. + CONFIG_LCD_BACKLIGHT - Define to support a backlight. + CONFIG_LCD_PWM - If CONFIG_STM32_TIM1 is also defined, then an + adjustable backlight will be provided using timer 1 to generate + various pulse widthes. The granularity of the settings is + determined by CONFIG_LCD_MAXPOWER. If CONFIG_LCD_PWM (or + CONFIG_STM32_TIM1) is not defined, then a simple on/off backlight + is provided. + CONFIG_LCD_RDSHIFT - When reading 16-bit gram data, there appears + to be a shift in the returned data. This value fixes the offset. + Default 5. + + The LCD driver dynamically selects the LCD based on the reported LCD + ID value. However, code size can be reduced by suppressing support for + individual LCDs using: + + CONFIG_STM32_ILI9320_DISABLE (includes ILI9321) + CONFIG_STM32_ILI9325_DISABLE + Configurations ============== @@ -909,7 +945,7 @@ Where is one of the following: CONFIG_STM32_IWDG=y : Enables the IWDG timer facility (but not both) The WWDG watchdog is driven off the (fast) 42MHz PCLK1 and, as result, - has a maximum timeout value of 49 milliseconds. for WWDG watchdog, you + has a maximum timeout value of 49 milliseconds. For WWDG watchdog, you should also add the fillowing to the configuration file: CONFIG_EXAMPLES_WATCHDOG_PINGDELAY=20 @@ -917,6 +953,21 @@ Where is one of the following: The IWDG timer has a range of about 35 seconds and should not be an issue. + 7. Adding LCD and graphics support: + + appconfig (apps/.config): Enable the application configurations that you + want to use. Asexamples: + + CONFIGURED_APPS += examples/nx : Pick one or more + CONFIGURED_APPS += examples/nxhello : + CONFIGURED_APPS += examples/nximage : + CONFIGURED_APPS += examples/nxlines : + + defconfig (nuttx/.config): + + CONFIG_STM32_FSMC=y : FSMC support is required for the LCD + CONFIG_NX=y : Enable graphics suppport + 8. This configuration requires that jumper JP22 be set to enable RS-232 operation. nsh2: diff --git a/nuttx/configs/stm3240g-eval/nsh/defconfig b/nuttx/configs/stm3240g-eval/nsh/defconfig index 66bf40077..3e6e768e5 100644 --- a/nuttx/configs/stm3240g-eval/nsh/defconfig +++ b/nuttx/configs/stm3240g-eval/nsh/defconfig @@ -527,6 +527,7 @@ CONFIG_DEBUG_ANALOG=n CONFIG_DEBUG_PWM=n CONFIG_DEBUG_CAN=n CONFIG_DEBUG_I2C=n + CONFIG_HAVE_CXX=y CONFIG_HAVE_CXXINITIALIZE=y CONFIG_MM_REGIONS=2 @@ -1197,6 +1198,67 @@ CONFIG_NX_BLOCKING=y CONFIG_NX_MXSERVERMSGS=32 CONFIG_NX_MXCLIENTMSGS=16 +# +# NxConsole Configuration Settings: +# +# CONFIG_NXCONSOLE +# Enables building of the NxConsole driver. +# CONFIG_NXCONSOLE_BPP +# Currently, NxConsole supports only a single pixel depth. This +# configuration setting must be provided to support that single pixel depth. +# Default: The smallest enabled pixel depth. (see CONFIG_NX_DISABLE_*BPP) +# CONFIG_NXCONSOLE_NOGETRUN +# NxConsole needs to know if it can read from the LCD or not. If reading +# from the LCD is supported, then NxConsole can do more efficient +# scrolling. Default: Supported +# CONFIG_NXCONSOLE_MXCHARS +# NxConsole needs to remember every character written to the console so +# that it can redraw the window. This setting determines the size of some +# internal memory allocations used to hold the character data. Default: 128. +# CONFIG_NXCONSOLE_CACHESIZE +# NxConsole supports caching of rendered fonts. This font caching is required +# for two reasons: (1) First, it improves text performance, but more +# importantly (2) it preserves the font memory. Since the NX server runs on +# a separate server thread, it requires that the rendered font memory persist +# until the server has a chance to render the font. (NOTE: There is still +# inherently a race condition in this!). Unfortunately, the font cache would +# be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE setting +# will control the size of the font cache (in number of glyphs). Only that +# number of the most recently used glyphs will be retained. Default: 16. +# CONFIG_NXCONSOLE_LINESEPARATION +# This the space (in rows) between each row of test. Default: 2 +# CONFIG_NXCONSOLE_NOWRAP +# By default, lines will wrap when the test reaches the right hand side +# of the window. This setting can be defining to change this behavior so +# that the text is simply truncated until a new line is encountered. +# +CONFIG_NXCONSOLE=n +CONFIG_NXCONSOLE_BPP=16 +CONFIG_NXCONSOLE_NOGETRUN=y +CONFIG_NXCONSOLE_MXCHARS=256 +CONFIG_NXCONSOLE_CACHESIZE=32 +# CONFIG_NXCONSOLE_LINESEPARATION +# CONFIG_NXCONSOLE_NOWRAP + +# +# STM3240G-EVAL LCD Hardware Configuration +# +# CONFIG_LCD_LANDSCAPE - Define for 320x240 display "landscape" +# support. Default is this 320x240 "landscape" orientation +# (this setting is informative only... not used). +# CONFIG_LCD_PORTRAIT - Define for 240x320 display "portrait" +# orientation support. In this orientation, the STM3240G-EVAL's +# LCD ribbon cable is at the bottom of the display. Default is +# 320x240 "landscape" orientation. +# CONFIG_LCD_RPORTRAIT - Define for 240x320 display "reverse +# portrait" orientation support. In this orientation, the +# STM3240G-EVAL's LCD ribbon cable is at the top of the display. +# Default is 320x240 "landscape" orientation. +# +CONFIG_LCD_LANDSCAPE=n +CONFIG_LCD_PORTRAIT=n +CONFIG_LCD_RPORTRAIT=y + # # Settings for examples/uip # @@ -1366,6 +1428,254 @@ CONFIG_EXAMPLES_USBSERIAL_TRACEINTERRUPTS=n # built-in, the default is 32. Otherwise messages are sent and received # indefinitely. +# +# Settings for examples/nx +# +# CONFIG_EXAMPLES_NX_BUILTIN -- Build the NX example as a "built-in" +# that can be executed from the NSH command line +# CONFIG_EXAMPLES_NX_VPLANE -- The plane to select from the frame- +# buffer driver for use in the test. Default: 0 +# CONFIG_EXAMPLES_NX_DEVNO - The LCD device to select from the LCD +# driver for use in the test: Default: 0 +# CONFIG_EXAMPLES_NX_BGCOLOR -- The color of the background. Default depends on +# CONFIG_EXAMPLES_NX_BPP. +# CONFIG_EXAMPLES_NX_COLOR1 -- The color of window 1. Default depends on +# CONFIG_EXAMPLES_NX_BPP. +# CONFIG_EXAMPLES_NX_COLOR2 -- The color of window 2. Default depends on +# CONFIG_EXAMPLES_NX_BPP. +# CONFIG_EXAMPLES_NX_TBCOLOR -- The color of the toolbar. Default depends on +# CONFIG_EXAMPLES_NX_BPP. +# CONFIG_EXAMPLES_NX_FONTID - Selects the font (see font ID numbers in +# include/nuttx/nx/nxfonts.h) +# CONFIG_EXAMPLES_NX_FONTCOLOR -- The color of the toolbar. Default depends on +# CONFIG_EXAMPLES_NX_BPP. +# CONFIG_EXAMPLES_NX_BPP -- Pixels per pixel to use. Valid options +# include 2, 4, 8, 16, 24, and 32. Default is 32. +# CONFIG_EXAMPLES_NX_RAWWINDOWS -- Use raw windows; Default is to +# use pretty, framed NXTK windows with toolbars. +# CONFIG_EXAMPLES_NX_STACKSIZE -- The stacksize to use when creating +# the NX server. Default 2048 +# CONFIG_EXAMPLES_NX_CLIENTPRIO -- The client priority. Default: 80 +# CONFIG_EXAMPLES_NX_SERVERPRIO -- The server priority. Default: 120 +# CONFIG_EXAMPLES_NX_NOTIFYSIGNO -- The signal number to use with +# nx_eventnotify(). Default: 4 +# +CONFIG_EXAMPLES_NX_BUILTIN=y +CONFIG_EXAMPLES_NX_VPLANE=0 +CONFIG_EXAMPLES_NX_DEVNO=0 +CONFIG_EXAMPLES_NX_BGCOLOR=0x0011 +CONFIG_EXAMPLES_NX_COLOR1=0xaedc +CONFIG_EXAMPLES_NX_COLOR2=0xe7ff +CONFIG_EXAMPLES_NX_TBCOLOR=0xd69a +CONFIG_EXAMPLES_NX_FONTID=0 +CONFIG_EXAMPLES_NX_FONTCOLOR=0x0000 +CONFIG_EXAMPLES_NX_BPP=16 +CONFIG_EXAMPLES_NX_RAWWINDOWS=n +CONFIG_EXAMPLES_NX_STACKSIZE=2048 +CONFIG_EXAMPLES_NX_CLIENTPRIO=80 +CONFIG_EXAMPLES_NX_SERVERPRIO=120 +CONFIG_EXAMPLES_NX_NOTIFYSIGNO=4 +CONFIG_EXAMPLES_NX_EXTERNINIT=n + +# +# Settings for examples/nxhello +# +# CONFIG_EXAMPLES_NXHELLO_BUILTIN -- Build the NXHELLO example as a "built-in" +# that can be executed from the NSH command line +# CONFIG_EXAMPLES_NXHELLO_VPLANE -- The plane to select from the frame- +# buffer driver for use in the test. Default: 0 +# CONFIG_EXAMPLES_NXHELLO_DEVNO - The LCD device to select from the LCD +# driver for use in the test: Default: 0 +# CONFIG_EXAMPLES_NXHELLO_BGCOLOR -- The color of the background. Default +# depends on CONFIG_EXAMPLES_NXHELLO_BPP. +# CONFIG_EXAMPLES_NXHELLO_FONTID - Selects the font (see font ID numbers in +# include/nuttx/nx/nxfonts.h) +# CONFIG_EXAMPLES_NXHELLO_FONTCOLOR -- The color of the fonts used in the +# background window. Default depends on CONFIG_EXAMPLES_NXHELLO_BPP. +# CONFIG_EXAMPLES_NXHELLO_BPP -- Pixels per pixel to use. Valid options +# include 2, 4, 8, 16, 24, and 32. Default is 32. +# CONFIG_EXAMPLES_NXHELLO_EXTERNINIT - The driver for the graphics device on +# this platform requires some unusual initialization. This is the +# for, for example, SPI LCD/OLED devices. If this configuration is +# selected, then the platform code must provide an LCD initialization +# function. +# +CONFIG_EXAMPLES_NXHELLO_BUILTIN=y +CONFIG_EXAMPLES_NXHELLO_VPLANE=0 +CONFIG_EXAMPLES_NXHELLO_DEVNO=0 +CONFIG_EXAMPLES_NXHELLO_BGCOLOR=0x0011 +CONFIG_EXAMPLES_NXHELLO_FONTID=6 +CONFIG_EXAMPLES_NXHELLO_FONTCOLOR=0xffdf +CONFIG_EXAMPLES_NXHELLO_BPP=16 +CONFIG_EXAMPLES_NXHELLO_EXTERNINIT=n + +# +# Settings for examples/nximage +# +# CONFIG_EXAMPLES_NXIMAGE_BUILTIN -- Build the NXIMAGE example as a "built-in" +# that can be executed from the NSH command line +# CONFIG_EXAMPLES_NXIMAGE_VPLANE -- The plane to select from the frame- +# buffer driver for use in the test. Default: 0 +# CONFIG_EXAMPLES_NXIMAGE_DEVNO - The LCD device to select from the LCD +# driver for use in the test: Default: 0 +# CONFIG_EXAMPLES_NXIMAGE_BPP -- Pixels per pixel to use. Valid options +# include 8, 16, and 24. Default is 16. +# CONFIG_EXAMPLES_NXIMAGE_XSCALEp5, CONFIG_EXAMPLES_NXIMAGE_XSCALE1p5, +# CONFIG_EXAMPLES_NXIMAGE_XSCALE2p0 -- The logo image width is 160 columns. +# One of these may be defined to rescale the image horizontally by .5, 1.5, +# or 2.0. +# CONFIG_EXAMPLES_NXIMAGE_YSCALEp5, CONFIG_EXAMPLES_NXIMAGE_YSCALE1p5, +# CONFIG_EXAMPLES_NXIMAGE_YSCALE2p0 -- The logo image height is 160 rows. +# One of these may be defined to rescale the image vertically by .5, 1.5, +# or 2.0. +# CONFIG_EXAMPLES_NXIMAGE_EXTERNINIT - The driver for the graphics device on +# this platform requires some unusual initialization. This is the +# for, for example, SPI LCD/OLED devices. If this configuration is +# selected, then the platform code must provide an LCD initialization +# function. +# +CONFIG_EXAMPLES_NXIMAGE_BUILTIN=y +CONFIG_EXAMPLES_NXIMAGE_VPLANE=0 +CONFIG_EXAMPLES_NXIMAGE_DEVNO=0 +CONFIG_EXAMPLES_NXIMAGE_BPP=16 +CONFIG_EXAMPLES_NXIMAGE_XSCALEp5=n +CONFIG_EXAMPLES_NXIMAGE_XSCALE1p5=y +CONFIG_EXAMPLES_NXIMAGE_XSCALE2p0=n +CONFIG_EXAMPLES_NXIMAGE_YSCALEp5=n +CONFIG_EXAMPLES_NXIMAGE_YSCALE1p5=y +CONFIG_EXAMPLES_NXIMAGE_YSCALE2p0=n +CONFIG_EXAMPLES_NXIMAGE_EXTERNINIT=n + +# +# Settings for examples/nxlines +# +# CONFIG_EXAMPLES_NXLINES_BUILTIN -- Build the NXLINES example as a "built-in" +# that can be executed from the NSH command line +# CONFIG_EXAMPLES_NXLINES_VPLANE -- The plane to select from the frame- +# buffer driver for use in the test. Default: 0 +# CONFIG_EXAMPLES_NXLINES_DEVNO - The LCD device to select from the LCD +# driver for use in the test: Default: 0 +# CONFIG_EXAMPLES_NXLINES_BGCOLOR -- The color of the background. Default +# depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_LINEWIDTH - Selects the width of the lines in +# pixels (default: 16) +# CONFIG_EXAMPLES_NXLINES_LINECOLOR -- The color of the central lines drawn +# in the background window. Default depends on CONFIG_EXAMPLES_NXLINES_BPP +# (there really is no meaningful default). +# CONFIG_EXAMPLES_NXLINES_BORDERWIDTH -- The width of the circular border +# drawn in the background window. (default: 4). +# CONFIG_EXAMPLES_NXLINES_BORDERCOLOR -- The color of the circular border +# drawn in the background window. Default depends on CONFIG_EXAMPLES_NXLINES_BPP +# (there really is no meaningful default). +# CONFIG_EXAMPLES_NXLINES_CIRCLECOLOR -- The color of the circular region +# filled in the background window. Default depends on CONFIG_EXAMPLES_NXLINES_BPP +# (there really is no meaningful default). +# CONFIG_EXAMPLES_NXLINES_BPP -- Pixels per pixel to use. Valid options +# include 2, 4, 8, 16, 24, and 32. Default is 16. +# CONFIG_EXAMPLES_NXLINES_EXTERNINIT - The driver for the graphics device on +# this platform requires some unusual initialization. This is the +# for, for example, SPI LCD/OLED devices. If this configuration is +# selected, then the platform code must provide an LCD initialization +# function. +# +CONFIG_EXAMPLES_NXLINES_BUILTIN=n +CONFIG_EXAMPLES_NXLINES_VPLANE=0 +CONFIG_EXAMPLES_NXLINES_DEVNO=0 +CONFIG_EXAMPLES_NXLINES_BGCOLOR=0x0320 +CONFIG_EXAMPLES_NXLINES_LINEWIDTH=16 +CONFIG_EXAMPLES_NXLINES_LINECOLOR=0xffe0 +CONFIG_EXAMPLES_NXLINES_BORDERWIDTH=4 +CONFIG_EXAMPLES_NXLINES_BORDERCOLOR=0xffe0 +CONFIG_EXAMPLES_NXLINES_CIRCLECOLOR=0xf7bb +CONFIG_EXAMPLES_NXLINES_BPP=16 +CONFIG_EXAMPLES_NXLINES_EXTERNINIT=n + +# +# Settings for examples/usbstorage +# +# CONFIG_EXAMPLES_USBMSC_BUILTIN +# This example can be built as two NSH "built-in" commands if this option +# is selection: 'msconn' will connect the USB mass storage device; 'msdis' +# will disconnect the USB storage device. +# CONFIG_EXAMPLES_USBMSC_NLUNS +# Defines the number of logical units (LUNs) exported by the USB storage +# driver. Each LUN corresponds to one exported block driver (or partition +# of a block driver). May be 1, 2, or 3. Default is 1. +# CONFIG_EXAMPLES_USBMSC_DEVMINOR1 +# The minor device number of the block driver for the first LUN. For +# example, N in /dev/mmcsdN. Used for registering the block driver. Default +# is zero. +# CONFIG_EXAMPLES_USBMSC_DEVPATH1 +# The full path to the registered block driver. Default is "/dev/mmcsd0" +# CONFIG_EXAMPLES_USBMSC_DEVMINOR2 and CONFIG_EXAMPLES_USBMSC_DEVPATH2 +# Similar parameters that would have to be provided if CONFIG_EXAMPLES_USBMSC_NLUNS +# is 2 or 3. No defaults. +# CONFIG_EXAMPLES_USBMSC_DEVMINOR3 and CONFIG_EXAMPLES_USBMSC_DEVPATH3 +# Similar parameters that would have to be provided if CONFIG_EXAMPLES_USBMSC_NLUNS +# is 3. No defaults. +# CONFIG_EXAMPLES_USBMSC_DEBUGMM +# Enables some debug tests to check for memory usage and memory leaks. +# +# If CONFIG_USBDEV_TRACE is enabled (or CONFIG_DEBUG and CONFIG_DEBUG_USB), then +# the example code will also manage the USB trace output. The amount of trace output +# can be controlled using: +# +# CONFIG_EXAMPLES_USBMSC_TRACEINIT +# Show initialization events +# CONFIG_EXAMPLES_USBMSC_TRACECLASS +# Show class driver events +# CONFIG_EXAMPLES_USBMSC_TRACETRANSFERS +# Show data transfer events +# CONFIG_EXAMPLES_USBMSC_TRACECONTROLLER +# Show controller events +# CONFIG_EXAMPLES_USBMSC_TRACEINTERRUPTS +# Show interrupt-related events. +# +CONFIG_EXAMPLES_USBMSC_BUILTIN=y +CONFIG_EXAMPLES_USBMSC_NLUNS=1 +CONFIG_EXAMPLES_USBMSC_DEVMINOR1=0 +CONFIG_EXAMPLES_USBMSC_DEVPATH1="/dev/mmcsd0" +CONFIG_EXAMPLES_USBMSC_DEBUGMM=n +CONFIG_EXAMPLES_USBMSC_TRACEINIT=n +CONFIG_EXAMPLES_USBMSC_TRACECLASS=n +CONFIG_EXAMPLES_USBMSC_TRACETRANSFERS=n +CONFIG_EXAMPLES_USBMSC_TRACECONTROLLER=n +CONFIG_EXAMPLES_USBMSC_TRACEINTERRUPTS=n + +# +# Settings for examples/watchdog +# +# This test depends on these specific Watchdog/NSH configurations settings (your +# specific watchdog hardware settings might require additional settings). +# +# CONFIG_WATCHDOG- Enables watchdog timer support support. +# CONFIG_NSH_BUILTIN_APPS - Build the watchdog time test as an NSH +# built-in function. Default: Not built! The example can only be used +# as an NSH built-in application +# +# The STM32 also needs one of the following enabled: +# +# CONFIG_STM32_WWDG=y, OR +# CONFIG_STM32_IWDG=y (but not both) +# +# Specific configuration options for this example include: +# +# CONFIG_EXAMPLES_WATCHDOG_DEVPATH - The path to the Watchdog device. +# Default: /dev/watchdog0 +# CONFIG_EXAMPLES_WATCHDOG_PINGTIME - Time in milliseconds that the example +# will ping the watchdog before letting the watchdog expire. Default: 5000 +# milliseconds +# CONFIG_EXAMPLES_WATCHDOG_PINGDELAY - Time delay between pings in +# milliseconds. Default: 500 milliseconds. +# CONFIG_EXAMPLES_WATCHDOG_TIMEOUT - The watchdog timeout value in +# milliseconds before the watchdog timer expires. Default: 2000 +# milliseconds. +# +# CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# CONFIG_EXAMPLES_WATCHDOG_PINGTIME +# CONFIG_EXAMPLES_WATCHDOG_PINGDELAY +# CONFIG_EXAMPLES_WATCHDOG_TIMEOUT + # # Settings for examples/pwm # diff --git a/nuttx/configs/stm3240g-eval/src/up_lcd.c b/nuttx/configs/stm3240g-eval/src/up_lcd.c index 649d468fe..19c80e62b 100644 --- a/nuttx/configs/stm3240g-eval/src/up_lcd.c +++ b/nuttx/configs/stm3240g-eval/src/up_lcd.c @@ -34,9 +34,9 @@ * POSSIBILITY OF SUCH DAMAGE. * **************************************************************************************/ -/* This driver supports the following LCDs on the STM324xG_EVAL board: +/* This driver supports the following LCDs on the STM324xG_EVAL board: * - * AM-240320L8TNQW00H (LCD_ILI9320 or LCD_ILI9321) and + * AM-240320L8TNQW00H (LCD_ILI9320 or LCD_ILI9321) OR * AM-240320D5TOQW01H (LCD_ILI9325) */ @@ -80,50 +80,16 @@ # define CONFIG_LCD_MAXCONTRAST 1 #endif -/* Backlight */ - -#ifndef CONFIG_LCD_BACKLIGHT -# undef CONFIG_LCD_PWM -#endif - -#if defined(CONFIG_LCD_BACKLIGHT) && defined(CONFIG_LCD_PWM) -# if !defined(CONFIG_STM32_TIM1) -# warning "CONFIG_LCD_PWM requires CONFIG_STM32_TIM1" -# undef CONFIG_LCD_PWM -# endif -# if defined(CONFIG_STM32_TIM1_FULL_REMAP) -# warning "PA8 cannot be configured as TIM1 CH1 with full remap" -# undef CONFIG_LCD_PWM -# endif -#endif - -#if defined(CONFIG_LCD_BACKLIGHT) && defined(CONFIG_LCD_PWM) -# if CONFIG_LCD_MAXPOWER < 2 -# warning "A larger value of CONFIG_LCD_MAXPOWER is recommended" -# endif -#endif - /* Check power setting */ #if !defined(CONFIG_LCD_MAXPOWER) || CONFIG_LCD_MAXPOWER < 1 -# undef CONFIG_LCD_MAXPOWER -# if defined(CONFIG_LCD_BACKLIGHT) && defined(CONFIG_LCD_PWM) -# define CONFIG_LCD_MAXPOWER 100 -# else -# define CONFIG_LCD_MAXPOWER 1 -# endif +# define CONFIG_LCD_MAXPOWER 1 #endif #if CONFIG_LCD_MAXPOWER > 255 # error "CONFIG_LCD_MAXPOWER must be less than 256 to fit in uint8_t" #endif -/* PWM Frequency */ - -#ifndef CONFIG_LCD_PWMFREQUENCY -# define CONFIG_LCD_PWMFREQUENCY 100 -#endif - /* Check orientation */ #if defined(CONFIG_LCD_PORTRAIT) @@ -330,10 +296,6 @@ struct stm3240g_dev_s struct lcd_dev_s dev; -#if defined(CONFIG_LCD_BACKLIGHT) && defined(CONFIG_LCD_PWM) - uint32_t reload; -#endif - /* Private LCD-specific information follows */ uint8_t type; /* LCD type. See enum lcd_type_e */ @@ -391,11 +353,6 @@ static int stm3240g_setcontrast(struct lcd_dev_s *dev, unsigned int contrast); /* Initialization */ static inline void stm3240g_lcdinitialize(void); -#ifdef CONFIG_LCD_BACKLIGHT -static void stm3240g_backlight(void); -#else -# define stm3240g_backlight() -#endif /************************************************************************************** * Private Data @@ -878,22 +835,6 @@ static int stm3240g_poweroff(void) stm3240g_writereg(LCD_REG_7, 0); - /* Disable timer 1 clocking */ - -#if defined(CONFIG_LCD_BACKLIGHT) -# if defined(CONFIG_LCD_PWM) - modifyreg32(STM32_RCC_APB2ENR, RCC_APB2ENR_TIM1EN, 0); -#endif - - /* Configure the PA8 pin as an output */ - - stm32_configgpio(GPIO_LCD_BACKLIGHT); - - /* Turn the backlight off */ - - stm32_gpiowrite(GPIO_LCD_BACKLIGHT, false); -#endif - /* Remember the power off state */ g_lcddev.power = 0; @@ -918,43 +859,6 @@ static int stm3240g_setpower(struct lcd_dev_s *dev, int power) if (power > 0) { -#ifdef CONFIG_LCD_BACKLIGHT -#ifdef CONFIG_LCD_PWM - uint32_t frac; - uint32_t duty; - - /* If we are coming up from the power off state, then re-configure the timer */ - - if (g_lcddev.power == 0) - { - stm3240g_backlight(); - } - - /* Make sure that the power value is within range */ - - if (power > CONFIG_LCD_MAXPOWER) - { - power = CONFIG_LCD_MAXPOWER; - } - - /* Caclulate the new backlight duty. It is a faction of the timer1 - * period based on the ration of the current power setting to the - * maximum power setting. - */ - - frac = (power << 16) / CONFIG_LCD_MAXPOWER; - duty = (g_lcddev.reload * frac) >> 16; - if (duty > 0) - { - duty--; - } - putreg16((uint16_t)duty, STM32_TIM1_CCR1); -#else - /* Turn the backlight on */ - - stm32_gpiowrite(GPIO_LCD_BACKLIGHT, true); -#endif -#endif /* Then turn the display on */ #if !defined(CONFIG_STM32_ILI9320_DISABLE) || !defined(CONFIG_STM32_ILI9325_DISABLE) @@ -1200,180 +1104,14 @@ static inline void stm3240g_lcdinitialize(void) stm3240g_writereg(LCD_REG_3, 0x1018); - stm3240g_writereg(LCD_REG_7, 0x0); /* display off*/ + stm3240g_writereg(LCD_REG_7, 0x0); /* display off */ #else lcddbg("Unsupported LCD type\n"); #endif } -/************************************************************************************** - * Name: stm3240g_backlight - * - * Description: - * The LCD backlight is driven from PA8 which must be configured as TIM1 - * CH1. TIM1 must then be configured to output a clock on PA8; the duty - * of the clock determineds the backlight level. - * - **************************************************************************************/ - -#ifdef CONFIG_LCD_BACKLIGHT -static void stm3240g_backlight(void) -{ -#ifdef CONFIG_LCD_PWM - uint32_t prescaler; - uint32_t reload; - uint32_t timclk; - uint16_t bdtr; - uint16_t ccmr; - uint16_t ccer; - uint16_t cr2; - - /* Calculate the TIM1 prescaler value */ - - prescaler = (STM32_PCLK2_FREQUENCY / CONFIG_LCD_PWMFREQUENCY + 65534) / 65535; - if (prescaler < 1) - { - prescaler = 1; - } - else if (prescaler > 65536) - { - prescaler = 65536; - } - - /* Calculate the TIM1 reload value */ - - timclk = STM32_PCLK2_FREQUENCY / prescaler; - reload = timclk / CONFIG_LCD_PWMFREQUENCY; - - if (reload < 1) - { - reload = 1; - } - else if (reload > 65535) - { - reload = 65535; - } - - g_lcddev.reload = reload; - - /* Configure PA8 as TIM1 CH1 output */ - - stm32_configgpio(GPIO_TIM1_CH1OUT); - - /* Enabled timer 1 clocking */ - - modifyreg32(STM32_RCC_APB2ENR, 0, RCC_APB2ENR_TIM1EN); - - /* Reset timer 1 */ - - modifyreg32(STM32_RCC_APB2RSTR, 0, RCC_APB2RSTR_TIM1RST); - modifyreg32(STM32_RCC_APB2RSTR, RCC_APB2RSTR_TIM1RST, 0); - - /* Reset the Counter Mode and set the clock division */ - - putreg16(0, STM32_TIM1_CR1); - - /* Set the Autoreload value */ - - putreg16(reload-1, STM32_TIM1_ARR); - - /* Set the Prescaler value */ - - putreg16(prescaler-1, STM32_TIM1_PSC); - - /* Generate an update event to reload the Prescaler value immediatly */ - - putreg16(ATIM_EGR_UG, STM32_TIM1_EGR); - - /* Reset the Repetition Counter value */ - - putreg16(0, STM32_TIM1_RCR); - - /* Set the main output enable (MOE) bit and clear the OSSI and OSSR - * bits in the BDTR register. - */ - - bdtr = getreg16(STM32_TIM1_BDTR); - bdtr &= ~(ATIM_BDTR_OSSI | ATIM_BDTR_OSSR); - bdtr |= ATIM_BDTR_MOE; - putreg16(bdtr, STM32_TIM1_BDTR); - - /* Disable the Channel 1 */ - - ccer = getreg16(STM32_TIM1_CCER); - ccer &= ~ATIM_CCER_CC1E; - putreg16(ccer, STM32_TIM1_CCER); - - /* Get the TIM1 CR2 register value */ - - cr2 = getreg16(STM32_TIM1_CR2); - - /* Select the Output Compare Mode Bits */ - - ccmr = getreg16(STM32_TIM1_CCMR1); - ccmr &= ATIM_CCMR1_OC1M_MASK; - ccmr |= (ATIM_CCMR_MODE_PWM1 << ATIM_CCMR1_OC1M_SHIFT); - ccmr |= (ATIM_CCMR_CCS_CCOUT << ATIM_CCMR1_CC1S_SHIFT); - - /* Set the power to the minimum value */ - - g_lcddev.power = 0; - putreg16(0, STM32_TIM1_CCR1); - - /* Select the output polarity level == LOW and enable */ - - ccer |= (ATIM_CCER_CC1E ); - - /* Reset the Output N Polarity level */ - - ccer &= ~(ATIM_CCER_CC1NP|ATIM_CCER_CC1NE); - - /* Reset the Ouput Compare and Output Compare N IDLE State */ - - cr2 &= ~(ATIM_CR2_OIS1|ATIM_CR2_OIS1N); - - /* Write the timer configuration */ - - putreg16(cr2, STM32_TIM1_CR2); - putreg16(ccmr, STM32_TIM1_CCMR1); - putreg16(ccer, STM32_TIM1_CCER); - - /* Set the auto preload enable bit */ - - modifyreg16(STM32_TIM1_CR1, 0, ATIM_CR1_ARPE); - - /* Enable Backlight Timer */ - - ccer |= ATIM_CR1_CEN; - putreg16(ccer, STM32_TIM1_CR1); - - /* Dump timer1 registers */ - - lcddbg("APB2ENR: %08x\n", getreg32(STM32_RCC_APB2ENR)); - lcddbg("CR1: %04x\n", getreg32(STM32_TIM1_CR1)); - lcddbg("CR2: %04x\n", getreg32(STM32_TIM1_CR2)); - lcddbg("SMCR: %04x\n", getreg32(STM32_TIM1_SMCR)); - lcddbg("DIER: %04x\n", getreg32(STM32_TIM1_DIER)); - lcddbg("SR: %04x\n", getreg32(STM32_TIM1_SR)); - lcddbg("BDTR: %04x\n", getreg32(STM32_TIM1_BDTR)); - lcddbg("CCMR1: %04x\n", getreg32(STM32_TIM1_CCMR1)); - lcddbg("CCMR2: %04x\n", getreg32(STM32_TIM1_CCMR2)); - lcddbg("CCER: %04x\n", getreg32(STM32_TIM1_CCER)); - lcddbg("CNT: %04x\n", getreg32(STM32_TIM1_CNT)); - lcddbg("PSC: %04x\n", getreg32(STM32_TIM1_PSC)); - lcddbg("ARR: %04x\n", getreg32(STM32_TIM1_ARR)); - lcddbg("RCR: %04x\n", getreg32(STM32_TIM1_RCR)); - lcddbg("CCR1: %04x\n", getreg32(STM32_TIM1_CCR1)); - lcddbg("CCR2: %04x\n", getreg32(STM32_TIM1_CCR2)); - lcddbg("CCR3: %04x\n", getreg32(STM32_TIM1_CCR3)); - lcddbg("CCR4: %04x\n", getreg32(STM32_TIM1_CCR4)); - lcddbg("DMAR: %04x\n", getreg32(STM32_TIM1_DMAR)); -#endif -} -#endif - -/************************************************************************************** + /************************************************************************************** * Public Functions **************************************************************************************/ @@ -1404,7 +1142,7 @@ int up_lcdinitialize(void) stm3240g_lcdclear(0); - /* Turn the backlight off */ + /* Turn the display off */ stm3240g_poweroff(); return OK; @@ -1461,3 +1199,4 @@ void stm3240g_lcdclear(uint16_t color) LCD->value = color; } } + -- cgit v1.2.3