P1调试出现问题解析

 声明:本资料来自公司同事整理

       SCCB:简单说I2C是相同的一个协议。 SIO_CSIO_D分别为SCCB总线的时钟线和数据线。SCCB控制总线功能的实现完全是依靠SIO_CSIO_D两条总线上电平的状态以及两者之间的相互配合实现的。其支持两种地址形式:从设备地址(ID Address8bit),分为读地址和写地址,高7位用于选中芯片, 0位是读/写控制位(R/W),决定是对该芯片进行读或写操作;内部寄存器单元地址(Sub_ Address8bit),用于决定对内部的哪个寄存器单元进行操作,通常还支持地址单元连续的多字节顺序读写操作。

 

       DMA传输: DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAMI/O接口进行DMA传输。所以DMA传输的延时要小。

 

1.如果遇到SCCB通信不正常,可以看一下这一点建议

 

       具体的例子,位于sccb.h

 

#elif defined(MT6253T) || defined(MT6253)

   #ifdef __CUST_NEW__

   #define SCCB_SERIAL_CLK_PIN          28  //(24|GPIO_MAGIC_NUM)

   #define SCCB_SERIAL_DATA_PIN        27   //(25|GPIO_MAGIC_NUM)

   #else /* __CUST_NEW__ */

  …

建议改为

#elif defined(MT6253T) || defined(MT6253)

   #ifdef __CUST_NEW__

   #define SCCB_SERIAL_CLK_PIN          gpio_sccb_serial_clk_pin  //28  //(24|GPIO_MAGIC_NUM)

   #define SCCB_SERIAL_DATA_PIN                 gpio_sccb_serial_data_pin //27   //(25|GPIO_MAGIC_NUM)

   #else /* __CUST_NEW__ */

 

其中SCCB_SERIAL_CLK_PIN  为时钟线,SCCB_SERIAL_DATA_PIN  为数据线。通过其对应的gpio进行电平高低配置来修改所需的地址。

 

这样方便统一管理引脚配置,MTK定义__CUST_NEW__就是方便配置,否则要花时间到处这个定义。

 

2. 如果遇到屏无法正常显示,大家可以看一下这一点建议

 

lcd.c文件中对lcd的寄存器进行配置时都采用了dma传送数据

  现在lcd.c中存在如下代码

例如

                   #define LCD_CtrlWrite_ILI9325DS(_data) /

                   {/

                            SET_LCD_CMD_PARAMETER(0,LCD_CMD,((_data & 0xFF00)>>8));/

                            SET_LCD_CMD_PARAMETER(1,LCD_CMD,(_data & 0xFF));/

                            LCD_SEND_DMA_CMD(2);/

                   }/

SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0050&0xFF00));//0x0050 startx的寄存器

         SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0050 & 0xFF));

         SET_LCD_ROI_CTRL_NUMBER_OF_CMD(26);

 

这样做的好处是快速配置lcd, 更节省时间,但是有一定的弊端:有些屏无法接受如此快的设置,导致无法正常显示。

解决的方法有两个:

方法1:在init_lcd_interface降低lcd读写时序,将延迟加大

方法2.:在配置lcd寄存器时不采用dma传送方式,而采用一般的读写方式,例如如下定义

#define LCD_CtrlWrite_General(_data)  /

                   {/

                            *(volatile kal_uint8 *) MAIN_LCD_CMD_ADDR= ((_data & 0xFF00)>>8);/

                            *(volatile kal_uint8 *) MAIN_LCD_CMD_ADDR= (_data & 0xFF);/

                            LCD_Drv_delay();/

                   }/

#define  LCD_set_reg_General(reg_index, reg_data) /

{ /

    LCD_CtrlWrite_General(reg_index); /

    LCD_DataWrite_General(reg_data);/

}

虽然方法2会稍微慢一点,但是配置寄存器所占时间毕竟不是很长,影响不大,如果降低dma读写时序,对整个刷屏的时间会有一定的影响。

 

 

 

 

 

 

3. 如果发现camera键已经利用Drv_Tool目录下的DrvGen.exe配置了,但是按camera键还是没有任何反应,可以参考此点

KeyBrd.c const static key_code_map_struct g_key_code_map[]中添加如下一行

     {DEVICE_KEY_CAMERA,      KEY_CAMERA},

 

同过这个例子,可以看到按键事件的初始化过程存在着物理按键与逻辑按键的映射。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值