This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Character not displaying on GLCD -- DM8148 davinci processor

Hi guys,

I have wrote GLCD code using davinci DM8148 processor with gpio pin configuration the same code loading using CCS IDE. The issue is whatever the data/commands signal we are sending  through gpio lines its appearing at the GLCD connector but nothing displaying on it don't know what's problem with my code, kindly help me.

Here is full code.

#ifndef __DM8148_H
#define __DM8148_H
#include "stdint.h"


#define GPIO_0_Base_Address 0x48032000 /* GPIO0 */
#define GPIO_1_Base_Address 0x4804C000 /* GPIO1 */
#define GPIO_2_Base_Address 0x481AC000 /* GPIO2 */
#define GPIO_3_Base_Address 0x481AE000 /* GPIO3 */

#define GPIO_0_OE ((volatile unsigned int *)(GPIO_0_Base_Address+0x134))
#define GPIO_0_DATAIN ((volatile unsigned int *)(GPIO_0_Base_Address+0x138))
#define GPIO_0_DATAOUT ((volatile unsigned int *)(GPIO_0_Base_Address+0x13C))
#define GPIO_0_CLEARDATA_OUT ((volatile unsigned int *)(GPIO_0_Base_Address+0x190))
#define GPIO_0_SETDATAOUT ((volatile unsigned int *)(GPIO_0_Base_Address+0x194))

#define GPIO_1_OE ((volatile unsigned int *)(GPIO_1_Base_Address+0x134))
#define GPIO_1_DATAIN ((volatile unsigned int *)(GPIO_1_Base_Address+0x138))
#define GPIO_1_DATAOUT ((volatile unsigned int *)(GPIO_1_Base_Address+0x13C))
#define GPIO_1_CLEARDATA_OUT ((volatile unsigned int *)(GPIO_1_Base_Address+0x190))
#define GPIO_1_SETDATAOUT ((volatile unsigned int *)(GPIO_1_Base_Address+0x194))

#define GPIO_2_OE ((volatile unsigned int *)(GPIO_2_Base_Address+0x134))
#define GPIO_2_DATAIN ((volatile unsigned int *)(GPIO_2_Base_Address+0x138))
#define GPIO_2_DATAOUT ((volatile unsigned int *)(GPIO_2_Base_Address+0x13C))
#define GPIO_2_CLEARDATA_OUT ((volatile unsigned int *)(GPIO_2_Base_Address+0x190))
#define GPIO_2_SETDATAOUT ((volatile unsigned int *)(GPIO_2_Base_Address+0x194))

#define GPIO_3_OE ((volatile unsigned int *)(GPIO_3_Base_Address+0x134))
#define GPIO_3_DATAIN ((volatile unsigned int *)(GPIO_3_Base_Address+0x138))
#define GPIO_3_DATAOUT ((volatile unsigned int *)(GPIO_3_Base_Address+0x13C))
#define GPIO_3_CLEARDATA_OUT ((volatile unsigned int *)(GPIO_3_Base_Address+0x190))
#define GPIO_3_SETDATAOUT ((volatile unsigned int *)(GPIO_3_Base_Address+0x194))

void uu_set_gpio0_output(unsigned int pin_no);
void uu_set_gpio1_output(unsigned int pin_no);
void uu_set_gpio2_output(unsigned int pin_no);
void uu_set_gpio3_output(unsigned int pin_no);

void uu_set_gpio0_input(unsigned int pin_no);

#define WR_MEM_32(addr, data) (*(unsigned int*)(addr)) = (unsigned int)(data)

#define PINCNTL157 0x48140A70 // GPIO0.11 as DB0
#define PINCNTL158 0x48140A74 // GPIO0.12 as DB1
#define PINCNTL159 0x48140A78 // GPIO0.13 as DB2
#define PINCNTL160 0x48140A7C // GPIO0.14 as DB3
#define PINCNTL161 0x48140A80 // GPIO0.15 as DB4
#define PINCNTL162 0x48140A84 // GPIO0.16 as DB5
#define PINCNTL163 0x48140A88 // GPIO0.17 as DB6
#define PINCNTL164 0x48140A8C // GPIO0.18 as DB7

#define PINCNTL170 0x48140AA4 // GPIO0.24 as CSB
#define PINCNTL171 0x48140AA8 // GPIO0.25 as CSA

#define PINCNTL134 0x48140A14 // GPIO1.09 as Reset
#define PINCNTL139 0x48140A28 // GPIO2.04 as EN

#define PINCNTL219 0x48140B68 // GPIO3.11 as R/W
#define PINCNTL220 0x48140B6C // GPIO3.12 as RS

#define RS_LOW() Clear_data(3,12)
#define RS_HIGH() Set_data(3,12)

#define RW_LOW() Clear_data(3,11)
#define RW_HIGH() Set_data(3,11)

#define EN_LOW() Clear_data(2,4)
#define EN_HIGH() Set_data(2,4)

#define Reset_LOW() Clear_data(1,9)
#define Reset_HIGH() Set_data(1,9)

#define CSA_LOW() Clear_data(0,25)
#define CSA_HIGH() Set_data(0,25)

#define CSB_LOW() Clear_data(0,24)
#define CSB_HIGH() Set_data(0,24)

#define Display_ON() (*GPIO_0_SETDATAOUT |= (0x3F<<11))
#define Display_OFF() (*GPIO_0_CLEARDATA_OUT |= (0x3E<<11))

#define Col_Init() (*GPIO_0_SETDATAOUT |= ( 0x40 << 11 )) //
#define Page_Init() (*GPIO_0_SETDATAOUT |= (0xB8 << 11)) //

//#define read_val (*GPIO_0_DATAIN |= ())

extern void Data_to_Print(char *str);
extern void Gpio_Config(void);
extern void LCD_Init(void);
extern void Clear_LCD(void);
extern void LCD_Position(uint8_t x, uint8_t y);
extern int Read_data(void);

#endif

#include <stdio.h>
#include "GLCD_Header.h"
#include <stdint.h>

main()
{
Gpio_Config();
//*GPIO_0_DATAIN = 0x00000000;
LCD_Init();
LCD_Position(15,75);//15,75
Data_to_Print("HIT");
while(1);
}

#include "GLCD_Header.h"
#include <stdint.h>

#define SET_ADDRESS 0x40
#define SET_PAGE 0xB8

#define ASCIIH 126
#define ASCIIL 32

#define CHAR_PH 8 // Pixel height
#define CHAR_PW 5 // pixel width
#define CHAR_PG 1 // Pixel Gap
#define CHAR_SPACE 0

unsigned int page = 0;
unsigned int column = 0;

unsigned char fonts[95*5] =
{0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x03, 0x00, 0x03, 0x00, // "
0x14, 0x3E, 0x14, 0x3E, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x43, 0x33, 0x08, 0x66, 0x61, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x50, 0x30, 0x00, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x00, 0x04, 0x02, 0x7F, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x3E, 0x41, 0x59, 0x55, 0x5E, // @
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x49, 0x3A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x30, 0x40, 0x40, 0x40, 0x3F, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x02, 0x04, 0x08, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
0x7F, 0x09, 0x09, 0x09, 0x76, // R
0x26, 0x49, 0x49, 0x49, 0x32, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x7F, 0x20, 0x10, 0x20, 0x7F, // W
0x41, 0x22, 0x1C, 0x22, 0x41, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20, //
0x00, 0x00, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // `
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x44, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x44, // c
0x38, 0x44, 0x44, 0x44, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x04, 0x04, 0x7E, 0x05, 0x05, // f
0x08, 0x54, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x14, 0x7C, // q
0x00, 0x7C, 0x08, 0x04, 0x04, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x04, 0x3F, 0x44, 0x44, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x41, // {
0x00, 0x00, 0x7F, 0x00, 0x00, // |
0x41, 0x41, 0x36, 0x08, 0x00, // }
0x02, 0x01, 0x02, 0x04, 0x02 // ~
};

void Clear_data(unsigned char port_no, unsigned int pin_no) // To Clear particular bit on particular port
{
unsigned int clr_reg=0;
switch(port_no)
{
case 0:
*GPIO_0_CLEARDATA_OUT = 0; // clr_reg = *GPIO_0_CLEARDATA_OUT;
clr_reg |= (1 << pin_no);
*GPIO_0_CLEARDATA_OUT = clr_reg;
//*GPIO_0_DATAOUT = 0x00000000;
break;
case 1:
clr_reg = *GPIO_1_CLEARDATA_OUT;
clr_reg |= (1 << pin_no);
*GPIO_1_CLEARDATA_OUT = clr_reg; break;
case 2:
clr_reg = *GPIO_2_CLEARDATA_OUT;
clr_reg |= (1 << pin_no);
*GPIO_2_CLEARDATA_OUT = clr_reg; break;
case 3:
clr_reg = *GPIO_3_CLEARDATA_OUT;
clr_reg |= (1 << pin_no);
*GPIO_3_CLEARDATA_OUT = clr_reg; break;
}
}

void Set_data(unsigned char port_no, unsigned int pin_no) // To Set particular bit on particular port
{
unsigned int set_reg=0;
switch(port_no)
{
case 0:
set_reg = *GPIO_0_SETDATAOUT;
set_reg |= (1 << pin_no);
*GPIO_0_SETDATAOUT = set_reg;
//*GPIO_0_DATAOUT = 0x00000000;
break;
case 1:
set_reg = *GPIO_1_SETDATAOUT;
set_reg |= (1 << pin_no);
*GPIO_1_SETDATAOUT = set_reg; break;
case 2:
set_reg = *GPIO_2_SETDATAOUT;
set_reg |= (1 << pin_no);
*GPIO_2_SETDATAOUT = set_reg; break;
case 3:
set_reg = *GPIO_3_SETDATAOUT;
set_reg |= (1 << pin_no);
*GPIO_3_SETDATAOUT = set_reg; break;
}
}

void lcd_writech(uint8_t ch); // Char write

void LCD_Position(uint8_t x, uint8_t y); // XY co-ordination

void Data_to_Print(char* str);

void Gpio_Config(void)
{
WR_MEM_32(PINCNTL157, 0x000C0080); // Default value as pull up and GPIO0.11
WR_MEM_32(PINCNTL158, 0x000E0080); // Default value as pull up and GPIO0.12
WR_MEM_32(PINCNTL159, 0x000E0080); // Default value as pull up and GPIO0.13
WR_MEM_32(PINCNTL160, 0x000C0080); // Default value as pull up and GPIO0.14
WR_MEM_32(PINCNTL161, 0x00040080); // Default value as pull up and GPIO0.15
WR_MEM_32(PINCNTL162, 0x00040080); // Default value as pull up and GPIO0.16
WR_MEM_32(PINCNTL163, 0x00040080); // Default value as pull up and GPIO0.17
WR_MEM_32(PINCNTL164, 0x00060080); // Default value as pull up and GPIO0.18
WR_MEM_32(PINCNTL170, 0x00040080); // Default value as pull up and GPIO0.24
WR_MEM_32(PINCNTL171, 0x00040080); // Default value as pull up and GPIO0.25
WR_MEM_32(PINCNTL134, 0x00040080); // Default value as pull up and GPIO1.9
WR_MEM_32(PINCNTL139, 0x000E0080); // Default value as pull up and GPIO2.4
WR_MEM_32(PINCNTL219, 0x00040080); // Default value as pull up and GPIO3.11
WR_MEM_32(PINCNTL220, 0x00040080); // Default value as pull up and GPIO3.12

uu_set_gpio0_output(11);
uu_set_gpio0_output(12);
uu_set_gpio0_output(13);
uu_set_gpio0_output(14);
uu_set_gpio0_output(15);
uu_set_gpio0_output(16);
uu_set_gpio0_output(17);
uu_set_gpio0_output(18);
uu_set_gpio0_output(24);
uu_set_gpio0_output(25);

uu_set_gpio1_output(9);

uu_set_gpio2_output(4);

uu_set_gpio3_output(11);
uu_set_gpio3_output(12);

uu_set_gpio0_input(18);
}

void uu_set_gpio0_input(unsigned int pin_no)
{
unsigned int gpio_reg_val=0;
gpio_reg_val = *(GPIO_0_OE);
gpio_reg_val = 1 << pin_no ;
*GPIO_0_OE = gpio_reg_val ;
}

void uu_set_gpio0_output(unsigned int pin_no)
{
unsigned int gpio_reg_val=0;
gpio_reg_val = *(GPIO_0_OE);
gpio_reg_val &= (~(1 << pin_no));
*GPIO_0_OE = gpio_reg_val ;
}

void uu_set_gpio1_output(unsigned int pin_no)
{
unsigned int gpio_reg_val=0;
gpio_reg_val = *(GPIO_1_OE);
gpio_reg_val &= (~(1 << pin_no));
*GPIO_1_OE = gpio_reg_val ;
}

void uu_set_gpio2_output(unsigned int pin_no)
{
unsigned int gpio_reg_val=0;
gpio_reg_val = *(GPIO_2_OE);
gpio_reg_val &= (~(1 << pin_no));
*GPIO_2_OE = gpio_reg_val ;
}

void uu_set_gpio3_output(unsigned int pin_no)
{
unsigned int gpio_reg_val=0;
gpio_reg_val = *(GPIO_3_OE);
gpio_reg_val &= (~(1 << pin_no));
*GPIO_3_OE = gpio_reg_val ;
}

void delay(unsigned int cnt) // delay function
{
unsigned int i;
for(i=0;i<=cnt;i++);
}

int Read_data(void)
{
unsigned int readreg=0x00;
RW_HIGH();
//RS_LOW();
readreg = *GPIO_0_DATAIN;
readreg= (readreg & (1<<18));

EN_HIGH();
delay(1000);
EN_LOW();
RW_LOW();
return readreg;
}
void Send_cmd(unsigned int CMD) // Command to be send
{
unsigned int status;
uu_set_gpio0_input(18);
status = Read_data();
//RW_LOW();
RS_LOW();
uu_set_gpio0_output(18);
*GPIO_0_DATAOUT|=CMD;
EN_HIGH();
delay(1000);
EN_LOW();
*GPIO_0_DATAOUT &= 0xFFFF807FF;;
}

void LCD_Init(void) // LCD initialization
{
unsigned int disp_ON=0;
disp_ON |=Display_ON();
Send_cmd(disp_ON);
//Clear_LCD();
CSA_LOW();
CSB_LOW();
RW_LOW();
RS_LOW();
delay(1000);
EN_LOW();

}
void Set_Page(unsigned int page)
{
page |= (0xB8 << 11); //
Send_cmd (page);
}

void Set_Col(unsigned int Col)
{
unsigned char Colo=0;
Colo = Col ;
if(Col < 64)
{

CSB_LOW();
CSA_HIGH();
//*GPIO_0_CLEARDATA_OUT = 0;
Col |= Col_Init();
Send_cmd (Col);
}
else if(Col > 63)
{
CSA_LOW();
CSB_HIGH();
Col = (Col << 11);
Col |= Col_Init();
Send_cmd (Col);
}
}

void LCD_Position(uint8_t x, uint8_t y)
{
unsigned int X;
if(x > 63) x = 0;
if(y > 127) y = 0;
X = x;
page = x/8;
column = y;
Set_Col(column);
page = (page << 11);
Set_Page(page);
}

void Send_data(unsigned int DATA) // Data to be send
{
unsigned int status1;
uu_set_gpio0_input(18);
status1 = Read_data();
uu_set_gpio0_output(18);
RS_HIGH();
delay(1000);

//RW_LOW();
//delay(1000);

DATA = (DATA << 11);
*GPIO_0_DATAOUT=DATA;

EN_HIGH();
delay(1000);

EN_LOW();
*GPIO_0_DATAOUT &= 0xFFFF807FF;
}

void Clear_LCD() // To clear entire lcd
{
unsigned int i,j;
for(i=0;i<=64;i++)
{
for(j=0;j<=128;j++)
{
Set_Col(j);
Set_Page(i);
Send_data(0x00);
}
}
}

void lcd_writech(uint8_t ch)
{
uint8_t i,p,cmd;
unsigned int base,tempreg;

uint8_t EOL; //End of line
uint8_t tmpcol=column;

if (ch > ASCIIH) ch = ASCIIH;
if (ch < ASCIIL) ch = ASCIIL;

EOL = column + CHAR_PW;
base = (ch - ASCIIL) * CHAR_PG * CHAR_PW;

if(EOL > 128)
{
column = 0;
Set_Col(column);
Send_cmd(SET_ADDRESS);
page = page + CHAR_PG;
cmd = SET_PAGE + page;
Send_cmd(cmd);
}
for (p=0;p<CHAR_PG;p++)
{
for(i=0; i< CHAR_PW ;i++)
{
Set_Col(tmpcol);
tempreg = (unsigned int)(fonts[base++]);

//*GPIO_0_DATAOUT = 0x00000000;
//*GPIO_0_DATAOUT = tempreg;

Send_data(tempreg);
tmpcol++;
}

/*if(CHAR_PG>1)
{
tmppage = tmppage + 1;
cmd = SET_PAGE | tmppage;
Send_cmd(cmd);

cmd = SET_ADDRESS | column;
Send_cmd(cmd);
tmpcol = column;
}*/
}

BR

Chethan

  • Chethan,

    I can recommend you to check the DM814x EVM LCD tests for reference:

    IO_EXPANSION_BOARD_Rev_D.zip -> IO EXPANSION BOARD Rev D/src/CCS_Test_Code/IOExpansion_Application/lcd_display and lcd_interposer_touch. You can start with the readme.txt files.

    The IO_EXPANSION_BOARD_Rev_D.zip file can be downloaded from:

    http://www.mistralsolutions.com/product-engineering-services/support-downloads/ -> Software -> Diagnostics Software -> Expansion I/O Board -> Rev D

    Regards,
    Pavel