|
楼主 |
发表于 2012-2-21 16:26:46
|
显示全部楼层
都是通过spi写入LCD module,如何区分是cmd还是data?
两个接口如下:
- static void ILI9481ds_spi_write_reg_byte(u8 val)
- {
- int i;
- gpio_set_value(spi_cs, 0);
- gpio_set_value(spi_sclk, 0);
- gpio_set_value(spi_sdi, 0);
- ndelay(100);
- gpio_set_value(spi_sclk, 1); /区别就在这里:写data时这里是拉低
- ndelay(100);
- 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);
- else
- gpio_set_value(spi_sdi, 0);
- /* #2: Drive the Clk High and then Low */
- //ndelay(100);
- gpio_set_value(spi_sclk, 1);
- ndelay(100);
- }
- /*FIXME: Idle state of sdi should be low */
- if (gpio_get_value(spi_sdi)) {
- //pr_info("%s(): warning spi_sdi may dismatch\n", __func__);
- gpio_set_value(spi_sdi, 0);
- }
- gpio_set_value(spi_cs, 1);
- }
- static void ILI9481ds_spi_write_data_byte(u8 val)
- {
- int i;
-
- gpio_set_value(spi_cs, 0);
- gpio_set_value(spi_sclk, 0);
- gpio_set_value(spi_sdi, 1);
-
- ndelay(100);
- gpio_set_value(spi_sclk, 1);
- ndelay(100);
- 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);
- else
- gpio_set_value(spi_sdi, 0);
- /* #2: Drive the Clk High and then Low */
- //ndelay(100);
- gpio_set_value(spi_sclk, 1);
- ndelay(100);
- }
- /*FIXME: Idle state of sdi should be low */
- if (gpio_get_value(spi_sdi)) {
- //pr_info("%s(): warning spi_sdi may dismatch\n", __func__);
- gpio_set_value(spi_sdi, 0);
- }
- gpio_set_value(spi_cs, 1);
- }
复制代码
上面两个函数的唯一区别就是传送数据前spi这个线的高低不同,当是cmd时,spi拉低,data时,spi拉高。
请问这是有lcd 的IC决定的还是spi的规范? |
|