]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/Renesas-Files/lcd.c
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / RX200_RX210-RSK_Renesas / RTOSDemo / Renesas-Files / lcd.c
diff --git a/FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/Renesas-Files/lcd.c b/FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/Renesas-Files/lcd.c
new file mode 100644 (file)
index 0000000..834ff6d
--- /dev/null
@@ -0,0 +1,219 @@
+/***********************************************************************************\r
+Filename: lcd.c\r
+DESCRIPTION   LCD Module utility functions.\r
+               Written for KS0066u compatible LCD Module.\r
+               (8 characters by 2 lines)\r
+\r
+Copyright   : 2006 Renesas Technology Europe Ltd.\r
+Copyright   : 2006 Renesas Technology Corporation.\r
+All Rights Reserved\r
+\r
+***********************************************************************************/\r
+\r
+/***********************************************************************************\r
+Revision History\r
+DD.MM.YYYY OSO-UID Description\r
+26.07.2006 RTE-MBA First Release\r
+***********************************************************************************/\r
+\r
+/**********************************************************************************\r
+System Includes\r
+***********************************************************************************/\r
+#include <machine.h>\r
+\r
+/**********************************************************************************\r
+User Includes\r
+***********************************************************************************/\r
+/* iodefine.h provides a structure to access all of the device registers. */\r
+#include "iodefine.h"\r
+/* rsk1664def.h provides common defines for widely used items. */\r
+#include "rskrx210def.h"\r
+#include "lcd.h"\r
+\r
+/*****************************************************************************\r
+Name:                  InitDisplay \r
+Parameters:            none                            \r
+Returns:               none\r
+Description:   Intializes the LCD display. \r
+*****************************************************************************/\r
+void InitialiseDisplay( void )\r
+{\r
+       /* Power Up Delay for LCD Module */\r
+       EN_PIN = SET_BIT_HIGH;\r
+       DisplayDelay(7000);\r
+       EN_PIN = SET_BIT_LOW;\r
+  \r
+       /* Display initialises in 8 bit mode - so send one write (seen as 8 bit)\r
+               to set to 4 bit mode. */\r
+\r
+       /* Function Set */\r
+       LCD_nibble_write(CTRL_WR,0x03);\r
+       LCD_nibble_write(CTRL_WR,0x03);\r
+       DisplayDelay(39);\r
\r
+       /* Configure display */\r
+       LCD_nibble_write(CTRL_WR,0x03);\r
+       LCD_nibble_write(CTRL_WR,0x02);\r
+       LCD_nibble_write(CTRL_WR,(LCD_DISPLAY_ON | LCD_TWO_LINE ));\r
+       LCD_nibble_write(CTRL_WR,(LCD_DISPLAY_ON | LCD_TWO_LINE ));\r
+       DisplayDelay(39);\r
+\r
+       /* Display ON/OFF control */\r
+       LCD_write(CTRL_WR,LCD_CURSOR_OFF);\r
+       DisplayDelay(39);\r
+\r
+       /* Display Clear */\r
+       LCD_write(CTRL_WR,LCD_CLEAR);\r
+       DisplayDelay(1530);\r
+\r
+       /* Entry Mode Set */\r
+       LCD_write(CTRL_WR,0x06);\r
+       LCD_write(CTRL_WR,LCD_HOME_L1);\r
+}\r
+/**********************************************************************************\r
+End of function InitialiseDisplay\r
+***********************************************************************************/   \r
+\r
+/*****************************************************************************\r
+Name:          DisplayString   \r
+Parameters:    position  Line number of display\r
+                       string  Pointer to data to be written to display.\r
+                                       Last character should be null.\r
+Returns:       none\r
+\r
+Description:   This function controls LCD writes to line 1 or 2 of the LCD.\r
+                               You need to use the defines LCD_LINE1 and LCD_LINE2 in order\r
+                               to specify the starting position.\r
+                               For example, to start at the 2nd position on line 1...\r
+                               DisplayString(LCD_LINE1 + 1, "Hello")\r
+*****************************************************************************/\r
+void DisplayString(unsigned char position, char * string)\r
+{\r
+       static unsigned char next_pos = 0xFF;\r
+\r
+       /* Set line position if needed. We don't want to if we don't need \r
+               to because LCD control operations take longer than LCD data\r
+               operations. */\r
+       if( next_pos != position)\r
+       {\r
+               if(position < LCD_LINE2)\r
+               {\r
+                       /* Display on Line 1 */\r
+                       LCD_write(CTRL_WR, (unsigned char)(LCD_HOME_L1 + position) );\r
+               }\r
+               else\r
+               {\r
+                       /* Display on Line 2 */\r
+                       LCD_write(CTRL_WR, (unsigned char)(LCD_HOME_L2 + position - LCD_LINE2) );\r
+               }\r
+               /* set position index to known value */\r
+               next_pos = position;    \r
+       }\r
+\r
+       do\r
+       {\r
+               LCD_write(DATA_WR,*string++);\r
+               /* increment position index */\r
+               next_pos++;        \r
+       }\r
+       while(*string);\r
+}\r
+/**********************************************************************************\r
+End of function DisplayString\r
+***********************************************************************************/   \r
+\r
+/*****************************************************************************\r
+Name:          LCD_write\r
+Parameters:    value - the value to write\r
+                       data_or_ctrl - To write value as DATA or CONTROL\r
+                                                       1 = DATA\r
+                                                       0 = CONTROL\r
+Returns:       none\r
+\r
+Description:   Writes data to display. Sends command to display.  \r
+*****************************************************************************/\r
+void LCD_write(unsigned char data_or_ctrl, unsigned char value)\r
+{\r
+       /* Write upper nibble first */\r
+       LCD_nibble_write(data_or_ctrl, (value & 0xF0) >> 4);\r
+\r
+       /* Write lower nibble second */\r
+       LCD_nibble_write(data_or_ctrl, (value & 0x0F));\r
+}\r
+/**********************************************************************************\r
+End of function LCD_write\r
+***********************************************************************************/   \r
+\r
+/*****************************************************************************\r
+Name:          LCD_nibble_write\r
+Parameters:    value - the value to write\r
+                       data_or_ctrl - To write value as DATA or CONTROL\r
+                                                       1 = DATA\r
+                                                       0 = CONTROL\r
+Returns:       none\r
+\r
+Description:   Writes data to display. Sends command to display.  \r
+*****************************************************************************/\r
+void LCD_nibble_write(unsigned char data_or_ctrl, unsigned char value)\r
+{\r
+       unsigned char ucStore;\r
+       if (data_or_ctrl == DATA_WR)\r
+       {\r
+               RS_PIN = SET_BIT_HIGH;\r
+       }\r
+       else\r
+       {\r
+               RS_PIN = SET_BIT_LOW;\r
+       }\r
+       /* There must be 40ns between RS write and EN write */\r
+       DisplayDelay(1);\r
+       /* EN enable chip (HIGH) */\r
+       EN_PIN = SET_BIT_HIGH;\r
+       /* Tiny delay */                \r
+       DisplayDelay(1);\r
+       /* Clear port bits used */  \r
+       /* Set upper lower 4 bits of nibble on port pins. */\r
+       ucStore = DATA_PORT;\r
+       ucStore &= ~DATA_PORT_MASK;\r
+       /* OR in data */  \r
+       ucStore |= ((value << DATA_PORT_SHIFT) & DATA_PORT_MASK );\r
+       /* Write lower 4 bits of nibble */\r
+       DATA_PORT = ucStore;\r
+\r
+       /* write delay while En High */\r
+       DisplayDelay(20);\r
+       /* Latch data by dropping EN */          \r
+       EN_PIN = SET_BIT_LOW;\r
+       /* Data hold delay */      \r
+       DisplayDelay(20);                \r
+\r
+       if(data_or_ctrl == CTRL_WR)\r
+       {\r
+               /* Extra delay needed for control writes */\r
+               DisplayDelay(40);          \r
+       }          \r
+}\r
+/**********************************************************************************\r
+End of function LCD_nibble_write\r
+***********************************************************************************/   \r
+\r
+/*****************************************************************************\r
+Name:          DisplayDelay \r
+Parameters:    units - Approximately in microseconds                              \r
+Returns:       none \r
+\r
+Description:   Delay routine for LCD display.\r
+*****************************************************************************/\r
+void DisplayDelay(unsigned long int units)\r
+{\r
+       unsigned long counter = units * DELAY_TIMING;\r
+       while(counter--)\r
+       {\r
+               nop();          // ~ 10ns\r
+       }\r
+}\r
+/**********************************************************************************\r
+End of function DisplayDelay\r
+***********************************************************************************/   \r
+\r
+\r