LM3S9B96外设EPI_HB16模式驱动16位并行LCD
0赞LCD采用的是SSD1298 驱动器,连接电路如下:

GPIO口的初始化配置如下:
void epi_port_init(void)
{
/*使能EPI接口*/
SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0);
/*使能各个使用的IO口*/
//SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
//SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
/*设置IO口功能*/
GPIOPinConfigure(GPIO_PH3_EPI0S0);
GPIOPinConfigure(GPIO_PH2_EPI0S1);
GPIOPinConfigure(GPIO_PC4_EPI0S2);
GPIOPinConfigure(GPIO_PC5_EPI0S3);
GPIOPinConfigure(GPIO_PC6_EPI0S4);
GPIOPinConfigure(GPIO_PC7_EPI0S5);
GPIOPinConfigure(GPIO_PH0_EPI0S6);
GPIOPinConfigure(GPIO_PH1_EPI0S7);
GPIOPinConfigure(GPIO_PE0_EPI0S8);
GPIOPinConfigure(GPIO_PE1_EPI0S9);
GPIOPinConfigure(GPIO_PH4_EPI0S10);
GPIOPinConfigure(GPIO_PH5_EPI0S11);
GPIOPinConfigure(GPIO_PF4_EPI0S12);
GPIOPinConfigure(GPIO_PG0_EPI0S13);
GPIOPinConfigure(GPIO_PG1_EPI0S14);
GPIOPinConfigure(GPIO_PF5_EPI0S15);
GPIOPinConfigure(GPIO_PJ4_EPI0S28);
GPIOPinConfigure(GPIO_PJ5_EPI0S29);
GPIOPinConfigure(GPIO_PJ6_EPI0S30);
GPIOPinTypeEPI(GPIO_PORTC_BASE, EPI_PORTC_PINS);
GPIOPinTypeEPI(GPIO_PORTE_BASE, EPI_PORTE_PINS);
GPIOPinTypeEPI(GPIO_PORTF_BASE, EPI_PORTF_PINS);
GPIOPinTypeEPI(GPIO_PORTG_BASE, EPI_PORTG_PINS);
GPIOPinTypeEPI(GPIO_PORTH_BASE, EPI_PORTH_PINS);
GPIOPinTypeEPI(GPIO_PORTJ_BASE, EPI_PORTJ_PINS);
EPIDividerSet(EPI0_BASE, 0);
EPIModeSet(EPI0_BASE, EPI_MODE_HB16);
EPIConfigHB16Set(EPI0_BASE,EPI_HB16_MODE_ADDEMUX | EPI_HB16_RDWAIT_2 | EPI_HB16_WRWAIT_2 | EPI_HB16_CSCFG_CS,0);
EPIAddressMapSet(EPI0_BASE, EPI_ADDR_PER_SIZE_256B | EPI_ADDR_PER_BASE_A);
}
{
epi_port_init();
DeviceCode = read_reg(0x0000);
if (DeviceCode == 0x8999)
{
// power supply setting
// set R07h at 0021h (GON=1,DTE=0,D[1:0]=01)
write_reg(0x07,0x0021);
// set R00h at 0001h (OSCEN=1)
write_reg(0x00,0x0001);
// set R07h at 0023h (GON=1,DTE=0,D[1:0]=11)
write_reg(0x07,0x0023);
// set R10h at 0000h (Exit sleep mode)
write_reg(0x10,0x0000);
// Wait 30ms
delay(3000);
// set R07h at 0033h (GON=1,DTE=1,D[1:0]=11)
write_reg(0x07,0x0033);
// Entry mode setting (R11h)
// R11H Entry mode
// vsmode DFM1 DFM0 TRANS OEDef WMode DMode1 DMode0 TY1 TY0 ID1 ID0 AM LG2 LG2 LG0
// 0 1 1 0 0 0 0 0 0 1 1 1 * 0 0 0
write_reg(0x11,0x6070);
// LCD driver AC setting (R02h)
write_reg(0x02,0x0600);
// power control 1
// DCT3 DCT2 DCT1 DCT0 BT2 BT1 BT0 0 DC3 DC2 DC1 DC0 AP2 AP1 AP0 0
// 1 0 1 0 1 0 0 0 1 0 1 0 0 1 0 0
// DCT[3:0] fosc/4 BT[2:0] DC{3:0] fosc/4
write_reg(0x03,0x0804);//0xA8A4
write_reg(0x0C,0x0000);//
write_reg(0x0D,0x080C);//
// power control 4
// 0 0 VCOMG VDV4 VDV3 VDV2 VDV1 VDV0 0 0 0 0 0 0 0 0
// 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0
write_reg(0x0E,0x2900);
write_reg(0x1E,0x00B8);
write_reg(0x01,0x2B3F);//驱动输出控制320*240 0x6B3F
write_reg(0x10,0x0000);
write_reg(0x05,0x0000);
write_reg(0x06,0x0000);
write_reg(0x16,0xEF1C);
write_reg(0x17,0x0003);
write_reg(0x07,0x0233);//0x0233
write_reg(0x0B,0x0000|(3<<6));
write_reg(0x0F,0x0000);//扫描开始地址
write_reg(0x41,0x0000);
write_reg(0x42,0x0000);
write_reg(0x48,0x0000);
write_reg(0x49,0x013F);
write_reg(0x4A,0x0000);
write_reg(0x4B,0x0000);
write_reg(0x44,0xEF00);
write_reg(0x45,0x0000);
write_reg(0x46,0x013F);
write_reg(0x30,0x0707);
write_reg(0x31,0x0204);
write_reg(0x32,0x0204);
write_reg(0x33,0x0502);
write_reg(0x34,0x0507);
write_reg(0x35,0x0204);
write_reg(0x36,0x0204);
write_reg(0x37,0x0502);
write_reg(0x3A,0x0302);
write_reg(0x3B,0x0302);
write_reg(0x23,0x0000);
write_reg(0x24,0x0000);
write_reg(0x25,0x8000); // 65hz
write_reg(0x4f,0); // 行首址0
write_reg(0x4e,0); // 列首址0
else
{
printf("LCD model is not recognized,DeviceCode = 0x%x!\r\n",DeviceCode);
return;
}
//数据总线测试,用于测试硬件连接是否正常.
lcd_data_bus_test();
lcd_clear(Red);
}
