9
0
Fork 0

Fix banding on the R61580 LCD

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4136 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo 2011-12-05 19:59:10 +00:00
parent ec69455a81
commit e69720fe6e
13 changed files with 227 additions and 70 deletions

View File

@ -13,7 +13,7 @@
<h1><big><font color="#3c34ec"><i>NuttX Operating System<p>User's Manual</i></font></big></h1> <h1><big><font color="#3c34ec"><i>NuttX Operating System<p>User's Manual</i></font></big></h1>
<p><small>by</small></p> <p><small>by</small></p>
<p>Gregory Nutt<p> <p>Gregory Nutt<p>
<p>Last Updated: July 19, 2011</p> <p>Last Updated: December 5, 2011</p>
</td> </td>
</tr> </tr>
</table> </table>
@ -1549,58 +1549,83 @@ interface of the same name.
<h3><a name="mqnotify">2.4.7 mq_notify</a></h3> <h3><a name="mqnotify">2.4.7 mq_notify</a></h3>
<p> <p>
<b>Function Prototype:</b> <b>Function Prototype:</b>
<pre> <pre>
#include &lt;mqueue.h&gt; #include &lt;mqueue.h&gt;
int mq_notify(mqd_t mqdes, const struct sigevent *notification); int mq_notify(mqd_t mqdes, const struct sigevent *notification);
</pre> </pre>
</p>
<p> <p>
<b>Description:</b> If the &quot;notification&quot; input parameter <b>Description:</b> If the <code>notification</code> input parameter
is not NULL, this function connects the task with the message queue such is not <code>NULL</code>, this function connects the task with the message queue such
that the specified signal will be sent to the task whenever the message that the specified signal will be sent to the task whenever the message
changes from empty to non-empty. One notification can be attached changes from empty to non-empty. One notification can be attached
to a message queue. to a message queue.
</p>
<p> <p>
If &quot;notification&quot; is NULL, the attached notification If <code>notification</code>; is <code>NULL</code>, the attached notification
is detached (if it was held by the calling task) and the queue is detached (if it was held by the calling task) and the queue
is available to attach another notification. is available to attach another notification.
</p>
<p> <p>
When the notification is sent to the registered task, its registration When the notification is sent to the registered task, its registration
will be removed. The message queue will then be available for will be removed. The message queue will then be available for
registration. registration.
<p> <p>
<b>Input Parameters:</b> <b>Input Parameters:</b>
<ul> <ul>
<li><i>mqdes</i>. Message queue descriptor <li>
<li><i>notification</i>. Real-time signal structure containing: <code>mqdes</code>. Message queue descriptor
<ul> </li>
<li><i>sigev_notify</i>. Should be SIGEV_SIGNAL (but actually <li><code>notification</code>. Real-time signal structure containing:
ignored) <ul>
<li><i>sigev_signo</i>. The signo to use for the notification <li><code>sigev_notify</code>. Should be SIGEV_SIGNAL (but actually ignored)
<li><i>sigev_value</i>. Value associated with the signal <li><code>sigev_signo</code>. The signo to use for the notification
</ul> <li><code>sigev_value</code>. Value associated with the signal
</ul>
</ul> </ul>
</p>
<p> <p>
<b>Returned Values:</b> None. <b>Returned Values:</b>
On success <code>mq_notify()</code> returns 0; on error, -1 is returned, with
<code>errno</code> set to indicate the error:
<ul>
<li>
<code>EBADF</code>. The descriptor specified in <code>mqdes</code> is invalid.
</li>
<li>
<code>EBUSY</code>. Another process has already registered to receive notification
for this message queue.
</li>
<li>
<code>EINVAL</code>. <code>sevp->sigev_notify</code> is not one of the permitted values; or
<code>sevp->sigev_notify</code> is <code>SIGEV_SIGNAL</code> and <code>sevp->sigev_signo</code> is not a
valid signal number.
</li>
<li>
<code>ENOMEM</code>. Insufficient memory.
</li>
</ul>
</p>
<p> <p>
<b>Assumptions/Limitations:</b> <b>Assumptions/Limitations:</b>
</p>
<p> <p>
<b> POSIX Compatibility:</b> Comparable to the POSIX interface <b>POSIX Compatibility:</b> Comparable to the POSIX interface of the same name.
of the same name. Differences from the full POSIX implementation include:
Differences from the full POSIX implementation include: <ul>
<ul> <li>
<li>The notification signal will be sent to the registered task even if The notification signal will be sent to the registered task even if
another task is waiting for the message queue to become non-empty. This is another task is waiting for the message queue to become non-empty. This is
inconsistent with the POSIX specification which states, &quot;If a process inconsistent with the POSIX specification which states, &quot;If a process
has registered for notification of message arrival at a message queue and has registered for notification of message arrival at a message queue and
some process is blocked in <i>mq_receive</i> waiting to receive a message some process is blocked in <i>mq_receive</i> waiting to receive a message
when a message arrives at the queue, the arriving message shall satisfy the when a message arrives at the queue, the arriving message shall satisfy the
appropriate <i>mq_receive()</i> ... The resulting behavior is as if the appropriate <i>mq_receive()</i> ... The resulting behavior is as if the
message queue remains empty, and no notification shall be sent.&quot; message queue remains empty, and no notification shall be sent.&quot;
</ul> </li>
</ul>
</p>
<H3><a name="mqsetattr">2.4.8 mq_setattr</a></H3> <H3><a name="mqsetattr">2.4.8 mq_setattr</a></H3>

View File

@ -223,6 +223,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -236,6 +236,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -234,6 +234,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -289,6 +289,7 @@
#define LCD_REG_153 0x99 #define LCD_REG_153 0x99
#define LCD_REG_154 0x9a #define LCD_REG_154 0x9a
#define LCD_REG_157 0x9d #define LCD_REG_157 0x9d
#define LCD_REG_164 0xa4
#define LCD_REG_192 0xc0 #define LCD_REG_192 0xc0
#define LCD_REG_193 0xc1 #define LCD_REG_193 0xc1
#define LCD_REG_229 0xe5 #define LCD_REG_229 0xe5
@ -1074,27 +1075,14 @@ static inline void stm3210e_lcdinitialize(void)
id = stm3210e_readreg(LCD_REG_0); id = stm3210e_readreg(LCD_REG_0);
lcddbg("LCD ID: %04x\n", id); lcddbg("LCD ID: %04x\n", id);
/* Check if the ID is for the SPFD5408B or the almost compatible R61580 */ /* Check if the ID is for the SPFD5408B */
#if !defined(CONFIG_STM32_SPFD5408B_DISABLE) || !defined(CONFIG_STM32_R61580_DISABLE) #if !defined(CONFIG_STM32_SPFD5408B_DISABLE)
#if !defined(CONFIG_STM32_SPFD5408B_DISABLE) && !defined(CONFIG_STM32_R61580_DISABLE)
if (id == SPFD5408B_ID || id == R61580_ID)
#elif !defined(CONFIG_STM32_SPFD5408B_DISABLE)
if (id == SPFD5408B_ID) if (id == SPFD5408B_ID)
#else
if (id == R61580_ID)
#endif
{ {
/* Set the LCD type for the SPFD5408B or the R61580 */ /* Set the LCD type for the SPFD5408B */
#if !defined(CONFIG_STM32_SPFD5408B_DISABLE) && !defined(CONFIG_STM32_R61580_DISABLE)
g_lcddev.type = (id == SPFD5408B_ID ? LCD_TYPE_SPFD5408B : LCD_TYPE_R61580);
#elif !defined(CONFIG_STM32_SPFD5408B_DISABLE)
g_lcddev.type = SPFD5408B_ID;
#else
g_lcddev.type = LCD_TYPE_R61580;
#endif
g_lcddev.type = LCD_TYPE_SPFD5408B;
lcddbg("LCD type: %d\n", g_lcddev.type); lcddbg("LCD type: %d\n", g_lcddev.type);
/* Start Initial Sequence */ /* Start Initial Sequence */
@ -1191,6 +1179,80 @@ static inline void stm3210e_lcdinitialize(void)
} }
else else
#endif #endif
/* Check if the ID is for the almost compatible R61580 */
#if !defined(CONFIG_STM32_R61580_DISABLE)
if (id == R61580_ID)
{
/* Set the LCD type for the R61580 */
g_lcddev.type = LCD_TYPE_R61580;
lcddbg("LCD type: %d\n", g_lcddev.type);
/* Start Initial Sequence */
stm3210e_writereg(LCD_REG_0, 0x0000);
stm3210e_writereg(LCD_REG_0, 0x0000);
up_mdelay(100);
stm3210e_writereg(LCD_REG_0, 0x0000);
stm3210e_writereg(LCD_REG_0, 0x0000);
stm3210e_writereg(LCD_REG_0, 0x0000);
stm3210e_writereg(LCD_REG_0, 0x0000);
stm3210e_writereg(LCD_REG_164, 0x0001);
up_mdelay(100);
stm3210e_writereg(LCD_REG_96, 0xa700);
stm3210e_writereg(LCD_REG_8, 0x0808);
/* Gamma Setting */
stm3210e_writereg(LCD_REG_48, 0x0203);
stm3210e_writereg(LCD_REG_49, 0x080f);
stm3210e_writereg(LCD_REG_50, 0x0401);
stm3210e_writereg(LCD_REG_51, 0x050b);
stm3210e_writereg(LCD_REG_52, 0x3330);
stm3210e_writereg(LCD_REG_53, 0x0b05);
stm3210e_writereg(LCD_REG_54, 0x0005);
stm3210e_writereg(LCD_REG_55, 0x0f08);
stm3210e_writereg(LCD_REG_56, 0x0302);
stm3210e_writereg(LCD_REG_57, 0x3033);
/* Power Setting */
stm3210e_writereg(LCD_REG_144, 0x0018); /* 80Hz */
stm3210e_writereg(LCD_REG_16, 0x0530); /* BT, AP */
stm3210e_writereg(LCD_REG_17, 0x0237); /* DC1,DC0,VC */
stm3210e_writereg(LCD_REG_18, 0x01bf);
stm3210e_writereg(LCD_REG_19, 0x1000); /* VCOM */
up_mdelay(200);
stm3210e_writereg(LCD_REG_1, 0x0100); /* Set SS bit */
stm3210e_writereg(LCD_REG_2, 0x0200);
stm3210e_writereg(LCD_REG_3, 0x1030); /* Set GRAM write direction and BGR=1. */
stm3210e_writereg(LCD_REG_9, 0x0001);
stm3210e_writereg(LCD_REG_10, 0x0008);
stm3210e_writereg(LCD_REG_12, 0x0000); /* RGB 18-bit System interface setting */
stm3210e_writereg(LCD_REG_13, 0xd000);
stm3210e_writereg(LCD_REG_14, 0x0030);
stm3210e_writereg(LCD_REG_15, 0x0000); /* RGB interface polarity, no impact */
stm3210e_writereg(LCD_REG_32, 0x0000); /* H Start */
stm3210e_writereg(LCD_REG_33, 0x0000); /* V Start */
stm3210e_writereg(LCD_REG_41, 0x002e);
stm3210e_writereg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
stm3210e_writereg(LCD_REG_81, 0x00ef); /* Horizontal GRAM End Address */
stm3210e_writereg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
stm3210e_writereg(LCD_REG_83, 0x013f); /* Vertical GRAM End Address */
stm3210e_writereg(LCD_REG_97, 0x0001); /* NDL, VLE, REV */
stm3210e_writereg(LCD_REG_106, 0x0000); /* set scrolling line */
stm3210e_writereg(LCD_REG_128, 0x0000);
stm3210e_writereg(LCD_REG_129, 0x0000);
stm3210e_writereg(LCD_REG_130, 0x005f);
stm3210e_writereg(LCD_REG_147, 0x0701);
stm3210e_writereg(LCD_REG_7, 0x0000); /* Display OFF */
}
else
#endif
{ {
#ifndef CONFIG_STM32_AM240320_DISABLE #ifndef CONFIG_STM32_AM240320_DISABLE
g_lcddev.type = LCD_TYPE_AM240320; g_lcddev.type = LCD_TYPE_AM240320;

View File

@ -234,6 +234,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4 #CONFIG_SSI_TXLIMIT=4
#
# STM3210E-EVAL specific LCD settings
#
CONFIG_STM32_AM240320_DISABLE=n
CONFIG_STM32_SPFD5408B_DISABLE=n
CONFIG_STM32_R61580_DISABLE=y
# #
# General build options # General build options
# #

View File

@ -2,7 +2,7 @@
* sched/mq_notify.c * sched/mq_notify.c
* *
* Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved. * Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr> * Author: Gregory Nutt <gnutt@nuttx.org>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions