zyh_126

LM3S9B96外设EPI_HB16模式驱动16位并行LCD

0
阅读(3836)

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);
   
 
}
液晶驱动器的设置如下:
void lcd_init(void)
{
 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);
 
}
测试工程文件11396381139667.rar