why lcd works through time or not working at all?
i am using next schems
PE.0(72)->DB4(11)
PE.1(73)->DB5(12)
PE.2(74)->DB6(13)
PE.3(75)->DB7(14)
PB.0(66)->E(6)
PB.1(67)->RS(4)
GND->RW(5)
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif
#define cursor_at_1stline 0x80
#define cursor_at_2ndline 0xC0
#define display 0x28 // DL - Set Data Interface Length /4(0)
// N - Number of Display Lines /2(1)
//F - Character Font /5x7(0)
#define cursor_disp_off 0x08
#define cursor_disp_on_coff 0x0C
#define cleardisp 0x01
#define cursorhome 0x02
#define incr_address_shift_cursor_with_eachcharacter_right 0x06
#define EN_HI GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_PIN_0)
#define EN_LO GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, 0x00)
#define RS_HI GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, GPIO_PIN_1)
#define RS_LO GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0x00)
void delay_lcd(void)
{
unsigned long ulLoop;
for(ulLoop = 0; ulLoop !=2000; ulLoop++)
{
}
}
void LCD_COMMAND(char cmd)
{
RS_LO;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, (cmd>>4)&0x0F);
EN_HI;
delay_lcd();
EN_LO;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, cmd&0x0F);
EN_HI;
delay_lcd();
EN_LO;
delay_lcd();
}
void LCD_DATA(char dat)
{
RS_HI;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, ((dat>>4)&0x0F));
EN_HI;
delay_lcd();
EN_LO;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, (dat&0x0F));
EN_HI;
delay_lcd();
EN_LO;
delay_lcd();
}
void Clear(void)
{
LCD_COMMAND (cleardisp); // clear the display
delay_lcd(); // insure at least 2 msec
}
void LCD_Line1(void)
{
LCD_COMMAND (cursor_at_1stline); // set RAM address to Line 2
//note: this value may vary for different displays
delay_lcd();
} // End of void Line1(void)
void LCD_Line2(void)
{
LCD_COMMAND (cursor_at_2ndline); // set RAM address to Line 2
//note: this value may vary for different displays
delay_lcd();
}
int
main(void)
{
// Set the clocking to run directly from the crystal.
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
//
// Initialize ports
//GPIOPortIntRegister(GPIO_PORTD_BASE, PortDIntHandler);
GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_0 , GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0xff);
SysCtlDelay(10000000);
//*********************************************************
// включили порты
GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(GPIO_PORTE_BASE, 0x0F, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1 , GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(GPIO_PORTB_BASE, 0x03, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
SysCtlDelay(3000000);
RS_LO;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); //0x03 //first command as in manual on lcd
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
delay_lcd();
SysCtlDelay(1000000);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x28 // DL - Set Data Interface Length /4(0)
// N - Number of Display Lines /2(1)
//F - Character Font /5x7(0)
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
SysCtlDelay(1000000);
delay_lcd();
/* GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x28
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();*/
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_PIN_3);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x28 replay last command
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_PIN_3);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x0f 1DCB display,cursor,blinky - on
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, GPIO_PIN_2);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_PIN_3);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x01 clear display
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x06 cursor options
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, GPIO_PIN_2);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
RS_HI;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); //output '1'
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); //output '2'
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); //output '3'
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00);
EN_HI;
SysCtlDelay(1000000);
EN_LO;
delay_lcd();
LCD_DATA(' ');
LCD_DATA('S');
LCD_DATA('K');
LCD_DATA('L');
LCD_DATA('A');
LCD_DATA('D');
LCD_DATA(' ');
LCD_DATA('1');
LCD_DATA('2');
LCD_DATA('3');
LCD_DATA('4');
LCD_DATA('5');
LCD_DATA(' ');
LCD_COMMAND(0xC0);
LCD_DATA('S');
LCD_DATA('K');
LCD_DATA('L');
LCD_DATA('A');
LCD_DATA('D');
LCD_DATA(' ');
LCD_DATA('1');
LCD_DATA('2');
LCD_DATA('3');
LCD_DATA('4');
LCD_DATA('5');
while(1)
{
SysCtlDelay(2000000);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0x01);
// GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0x01);
SysCtlDelay(2000000);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0x00);
// GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0x00);
}
}

