I.MX6 Linux mipi配置数据合成
生活随笔
收集整理的這篇文章主要介紹了
I.MX6 Linux mipi配置数据合成
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/**************************************************************************** I.MX6 Linux mipi配置數據合成* 聲明:* 由于現有mipi配置數據不符合I.MX6的配置參數,需要將該參數進行數據轉換,* 而這又涉及到對數據處理簡單算法,主要是為了驗證轉換代碼可靠性。 ** 2015-12-24 深圳 南山平山村 曾劍鋒**************************************************************************/#include <stdio.h>
#include <string.h>
#include <unistd.h>#define REGFLAG_DELAY 0XFFE
#define REGFLAG_END_OF_TABLE 0xFFF // END OF REGISTERS MARKER
#define DSI_CMD_BUF_MAXSIZE 32
// 嵌入式產品數據存儲可能涉及到的大小端
#define BIG_ENDIAN 1
#define LITTLE_ENDIAN 2struct LCM_setting_table {unsigned cmd;unsigned char count;unsigned char para_list[64];
};static struct LCM_setting_table lcm_initialization_setting[] = {{0xB9,3,{0xFF,0x83,0x94}},//Set MIPI{0xBA,6,{0x63,0x03,0x68,0x6B,0xB2,0xC0}},//Set Power{0xB1,10,{0x48,0x12,0x72,0x09,0x32,0x44,0x71,0x31,0x4F,0x35}},//Set Display{0xB2,5,{0x65,0x80,0x64,0x05,0x07}},//Set CYC{0xB4,30,{0x26,0x76,0x26,0x76,0x26,0x26,0x05,0x10,0x86,0x35,0x00,0x3F,0x26,0x76,0x26,0x76,0x26,0x26,0x05,0x10,0x86,0x3F,0x00,0xFF,0x81,0x81,0x81,0x81,0x08,0x01}},//Set D3{0xD3,33,{0x00,0x00,0x0F,0x0F,0x01,0x01,0x10,0x10,0x32,0x10,0x00,0x00,0x00,0x32,0x15,0x04,0x05,0x04,0x32,0x15,0x14,0x05,0x14,0x37,0x33,0x04,0x04,0x37,0x00,0x00,0x47,0x05,0x40}},//Set GIP{0xD5,44,{0x18,0x18,0x25,0x24,0x27,0x26,0x11,0x10,0x15,0x14,0x13,0x12,0x17,0x16,0x01,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x05,0x04,0x03,0x02,0x07,0x06,0x18,0x18,0x18,0x18,0x21,0x20,0x23,0x22,0x18,0x18,0x18,0x18}},//Set D6{0xD6,44,{0x18,0x18,0x22,0x23,0x20,0x21,0x12,0x13,0x16,0x17,0x10,0x11,0x14,0x15,0x06,0x07,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x02,0x03,0x04,0x05,0x00,0x01,0x18,0x18,0x18,0x18,0x26,0x27,0x24,0x25,0x18,0x18,0x18,0x18}},//Set Gamma{0xE0,58,{0x00,0x03,0x0B,0x0E,0x10,0x13,0x17,0x15,0x2D,0x3D,0x51,0x51,0x5E,0x75,0x7C,0x84,0x94,0x9A,0x98,0xA6,0xB2,0x57,0x57,0x5A,0x60,0x64,0x6A,0x72,0x7F,0x00,0x03,0x0B,0x0E,0x10,0x13,0x17,0x15,0x2D,0x3D,0x51,0x51,0x5E,0x75,0x7C,0x84,0x94,0x9A,0x98,0xA6,0xB2,0x57,0x57,0x5A,0x60,0x64,0x6A,0x72,0x7F}},//Set VCOM{0xB6,2,{0x34,0x34}},//Set Panel{0xCC,1,{0x0D}},//Set C0{0xC0,2,{0x1F,0x31}},//Set D2{0xD2,1,{0x88}},//Set EMI,0xenhance{0xD4,1,{0x02}},//Set BD{0xBD,1,{0x01}},//Set Power{0xB1,1,{0x60}},//Set BD{0xBD,1,{0x00}},//Set Power,0xOption,0xHX5186,0xMode{0x11,1, {0}},{REGFLAG_DELAY, 150, {}},{0xBF,7,{0x40,0x81,0x50,0x00,0x1A,0xFC,0x01}},{0x29,1, {0}},{REGFLAG_DELAY, 50, {}},{REGFLAG_END_OF_TABLE, 0x00, {}}
};/*** 合成數據* 1. buf:用于存儲合成后的數據;* 2. pare_list:用于合成的數據源,是字節數據;* 3. count:調用當前函數時使用pare_list中的字節數;* 4. endianType:合成數據時采用大端、小端的那種。*/
void compoundData(unsigned int *buf, unsigned char *para_list, int count, int endianType) {unsigned int tmp = 0;int i = 0;for ( i = 0; i < count; i++ ) {tmp <<= 8;switch ( endianType ) {case BIG_ENDIAN :tmp |= para_list[count-i-1];break;default :tmp |= para_list[i];break;}}*buf = tmp;
}static void push_table(struct LCM_setting_table *table, unsigned int count)
{int index = 0;int err;int i, j;unsigned int buf[DSI_CMD_BUF_MAXSIZE] = {0};for (i = 0; i < count; i++) {printf("%02d | length: %03d |", i, table[i].count);unsigned cmd;cmd = table[i].cmd;switch (cmd) {case REGFLAG_DELAY :usleep(table[i].count);break;case REGFLAG_END_OF_TABLE :break;default:printf(" aliquot: %02d | 0x", (table[i].count)/4);/*** 合成數據,buf是整形,每次合成para_list中4個字節。* 這部分的是合成能夠被整除的那一部分的數據,后面對余下的那一部分再進行合成。*/for ( j = 0; j < ( (table[i].count)/4 ); j++ ) {index = j * 4;compoundData(buf + j, &(table[i].para_list[index]), 4, LITTLE_ENDIAN);//compoundData(buf + j, &(table[i].para_list[index]), 4, BIG_ENDIAN);//控制輸出數據格式。printf("%08x", buf[j]);}/*** 接下來對4取余的余數進行合成*/index = j * 4;int remainder = table[i].count - index;if ( remainder != 0 ) {compoundData(buf + j, &(table[i].para_list[index]), table[i].count - index, LITTLE_ENDIAN);//compoundData(buf + j, &(table[i].para_list[index]), table[i].count - index, BIG_ENDIAN);//控制輸出數據格式。switch ( remainder ) {case 1:printf("%02x", buf[j]);break;case 2:printf("%04x", buf[j]);break;case 3:printf("%06x", buf[j]);break;}}// 對buf進行清空,對下次數據合成造成影響。
bzero(buf, DSI_CMD_BUF_MAXSIZE); //memset(buf, 0, DSI_CMD_BUF_MAXSIZE); break;}printf("\n\r");}
}int main( int argc, char** argv )
{push_table(lcm_initialization_setting, sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table));
}/*** 輸出結果:* 00 | length: 003 | aliquot: 00 | 0xff8394* 01 | length: 006 | aliquot: 01 | 0x6303686bb2c0* 02 | length: 010 | aliquot: 02 | 0x48127209324471314f35* 03 | length: 005 | aliquot: 01 | 0x6580640507* 04 | length: 030 | aliquot: 07 | 0x26762676262605108635003f2676267626260510863f00ff818181810801* 05 | length: 033 | aliquot: 08 | 0x00000f0f0101101032100000003215040504321514051437330404370000470540* 06 | length: 044 | aliquot: 11 | 0x1818252427261110151413121716010018181818181818181818050403020706181818182120232218181818* 07 | length: 044 | aliquot: 11 | 0x1818222320211213161710111415060718181818181818181818020304050001181818182627242518181818* 08 | length: 058 | aliquot: 14 | 0x00030b0e101317152d3d51515e757c84949a98a6b257575a60646a727f00030b0e101317152d3d51515e757c84949a98a6b257575a60646a727f* 09 | length: 002 | aliquot: 00 | 0x3434* 10 | length: 001 | aliquot: 00 | 0x0d* 11 | length: 002 | aliquot: 00 | 0x1f31* 12 | length: 001 | aliquot: 00 | 0x88* 13 | length: 001 | aliquot: 00 | 0x02* 14 | length: 001 | aliquot: 00 | 0x01* 15 | length: 001 | aliquot: 00 | 0x60* 16 | length: 001 | aliquot: 00 | 0x00* 17 | length: 001 | aliquot: 00 | 0x00* 18 | length: 150 |* 19 | length: 007 | aliquot: 01 | 0x408150001afc01* 20 | length: 001 | aliquot: 00 | 0x00* 21 | length: 050 |* 22 | length: 000 |* * shell returned 23* * Press ENTER or type command to continue*/
?
總結
以上是生活随笔為你收集整理的I.MX6 Linux mipi配置数据合成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享一些QQ常用的WEB接口(新)
- 下一篇: 【c++面向过程实验6】函数