LCD與CPU的接線分控制線和資料線,控制線一般基於SPI協議,我們初始化LCD的寄存器就是通過這個,在主晶片的輸出格式固定的前提之下,調LCD也就是剩下始化寄存器而已,一般LCD移植,我們就是要關心這部分;資料線就是用來傳送像素資料到LCD,這部分一般不需要我們來控制了,只要接線沒問題,一般就是OK的。 我一直不解既然這部分是定死的代碼,為何不有IC廠商做成firmware,這樣豈不能省出控制線部分,有位老兄這樣解釋:
我們可以從另一個角度來看,初始化寄存器的數值充其量也就十幾B,遠遠達不到1KB。如果僅僅為這幾十B的資料而添加一個存放裝置,無形中增加了成本。所以很多LCD在使用之前都需要初始化其寄存器。呵呵,技術上講不通的,都是因為COST DOWN。
下面針對ILI9481DS的driver ic 講解一下控制部分也就是SPI部分,下面是ili9481ds SPEC 的Serial Interface時序圖:
從可以提取以下資訊:
1)SCL的上升沿LCD 讀取資料,下降沿SDA上的電平變化
2)傳輸單位為9bit,其中第一個bit 用來區分下面的8bit是command還是data, 第一個bit為0則是cmd,為1這是data
於是代碼如下,分發命令和資料兩個函數:
發命令的函數
static void ILI9481DS_spi_write_cmd_byte(u8 val){int i;gpio_set_value(spi_cs, 0); //"Low" enablegpio_set_value(spi_sclk, 0);gpio_set_value(spi_sdi, 0);udelay(1);gpio_set_value(spi_sclk, 1);//clk產生上升沿,讀取sdi電平為0,根據spec下面的8bit是command而不是dataudelay(1);/*取val二進位的各位,並通過sdi發送出去*/for (i = 0; i < 8; i++) {/* #1: Drive the Data (High or Low) */gpio_set_value(spi_sclk, 0);if (val & bit_shift[i]) //gpio_set_value(spi_sdi, 1);elsegpio_set_value(spi_sdi, 0);/* #2: Drive the Clk High and then Low */udelay(1);gpio_set_value(spi_sclk, 1);//clk產生上升沿,從機會讀取sid上的電平udelay(1);}/*FIXME: Idle state of sdi should be low */if (gpio_get_value(spi_sdi)) {gpio_set_value(spi_sdi, 0);}gpio_set_value(spi_cs, 1); //disable LCD chip}
發資料的函數
static void ILI9481DS_spi_write_data_byte(u8 val){int i;gpio_set_value(spi_cs, 0); //"Low" enablegpio_set_value(spi_sclk, 0);gpio_set_value(spi_sdi, 1); // dataudelay(1);gpio_set_value(spi_sclk, 1);//clk產生上升沿,讀取sdi電平為1,根據spec下面的8bit是data而不是commandudelay(1);/*取val二進位的各位,並通過sdi發送出去*/for (i = 0; i < 8; i++) {/* #1: Drive the Data (High or Low) */gpio_set_value(spi_sclk, 0);if (val & bit_shift[i]) //gpio_set_value(spi_sdi, 1);elsegpio_set_value(spi_sdi, 0);/* #2: Drive the Clk High and then Low */udelay(1);gpio_set_value(spi_sclk, 1);//clk產生上升沿,從機會讀取sid上的電平udelay(1);}/*FIXME: Idle state of sdi should be low */if (gpio_get_value(spi_sdi)) {gpio_set_value(spi_sdi, 0);}gpio_set_value(spi_cs, 1); //disable LCD chip}
兩個函數的區別僅僅是紅色標識部分!
補充一點,關於通過SPI寫入lcd的資料,什麼是cmd什麼是data,可以看一下這個文章
http://www.52rd.com/bbs/Detail_RD.BBS_214230_5_1_1.html