控制LCD由以下几部分:
1.打开FSMC时钟
2.初始化FSMC用到的IO口
3.FSMC初始化
//寄存器清零
//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
//这里我们使用NE4 ,也就对应BTCR[6],[7]。
FSMC_Bank1->BTCR[6]=0X00000000;
FSMC_Bank1->BTCR[7]=0X00000000;
FSMC_Bank1E->BWTR[6]=0X00000000;
//操作BCR寄存器 使用异步模式
FSMC_Bank1->BTCR[6]|=1<<12; //存储器写使能
FSMC_Bank1->BTCR[6]|=1<<14; //读写使用不同的时序
FSMC_Bank1->BTCR[6]|=1<<4; //存储器数据宽度为16bit
//操作BTR寄存器
//读时序控制寄存器
FSMC_Bank1->BTCR[7]|=0<<28; //模式A
FSMC_Bank1->BTCR[7]|=1<<0; //地址建立时间(ADDSET)为2个HCLK
1/36M=27ns
//因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
FSMC_Bank1->BTCR[7]|=0XF<<8;
//数据保存时间为16个HCLK
//写时序控制寄存器
FSMC_Bank1E->BWTR[6]|=0<<28; //模式A
FSMC_Bank1E->BWTR[6]|=0<<0;
//地址建立时间(ADDSET)为1个HCLK
FSMC_Bank1E->BWTR[6]|=3<<8; //数据保存时间为4个HCLK
//使能BANK1,区域4
FSMC_Bank1->BTCR[6]|=1<<0; //使能BANK1,区域4
4.调用NT35310的初始化函数(代码量太大就不粘贴了)
然后就是根据数据手册进行LCD的操作了,因为LCD是16位的所以内部的第11位连接外面的PA10,所以
#define lcd_wr_r 0x6c000000 //写命令
第11位为0
#define lcd_wr_d 0x6c000800 //写数据 第11位为1
void LCD_WR_REG(u16 command)
{
}
void LCD_WR_DATA(u16 data)
{
}
void lcd_wr_cmd(u16 command,u16 data)
{
}
【关闭窗口】