ILI9325 is a 262,144-color one-chip SoC driver for a-TFT liquid crystal display with resolution of 240RGBx320
dots, comprising a 720-channel source driver, a 320-channel gate driver, 172,800 bytes RAM for graphic data
of 240RGBx320 dots, and power supply circuit.
26万色是色阶,具体就是,RGB每种颜色用6个位表示,这样就是64x64x64=262,144,当前主流的手机屏幕应该都是1600万色,就是256*256*256=16777216。
再来说这个172800 :320*240*2.25=172,800 个字节 320 240 很容易理解,2.25在这里是18个bit,也就是说,如果以26万色的色阶填充,填满整个屏幕,需要这么多个字节的数据,算了一下大概是168.75KB。
和显示编程最相关的是8.2.5. Entry Mode (R03h) 这个寄存器,其影响取模的方式,显示的位置。
从上面的描述就是水平方向上的递增递减来看,如果原点没有改动,上图中红色点标出的地方就是原点,
我将这里标记为物理原点。
对比实物图
ILI9325 has a 16-bit index register (IR), an 18-bit write-data register (WDR), and an 18-bit read-data register
(RDR). The IR is the register to store index information from control registers and the internal GRAM. The
WDR is the register to temporarily store data to be written to control registers and the internal GRAM. The
RDR is the register to temporarily store data read from the GRAM.
Data from the MPU to be written to the internal GRAM are first written to the WDR and then automatically written to the internal GRAM in internal operation. Data are read via the RDR from the internal GRAM.
Therefore, invalid data are read out to the data
bus when the ILI9325 read the first data from the internal GRAM. Valid data are read out after the ILI9325
performs the second read operation.
ILI9325 有一个16位的索引寄存器(缩写 IR),一个18位的写数据寄存器(缩写为WDR),和一个18位的读数据寄存器(缩写为RDR) 。IR用来存储来自控制寄存器和内部GRAM的索引信息,WDR是用来暂存写入到GRAM中的数据的。RDR是用来暂存来自GRAM的数据的。
来自MPU的写GRAM数据第一步写入到WDR,然后通过内部的自动操作,写入到GRAM中。读操作和写操作的道理一样。
因此,第一步读到总线上的数据是无效的,第二步读到的数据才是有效数据。
Address Counter (AC)
The address counter (AC) gives an address to the internal GRAM. When the index of the register for setting a
RAM address in the AC is written to the IR, the address information is sent from the IR to the AC. As writing
data to the internal GRAM, the address in the AC is automatically updated plus or minus 1. The window
address function enables writing data only in the rectangular area arbitrarily set by users on the GRAM.
地址计数器用来给内部的GRAM传递地址信息,当要设置AC的信息,先是将这个RAM地址写入IR中,然后传递给AC。
写一个数据到GRAM,AC 自动加1或者减1。 窗口地址功能使得任意写入到GRAM 中数据在窗口显示。
昨天一直弄错的一个问题,我想采用上面的配置 AM=0, ID=11 在水平方向上扫描,水平地址增长,垂直地址增长,
然后取模软件这边的设置如下图:
配合屏幕的方向,我在扫描的时候做了以上的设置,我将扫描的起点和屏幕的原点重合,
这样在增长方向上都是增加,事实证明这种扫描方式是可以的。
问题出来和软件的配合上
x=((uint16_t)(pic[2]<<8)+pic[3])-1; //从图像数组里取出图像的长度
y=((uint16_t)(pic[4]<<8)+pic[5])-1; //从图像数组里取出图像的高度
这种方式取出来的x=320
y=240
LCD_WR_CMD(EntryMode,0x1030); //图像显示方向为左下起 行递增 列递减
LCD_WR_CMD(HorizontalAddressStart, StartX); //水平显示区起始地址 0-239
LCD_WR_CMD(HorizontalAddressEndPosition, StartX+x); //水平显示区结束地址 0-239
LCD_WR_CMD(VerticalAddressStart, StartY); //垂直显示区起始地址 0-319
LCD_WR_CMD(VerticalAddressEndPosition, StartY+y); //垂直显示区结束地址 0-319
LCD_WR_CMD(HorizontalGramAddressSet, StartX); //水平显示区地址
LCD_WR_CMD(VerticalGramAddressSet, StartY); //垂直显示区地址
这样在水平方向就会越界,导致?屏。
这种扫描方式x应该是240 y是320