控制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)
{
}
【關閉窗口】