LcdTools如何实现读取屏寄存器值进行比对判断
LcdTools指令系统中,支持通信读取的指令有:MipiRead()、I2cRead()、SpiRead()、McuRead()、ReadDPCD()、AuxI2cRead();在上述通信读取后,读取出来的参数都是存到缓存rd[]中,最大空间为256;
对读取出来参数进行判断检测通常用到的指令有以下几个:LogicCmp()、ReadbufCmp()以及逻辑判断指令If()。
1. LogicCmp()
逻辑判断指令,可以实现两个参数的逻辑判断,判断结果存在第一个参数中,判断结果为真 值为1,判断结果为假 值为0;
第一个参数 var,变量参数,用于存放逻辑判断结果,通常用var0~var19,判断结果值可以用于识别判断做一些定制功能;
第二个参数 type,比较类似,用 相等用“EQ”、不等用“NE”、小于用“LT”、小于等于用“LE”、大于用“GT”、大于等于用“GE”来表示;
第三个参数 mode1,用于声明第一个比较数是实数还是变量,比如0x50就是实数,rd0就是变量;
第四个参数 cmp1,比较数1,用实数还是用变量表示由mode1决定,使用的两个参数需匹配,否则可能得不到预期效果。
第五、六个参数 参考第三、四,用法一样。
用法示例:
MipiRead(DCS,0x0A,1); //mipi读取屏0A寄存器中一个值
LogicCmp(var0, EQ, 1,rd0, 0,0x9C); //表示判断读数缓存中第一个值即rd0是否等于0x9C,如果等于0x9C则变量var0赋值为真(1),否则变量var0赋值为假(0)。
2. ReadbufCmp()
这条指令专门用于读数缓存数据判断,可以同时判断多个参数。
第一个参数 dest,用于存储判断结果的变量参数,通常用var0~var19,判断结果值可以用于识别判断做一些定制功能;
第二个参数 type,用于声明比较类型,由于这条指令用于多个数据判断,只能判断参数是否全等或者不等,用“EQUAL”表示全等,用“DIFFER”表示不等;
第三个参数 pos,用于声明参数判断起始位置,rd[]缓存最大空间为256,取值范围0~255;
之后的参数就是需要判断的参数,用实数表示方式,参数的个数1~256个。
用法示例:
I2cRead(0x50,0x10,SUBADDR1,16); //从 sla:0x50设备寄存器0x10中读取16个参数
ReadbufCmp(var1,DIFFER,0, 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x26,0xCF,0xFB,0x03,0x00,0x00,0x00,0x00); //判断IIC读取出来的16个数是不是这串16个数据,不是的话结果为真(1),是的话结果为假(0)
3. If()
通过前面的两种指令判断之后,就需要使用If()来执行结果了;If()判断函数必须与EndIf()成对使用,可以嵌套,也支持Else()分支;条件值参数 为变量值,就是前面判断语句后用于存放判断结果的变量值。
【例程1】
上电读取全代码烧录次数,如果烧录过显示OK信息,没有烧录过则下初始化代码,如下图;
【例程2】
全代码比对,把IC内寄存器烧录值逐个读取出来判断是否正确,如果有不对的,则认为烧录错误,全部正确则烧录正常;如下图;
【例程3】
IIC读取128个EDID值进行比对,异常报错。
上述例子示范了几种常见的读取屏寄存器值进行比对判断的实现方法,具体应用中请根据实际要求完成自己想要的功能,欢迎交流!