MTK平台驱动调试介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 步骤3:
• • • • • • • • • • • 加入背光控制代码; Mcu\custom\drv\misc_drv\custom_equipment.c kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level ) { //用SUNRISE_0255_LCM来控制代码 } GPIO模式和PWM模式;(函数默认是PWM模式) 如果是GPIO模式;则在上述函数中加入模拟代码; 如果是PWM模式;则需要根据实际情况在 Mcu\custom\drv\misc_drv\custom_hw_default.c文件中修改 PWM1_Level_Info;即频率和占空比; 另外在 mcu\plutommi\mmi\gpio\gpioSrc\GeneralDeviceInterface.c中有 详细的MMI对背光的控制代码; 另外还需熟悉lcd_if.c(mcu\drv\src)对上述接口的调用;
MTK平台驱动调试介绍
模块事业部
GPRS Solution Block Diagram
各模块调试介绍
• 主要包括: • GPIO/GPO • Backlight、LCM • Vibrator • Touch panel • Keypad • AFE • ADC • EINT • Charger • Audio • Flash • BT • Others
• 步骤1:
• 步骤2:
• • • • • • • • • • • • • Mcu\custom\drv\LCD目录下添加SUNRISE_0255_LCM模块;目录以 SUNRISE_0255_LCM为名。 可以参考其他LCM;加入和修改5个文件分别为: lcd.c lcd_hw.h lcd_sw.h lcd_sw_inc.h lcd_sw_rnd.h lcd.c:实现LCD的驱动接口 一般有init; sleep in;sleep out; block write等 lcd_hw.h: 一般不需要修改; lcd_sw.h: 配置data address;command address和output format; lcd_sw_inc.h:配置LCD WIDTH和HEIGHT; lcd_sw_rnd.h: 一般不需修改;
• 关键的几个函数: • void TurnOffBacklight(void):打开背光计时的timer。 • Static void BacklightTimerHdlr(void):背光timer调用处理 函数。 • Void TurnOnBacklight(gpio_backlight_time_enumtime_enum): 打开的背光函数。 • 注意: • 当time_enum=0时,即调用TurnOnBacklight(0),作用是 关闭背光的timer,使背光保持常 • 亮不灭。如果需要恢复正常需要先调用一下 TurnOffBacklight()函数使timer正常ห้องสมุดไป่ตู้作。 • 背光、键盘灯的亮灭和lcdsleep in/sleep out在以上函数里 有同步的处理。
• • • • • • • • • • • • • •
根据Hardware resource table配置硬件资源配置GPIO/GPO的初始化 设置; \mcu\custom\drv\misc_drv\SIMC25_06B_BB\gpio_drv.c •void GPIO_init(void) •{ •…… •/*GPIO0-7 配置为GPIO模式*/ •DRV_WriteReg(GPIO_MODE1,0x0000); •DRV_WriteReg(GPIO_MODE2,0x5555); •DRV_WriteReg(GPIO_MODE3,0x1555); •DRV_WriteReg(GPIO_MODE5,0x5680); •DRV_WriteReg(GPIO_MODE6,0x5515); •DRV_WriteReg(GPIO_MODE7,0x1555); •…… •……
模块调试:LCM、Backlight
LCM
Main-Panel LCD Module EMI/NFI 8080
Parallel Accelerator
LCD DMA Controller
Sub-Panel LCD Module (Opt.)
LCD DATA LCD CLK LCD CS0/1 LCD A0
Serial Accelerator
MT 62XX
• • • • • • • • • • • • •
以SUNRISE_0255_LCM为例 MXX_GPRS.mak中配置LCD_MODULE和MAIN_LCD_SIZE; LCD_MODULE = SUNRISE_0255_LCM MAIN_LCD_SIZE = 240X320 Option.mak中加入: COM_DEFS_FOR_SUNRISE_0255_LCM = SUNRISE_0255_LCM HX8312 COLOR_LCD TFT_MAINLCD QVGA_MAINLCD 其中HX8312为LCD的型号; COLOR_LCD,TFT_MAINLCD,QVGA_MAINLCD为LCD的类型 QVGA_MAINLCD:240X320 QCIF_MAINLCD: 176X220 QQVGA_MAINLCD: 120X160 如在SUNRISE_0255_LCM的基础上添加兼容屏;则在HX8312后面 顺序加入LCD的型号 如果有Sub LCD;则需要顺序加入DUAL_LCD;COLOR_SUBLCD 以及型号名称;
• • • • •
配置GPIO/GPO:GPIO/GPO的初始化设置; 配置中断号:蓝牙中断号、Charger中断检测号等; 键盘定义:设置对power键才能正常开机; ADC 通道设置:Charger,Earphone检测通道等; 其他设置:音频PA开关设置等。
模块调试:GPIO/GPO
• MT6223 offers 52 general-purpose I/O pins
• • • • • • • • • • • • • • • • •
键盘映射(注意加入顺序要与PresentAllKeys[ ]中一致) static const KeyPadMapnKeyPadMap[]= { {DEVICE_KEY_0,KEY_0,KEY_TIMER_ID0,TONE_DTMF_0, DEVICE_AUDIO_PLAY_INFINITE}, {DEVICE_KEY_1,KEY_1,KEY_TIMER_ID1,TONE_DTMF_1, DEVICE_AUDIO_PLAY_INFINITE}, …… …… //映射特定的按键 {DEVICE_KEY_XX,KEY_XX,KEY_TIMER_IDXX,TONE_DTMF_1, DEVICE_AUDIO_PLAY_INFINITE}, }; 定义TIMER ID: 即KEY_TIMER_IDXX 在plutommi\mmi\Inc\TimerEvents.h中顺序加入KEY_TIMER_IDXX; 在drv\src\kbdmain.c中可以修改debouncetime,Long press Time, Repeat Time等参数来满足特殊的需要。
• • • •
• • • • • • • • • • • • •
如果需要添加新键,除了上述外还需修改以下几处: interface\hwdrv\kbd_table.h 定义DEVICE_KEY_XX:注意顺序 #define DEVICE_KEY_XX顺序值 plutommi\mmi\Framework\Osl\OslSrc\KeyBrd.c 假设DEVICE_KEY_XX为特定的按键 定义特定的按键 const U16 PresentAllKeys[ ]= { KEY_0,KEY_1,KEY_2,KEY_3,KEY_4,KEY_5,…… //定义特定的按键 KEY_XX, };
模块调试:Vibrator
• \mcu\custom\drv\misc_drv\SIMC25_06B_BB\custom_e quipment.c
• • • • • • kal_boolcustom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level) { …… switch(gpio_dev_type) { case GPIO_DEV_VIBRATOR:
– – – – – –
• • • •
…… //add code here …… break; …… }
} 马达控制方式: 1.GPIO直接控制:只有高低电平的切换。 2.PWM方式:可以调整占空比和频率来调节马达的振感。
模块调试:Touch panel
• • • • • • • • • • •
custom\drv\misc_drv\M678_BB\touch_panel_custom.c custom\drv\misc_drv\M678_BB\touch_panel_custom.h custom\drv\misc_drv\M678_BB\touch_panel_spi.c custom\drv\misc_drv\M678_BB\touch_panel_spi.h drv\src\touch_panel.c drv\src\touch_panel_main.c 修改点包括: GPIO分配、ADC值、坐标值、中断配置、压力检测等。 经常调试用到的函数: IsPressureValid:压力检测,检测计算出Rtouch值,可用来去除飞笔。 Tp_read_adc:读取当前pen down的adc值,可以改变算法,调整 touch panel的 • 效果。 • 其他的诸如:touch_panel_HISR、touch_panel_init、 touch_panel_down_hdr, • 可以在这些函数里加一些延时处理,可以改善断笔飞笔。
• 关键函数介绍:
• • • • • • • • • • • • • • • • Void init_lcd_interface(void):LCD读写时序的设置,参考driver ic的spec,一般 差异不大,较稳定; Void LCD_Init_xxxx(void):加入供应商给的初始化设置代码。需要注意开始部 分的Reset信号设置,延时要满足IC的要求。LCD的显示效果基本上就在这段代 码里调整。如果要兼容其它屏,需要在reset后读取IC的ID来区分不同的屏; Void LCD_EnterSleep_xxxx(void)和Void LCD_ExitSleep_xxxx(void):加入厂商 给的sleep代码; void LCD_BlockWrite_HX8312A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy):刷屏函数,设置刷屏时的起始、结束地址。 Kal_boolESD_check(void):ESD措施,防止静电干扰使寄存器数据乱掉,定时 去检测LCM的IC寄存器数据,如果数据乱了,则重新写入,保证LCD能正常显 示。 几个关键指令(Lcd_sw.h): 写寄存器:LCD_CtrlWrite_xxxx() 写数据:LCD_DataWrite_xxxx() 读数据:LCD_DataRead_xxxx()
• • • • • • • • • • •
•#if defined(__BAR_K28__) •GPIO_ModeSetup(2,0); •GPIO_InitIO(1,2); •GPIO_WriteIO(0,2); •#elif defined(__BAR_S50__)//LK 2007-06-27 •GPIO_ModeSetup(0,0); •GPIO_InitIO(1,0); •GPIO_WriteIO(0,0); •…… •#endif •}
模块调试:Keypad
– 5 columns (Input) x 6 rows (Output)
• 键盘定义需要对照硬件资源配置表来设置。
• custom\drv\misc_drv\M678_BB\keypad_def.c
• • • const keypad_structkeypad_custom_def= { #if defined(__SLIDE_M678) //ROW 0(第一列) – DEVICE_KEY_XX, – …… – //ROW 1(第二列) – ……. – // – ……. #else …… #endif };
相关文档
最新文档