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.
Hi there,
When I start to create a simple project, which contains some routines to control the LCM module. But some problems have been bothering me for a long time. I post my question first and code as followed.
1. I step over to the red line first, then I step into function LCM_Write_CMD. I pause my CCS when it goes to green line. I use oscilloscope to measure the signal form PD1. The output should be 0, but in here it shows about 3.3V.
2. The same reason like question 1. When I send 0x20 as the input parameter of function LCM_Write_CMD in the orange line. I pause the CCS in the purple line, then I measure the signal from PB6. The output should be 0, but in here it shows about 3.3V.
Is there any routine that I forget to set up or something wrong with my code? Hope someone can help me to figure out what happens. Thanks a lot!
Sincerely,
Vincent.
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "inc/hw_gpio.h"
#include "driverlib/watchdog.h"
#include "driverlib/gpio.h"
#include "driverlib/debug.h"
#include "driverlib/adc.h"
#include "driverlib/fpu.h"
#include "driverlib/rom.h"
#define TARGET_IS_BLIZZARD_RA1
#define DELAY_TEST ROM_SysCtlDelay(10000);
/***Pin Definition****/
#define LCM_DB_PERIPHERAL SYSCTL_PERIPH_GPIOB
#define LCM_DB_BASE GPIO_PORTB_BASE
#define DB0 GPIO_PIN_0
#define DB1 GPIO_PIN_1
#define DB2 GPIO_PIN_2
#define DB3 GPIO_PIN_3
#define DB4 GPIO_PIN_4
#define DB5 GPIO_PIN_5
#define DB6 GPIO_PIN_6
#define DB7 GPIO_PIN_7
#define LCM_CONTROL_PERIPHERAL SYSCTL_PERIPH_GPIOD
#define LCD_CONTROL_BASE GPIO_PORTD_BASE
#define RS GPIO_PIN_0
#define RW GPIO_PIN_1
#define LCM_E GPIO_PIN_2
/****Control Pin Definition******/
#define LCM_RW1 ROM_GPIOPinWrite(LCD_CONTROL_BASE, RW, 0xFF)
#define LCM_RW0 ROM_GPIOPinWrite(LCD_CONTROL_BASE, RW, 0x00)
#define LCM_RS1 ROM_GPIOPinWrite(LCD_CONTROL_BASE, RS, 0xFF)
#define LCM_RS0 ROM_GPIOPinWrite(LCD_CONTROL_BASE, RS, 0x00)
#define LCM_E1 ROM_GPIOPinWrite(LCD_CONTROL_BASE, LCM_E, 0xFF)
#define LCM_E0 ROM_GPIOPinWrite(LCD_CONTROL_BASE, LCM_E, 0x00)
/****System Setting*****/
void Initializing(void);
/********LCM Function*********/
void LCM_Reset(void);
void LCM_Write_CMD(unsigned char CMD);
void LCM_Write_Data(unsigned char DATA);
void LCM_Print(unsigned char rol, unsigned char *string);
void Set_String(unsigned char *string, unsigned char char0, unsigned char char1, unsigned char char2, unsigned char char3, unsigned char char4, unsigned char char5, unsigned char char6, unsigned char char7, unsigned char char8, unsigned char char9, unsigned char char10, unsigned char char11, unsigned char char12, unsigned char char13, unsigned char char14, unsigned char char15, unsigned char char16, unsigned char char17);
void main(void)
{
/*****************************************/
/****************Initialize***************/
Initializing();
LCM_Reset(); // LCM Initialize
/***** LCM TEST ********/
Set_String(string, 'S', 'U', 'C', 'C', 'E', 'S', 'S', 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20);
LCM_Print(1, string);
while(1);
}
void Initializing(void)
{
ROM_SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_4MHZ);
/*********************/
/********LCM**********/
/*********************/
ROM_SysCtlPeripheralEnable(LCM_DB_PERIPHERAL);
ROM_SysCtlPeripheralEnable(LCM_CONTROL_PERIPHERAL);
ROM_GPIOPinTypeGPIOOutput(LCM_DB_BASE, DB0|DB1|DB2|DB3|DB4|DB5|DB6|DB7);
ROM_GPIOPinTypeGPIOOutput(LCD_CONTROL_BASE, RS|RW|LCM_E);
ROM_GPIOPadConfigSet(LCM_DB_BASE, DB0|DB1|DB2|DB3|DB4|DB5|DB6|DB7, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);
ROM_GPIOPadConfigSet(LCD_CONTROL_BASE, RS|RW|LCM_E, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);
}
void LCM_Reset(void)
{
DELAY_TEST;
LCM_Write_CMD(0x30);
DELAY_TEST;
LCM_Write_CMD(0x30);
DELAY_TEST;
LCM_Write_CMD(0x0E);
DELAY_TEST;
LCM_Write_CMD(0x06);
DELAY_TEST;
LCM_Write_CMD(0x01);
DELAY_TEST;
LCM_Write_CMD(0x02);
DELAY_TEST;
}
void LCM_Write_CMD(unsigned char CMD)
{
ROM_GPIOPinWrite(LCM_DB_BASE, DB0|DB1|DB2|DB3|DB4|DB5|DB6|DB7, CMD);
LCM_RS0;
LCM_RW0;
LCM_E1;
ROM_SysCtlDelay(100); // Delay
LCM_E0;
}
void LCM_Write_Data(unsigned char DATA)
{
ROM_GPIOPinWrite(LCM_DB_BASE, DB0|DB1|DB2|DB3|DB4|DB5|DB6|DB7, DATA);
LCM_RS1;
LCM_RW0;
LCM_E1;
ROM_SysCtlDelay(100); // Delay
LCM_E0;
}
void LCM_Print(unsigned char rol, unsigned char *string)
{
unsigned char byte_number=0;
if(rol==1) /* First Line */
{
LCM_Write_CMD(0x80);
for(byte_number=0; byte_number<18; byte_number++)
{
LCM_Write_Data(*(string+byte_number));
}
}
else if(rol==2) /* Second Line */
{
LCM_Write_CMD(0x90);
for(byte_number=0; byte_number<18; byte_number++)
{
LCM_Write_Data(*(string+byte_number));
}
}
else /* ERROR */
{
LCM_Write_CMD(0x80);
for(byte_number=0; byte_number<18; byte_number++)
{
LCM_Write_Data(*(ERROR+byte_number));
}
LCM_Write_CMD(0x90);
for(byte_number=0; byte_number<18; byte_number++)
{
LCM_Write_Data(*(ERROR+byte_number));
}
}
}
void Set_String(unsigned char *string, unsigned char char0, unsigned char char1, unsigned char char2, unsigned char char3, unsigned char char4, unsigned char char5, unsigned char char6, unsigned char char7, unsigned char char8, unsigned char char9, unsigned char char10, unsigned char char11, unsigned char char12, unsigned char char13, unsigned char char14, unsigned char char15, unsigned char char16, unsigned char char17)
{
*(string+0) = char0;
*(string+1) = char1;
*(string+2) = char2;
*(string+3) = char3;
*(string+4) = char4;
*(string+5) = char5;
*(string+6) = char6;
*(string+7) = char7;
*(string+8) = char8;
*(string+9) = char9;
*(string+10) = char10;
*(string+11) = char11;
*(string+12) = char12;
*(string+13) = char13;
*(string+14) = char14;
*(string+15) = char15;
*(string+16) = char16;
*(string+17) = char17;
}
Hi,
Vincent Tsai said:1. I step over to the red line first, then I step into function LCM_Write_CMD. I pause my CCS when it goes to green line. I use oscilloscope to measure the signal form PD1. The output should be 0, but in here it shows about 3.3V.
You expect PD1 to be 0 from this code below.
Vincent Tsai said:ROM_GPIOPinWrite(LCM_DB_BASE, DB0|DB1|DB2|DB3|DB4|DB5|DB6|DB7, DATA);
The problem is you defined LCM_DB_BASE as PORTB. See, below.
Vincent Tsai said:#define LCM_DB_BASE GPIO_PORTB_BASE
-kel