Commit graph

53121 commits

Author SHA1 Message Date
Gregory Nutt
f02de7c7ec stm32f429i-disco: implements ili9341 interface
This add a new sub driver ili93414ws which implements the ili9341
interface. This allows to control the ili9341 lcd display of the
stm32f429i-disco board. This also modifies the board specific header to
make the entry point to the sub driver known.

Generally the display supports two different ways to drawing pixel data. This
can be done by RGB interface or MCU interface. Second one is supported by this
driver.

The configuration of the MCU interface is fixed by the hardware pinout.
In the case of the stm32f429i-disco board it is a 4-wire serial (spi)
interface. The display is connected on spi5 and acts as a slave device.
It supports half duplex bidirectional mode for transmitting and receiving data.

Nuttx spi interface only support full duplex so the interface can not be used
for the driver in conventional way. Therefore the driver has its own logic for
the communication with the spi5 device.

But if multiple devices share the same spi5 bus, e.g. if MEMS support enabled
the spi bus must be locked to avoid inconsistency. This is done by enable
CONFIG_STM32_SPI5 in the nuttx configuration. In this case the driver uses the
spi_dev_s instance for the spi5 port to interact with the nuttx spi interface,
e.g. using method SPI_LOCK to lock the bus for the current usage. So it is safe
to share the spi bus. Keep in mind this is a possible workaround.
I would be happy if nuttx spi interface supports different spi modes other
than full duplex only. Are there any plans?

Futhermore the driver supports a few configurable settings:

1. SPI Frequency.

This allows to configure the spi frequency for the communication with the
display. As a result of the spi devices of the stm32f429 only allow fixed
frequency by divider depending on PCLK1, it is not possible to configure each
spi clock we want. A divider of 4, what means ~10Mhz spi clock, gives me the
best results and should be near the upper limit.

2. SPI 16-bit mode.

This allows to setup the spi hardware to 16-bit mode for read or write
operations when receiving or transmitting pixel data from or to the gram of the
display. This is not documented in the ili9341 reference manual but this trick
works just fine because we use only one read or write operation for each pixel,
instead two. This gives a small performance boost.

The driver implements all functions described in the header (see
include/nuttx/lcd/ili9341.h).
Note! Using the backlight function has no effect, because the board
doesn't support controlling of the backlight in the current hardware
layout.

Todo: Add support for dma transfer for writing pixel data to the displays gram.

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-10-20 15:17:56 -06:00
Gregory Nutt
b8b9834ae9 stm32f429i-disco: implements ili9341 interface
This add a new sub driver ili93414ws which implements the ili9341
interface. This allows to control the ili9341 lcd display of the
stm32f429i-disco board. This also modifies the board specific header to
make the entry point to the sub driver known.

Generally the display supports two different ways to drawing pixel data. This
can be done by RGB interface or MCU interface. Second one is supported by this
driver.

The configuration of the MCU interface is fixed by the hardware pinout.
In the case of the stm32f429i-disco board it is a 4-wire serial (spi)
interface. The display is connected on spi5 and acts as a slave device.
It supports half duplex bidirectional mode for transmitting and receiving data.

Nuttx spi interface only support full duplex so the interface can not be used
for the driver in conventional way. Therefore the driver has its own logic for
the communication with the spi5 device.

But if multiple devices share the same spi5 bus, e.g. if MEMS support enabled
the spi bus must be locked to avoid inconsistency. This is done by enable
CONFIG_STM32_SPI5 in the nuttx configuration. In this case the driver uses the
spi_dev_s instance for the spi5 port to interact with the nuttx spi interface,
e.g. using method SPI_LOCK to lock the bus for the current usage. So it is safe
to share the spi bus. Keep in mind this is a possible workaround.
I would be happy if nuttx spi interface supports different spi modes other
than full duplex only. Are there any plans?

Futhermore the driver supports a few configurable settings:

1. SPI Frequency.

This allows to configure the spi frequency for the communication with the
display. As a result of the spi devices of the stm32f429 only allow fixed
frequency by divider depending on PCLK1, it is not possible to configure each
spi clock we want. A divider of 4, what means ~10Mhz spi clock, gives me the
best results and should be near the upper limit.

2. SPI 16-bit mode.

This allows to setup the spi hardware to 16-bit mode for read or write
operations when receiving or transmitting pixel data from or to the gram of the
display. This is not documented in the ili9341 reference manual but this trick
works just fine because we use only one read or write operation for each pixel,
instead two. This gives a small performance boost.

The driver implements all functions described in the header (see
include/nuttx/lcd/ili9341.h).
Note! Using the backlight function has no effect, because the board
doesn't support controlling of the backlight in the current hardware
layout.

Todo: Add support for dma transfer for writing pixel data to the displays gram.

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-10-20 15:17:56 -06:00
Gregory Nutt
f8c4c75c17 include: adds interface description for ili9341
This adds the description of the generic interface to communicate with
the ili9341 lcd single chip driver used by any displays.

The interface have to be implemented by the platform specific subdriver.
The following functions must be exported:

-select
 Select the spi device before starting an operations.

-deselect
 Deselect the spi device after operations finished and if the device was
 selected before.

-sendcmd
 Send any command to the ili9341 display driver.

-sendparam
 Send any parameter corresponding to the ili9341 display driver.

-recvparam
 Receive any parameter from the ili9341 display driver. This is only possible
 for the read commands supported by the ili9341.

-sendgram
 Send pixel data to the gram of the display. This i similar to the function
 sendparam, but pixel data operations needs another handling of how to send the
 data to the display.

-recvgram
 Receive pixel data to the gram of the display. This i similar to the function
 recvparam, but pixel data operations needs another handling of how to receive
 the data from the display.

-backlight
 Change the backlight level of the display.

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-10-20 15:15:22 -06:00
Gregory Nutt
d2cf8395f9 stm32: rename spi frame format definition
This renames the stm32 spi frame format definition to the short description
name as well as the other cr2 register flags.

Note! STM32_SPI3_FRF was never used by nuttx somewhere

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-10-20 15:12:59 -06:00
Gregory Nutt
5c20da2a34 stm32: rename spi frame format definition
This renames the stm32 spi frame format definition to the short description
name as well as the other cr2 register flags.

Note! STM32_SPI3_FRF was never used by nuttx somewhere

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-10-20 15:12:59 -06:00
Gregory Nutt
3035f1a88f stm32f429i-disco: Fix obsolete SPI5 dependency. From Marco Krahl 2014-10-20 15:10:50 -06:00
Gregory Nutt
bce6a9e077 stm32f429i-disco: Fix obsolete SPI5 dependency. From Marco Krahl 2014-10-20 15:10:50 -06:00
Gregory Nutt
94f5d3427d Update README files 2014-10-20 15:08:35 -06:00
Gregory Nutt
b505c11e48 Update README files 2014-10-20 15:08:35 -06:00
Gregory Nutt
ebf9bce9d8 EFM32: Another update to USART oversampling calculation. Clip to positive; update comments 2014-10-20 13:54:43 -06:00
Gregory Nutt
f566c5ed53 EFM32: Another update to USART oversampling calculation. Clip to positive; update comments 2014-10-20 13:54:43 -06:00
Gregory Nutt
1a77fbcaca Fix some naming 2014-10-20 12:29:28 -06:00
Gregory Nutt
f754a51d15 Fix some naming 2014-10-20 12:29:28 -06:00
Gregory Nutt
26acd8d067 Update ChangeLog 2014-10-20 12:02:15 -06:00
Gregory Nutt
651b143d81 Add board support for the Olimex EFM32G8809128 STK 2014-10-20 12:00:37 -06:00
Gregory Nutt
468b004fcb Add board support for the Olimex EFM32G8809128 STK 2014-10-20 12:00:37 -06:00
Gregory Nutt
01984fe6e7 Add board support for the Olimex EFM32G8809128 STK 2014-10-20 12:00:37 -06:00
Gregory Nutt
fbaa55e416 EFM32 Gecko Starter Kit: Must initialize LEDs on boot 2014-10-20 11:52:31 -06:00
Gregory Nutt
4fb5e6d05d EFM32 Gecko Starter Kit: Must initialize LEDs on boot 2014-10-20 11:52:31 -06:00
Gregory Nutt
260238aa8a EFM32 USART: Fix oversampling selection; Should be biased toward higher oversampling rates 2014-10-20 10:54:13 -06:00
Gregory Nutt
09f6908aa1 EFM32 USART: Fix oversampling selection; Should be biased toward higher oversampling rates 2014-10-20 10:54:13 -06:00
Gregory Nutt
58e11b08ca Update documentation/READMEs 2014-10-20 08:26:09 -06:00
Gregory Nutt
8c99adf42c Update documentation/READMEs 2014-10-20 08:26:09 -06:00
Gregory Nutt
a8f2e854c7 Update ChangeLog 2014-10-20 08:25:54 -06:00
Gregory Nutt
ea3024c529 Merge branch 'efm32' 2014-10-20 08:15:53 -06:00
Gregory Nutt
1f60e40115 Merge branch 'efm32' 2014-10-20 08:15:53 -06:00
Gregory Nutt
945da2e9f9 Merge branch 'master' of ssh://git.code.sf.net/p/nuttx/git 2014-10-20 08:15:52 -06:00
Gregory Nutt
5db971f0d9 Merge remote-tracking branch 'origin/master' into efm32 2014-10-20 08:12:09 -06:00
Gregory Nutt
8e227ef756 Merge remote-tracking branch 'origin/master' into efm32 2014-10-20 08:12:09 -06:00
Gregory Nutt
75b728498a Finsh USART configuration logic 2014-10-20 08:12:08 -06:00
Gregory Nutt
ba21728389 Finsh USART configuration logic 2014-10-20 08:12:08 -06:00
Gregory Nutt
956fc38fca Add GPIO interrupt logic 2014-10-20 08:12:08 -06:00
Gregory Nutt
735268d266 Add GPIO interrupt logic 2014-10-20 08:12:08 -06:00
Gregory Nutt
33a12dfb84 Trivial, cosmetic typos in comments 2014-10-20 08:12:07 -06:00
Gregory Nutt
574840778f Trivial, cosmetic typos in comments 2014-10-20 08:12:07 -06:00
Gregory Nutt
7bcca354c2 Trivial, cosmetic typos in comments 2014-10-19 18:59:11 -06:00
Gregory Nutt
d15b190180 Trivial, cosmetic typos in comments 2014-10-19 18:59:11 -06:00
Gregory Nutt
1524c67a17 Add EFM32 serial driver 2014-10-19 18:55:44 -06:00
Gregory Nutt
b9a8456582 Add EFM32 serial driver 2014-10-19 18:55:44 -06:00
Gregory Nutt
180c0e9dec Add some UART configuration logic (still incomplete) 2014-10-19 16:42:15 -06:00
Gregory Nutt
74db6df61f Add some UART configuration logic (still incomplete) 2014-10-19 16:42:15 -06:00
Gregory Nutt
5fa6188c55 Add some UART configuration logic (still incomplete) 2014-10-19 16:42:15 -06:00
Gregory Nutt
df85772cea Fleshes out GPIO configuration logic 2014-10-19 13:47:52 -06:00
Gregory Nutt
302e16223e Fleshes out GPIO configuration logic 2014-10-19 13:47:52 -06:00
Gregory Nutt
2a7edd7e1c Add GPIO header file + a little bit of GPIO configuration logig 2014-10-19 13:07:52 -06:00
Gregory Nutt
8125da0424 Add GPIO header file + a little bit of GPIO configuration logig 2014-10-19 13:07:52 -06:00
Gregory Nutt
4d6f0a7708 Basic clock configuration logic 2014-10-19 11:08:56 -06:00
Gregory Nutt
3896f187a6 Basic clock configuration logic 2014-10-19 11:08:56 -06:00
Gregory Nutt
6839ac9c60 Basic clock configuration logic 2014-10-19 11:08:56 -06:00
Gregory Nutt
06ac7e3a6f Add MSC header file 2014-10-19 09:59:40 -06:00