對於RGB16來說,一個像素佔2個字節,這樣2個像素組合成1個字.
假如LCD面板上的某一行像素排列是P1 P2 P3 P4 P5 P6 P7 P8.
且我們定義unsigned int LCD_BUFFER[8]來存放像素數據.
那麼LCD_BUFFER[0],LCD_BUFFER[1].....LCD_BUFFER[7]就是對應這8個點的數據.
這樣LCD控制器拿到地址LCD_BUFFER後會以LCD_BUFFER爲起始地址取出一個字即4個字節去刷屏幕,這時候它犯難了,
1)到底是這個字的高16位還是低16位是第一個像素???
所以這時候我們得設置HWSWP = 0,即不進行半字交換,這樣高16位就表示是第一個像素的,低16位是第二個像素的.這樣做的原因是我們的程序是用大端格式編譯的,比如0x12345678,在大端格式下就是
B31 B24 B23 B16 B15 B8 B7 B0
0x12 0x34 0x56 0x78
2)當LCD控制器知道高16位是第一個像素的時候,又犯難了
這16位數據,高8bit和低8bit是怎麼安排的,
RGB16,我們採用的是 565的方式,紅色有5bit,綠色6bit,藍色5bit.
B15 B11 B10 B5 B4 B0
R G B
也就是沒有字節交換,所以要設置BSWP = 0,即字節交換爲0.