《[精选]MTK手机设备驱动编写介绍.pptx》由会员分享,可在线阅读,更多相关《[精选]MTK手机设备驱动编写介绍.pptx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MTK DRIVER INTRODUCTION首先需要注意两个宏定义1._CUST_NEW_程序中有多处用该宏将代码隔开Make文件中假设如下定义:DRV_CUSTOM_TOOL_SUPPORT =TRUE Option.mak文件中ifdef DRV_CUSTOM_TOOL_SUPPORT ifeq$strip$DRV_CUSTOM_TOOL_SUPPORT,TRUE _DEFS +=_CUST_NEW_ endifendif2.WIN32#ifndef WIN32#endif用该宏将真机与模拟器的代码分隔开 一.GPIO口的初使化与使用 GPIO口的初始化方法:两种:1.工具customd
2、rvDrv_ToolDrvGen.exe 修改:customdrvmisc_drvIWIT23_NEP_07A_PMJ_BBcodegencodegen.dws 2.程序中修改:Gpio_drv.c void GPIO_initvoid 操作 1.写状态 a.模式修改 GPIO_ModeSetupkal_uint16 pin,kal_uint16 conf_dada b.方向修改 void GPIO_InitIOchar direction,char port c.置高与置低 GPIO_WriteIOchar data,char port d.上拉与下拉的使能void GPIO_PullenS
3、etupkal_uint16 pin,kal_bool enable 2.读取状态 a.返回模式char GPIO_ReturnModechar port;b.返回方向char GPIO_ReturnDirchar port;c.返回电平值char GPIO_ReturnDoutchar port;3.GPIO使用中需注意的问题 二.中断的配置与使用.中断个数 8个EINT0,EINT1为专用中断,EINT2-7 与GPIO等功能复用.设置中断模式通过DRV_TOOL或Gpio_initvoid来初始化,也可在程序中通过GPIO_ModeSetupkal_uint16 pin,kal_uint
4、16 conf_dada随时修改.中断注册函数 在某个TASK中注册中断,建议注册在AUX_TASK中,便于管理 EINT_RegistrationFLICK_EINT_NO,KAL_TRUE,flick_state,FLICK_EINT_HISR,KAL_TRUE;.中断处理函数以FLICK及BATTERY两个中断为例:void FLICK_EINT_HISRvoid /added by Jeff Ji 071024 ilm_struct *flick_ilm;aux_id_struct *aux_id_data;if flick_state=LEVEL_HIGH aux_id_data=a
5、ux_id_struct*construct_local_parasizeofaux_id_struct,TD_CTRL;aux_id_data-aux_id=AUX_ID_FLICK_OFF;DRV_BuildPrimitiveflick_ilm,MOD_EINT_HISR,MOD_UEM,MSG_ID_AUX_ID,aux_id_data;else aux_id_data=aux_id_struct*construct_local_parasizeofaux_id_struct,TD_CTRL;aux_id_data-aux_id=AUX_ID_FLICK_ON;DRV_BuildPrim
6、itiveflick_ilm,MOD_EINT_HISR,MOD_UEM,MSG_ID_AUX_ID,aux_id_data;msg_send_ext_queueflick_ilm;flick_state=!flick_state;EINT_Set_PolarityFLICK_EINT_NO,flick_state;void BATTERY_EINT_HISRvoid iwit_battery_state=!iwit_battery_state;EINT_Set_PolarityBAT_EINT_NO,iwit_battery_state;iwit_fakeChargerAct=KAL_TRU
7、E;ifiwit_battery_state=LEVEL_HIGH/plug out bmt_set_chr_statusbmt_chr_out;bmt_charger_actionKAL_FALSE;else/plug in ifiwit_charger_present bmt_set_chr_statusbmt_chr_in;bmt_charger_actionKAL_TRUE;三.键盘配置5X6键盘Powerkey单独,第6列 DEVICE_KEY_ENDKeypad_def.c 配置行列矩阵Kbd_table.h 定义 DRIVER KEY CODEKeyBrd.c 定义KeyPadM
8、ap GlobalConstants.h 定义MMI KEY CODE 四.LCD驱动 Lcd_sw.h 1.定义写命令及写数据的函数#define LCD_CtrlWrite_HX8306A_data *volatile kal_uint32*LCD_HX8306A_CTRL_ADDR=_data&0 xFF002|_data&0 xFF1;LCD_delay_HX8306A;#define LCD_DataWrite_HX8306A_data *volatile kal_uint32*LCD_HX8306A_DATA_ADDR=_data&0 xFF002|_data&0 xFF1;LCD
9、_delay_HX8306A;2.定义是否使用DMA方式#define LCD_CMD_DMA_MODE 3.假设是并口屏,要定义LCD接口的位数#define LCD_18BIT_MODE Lcd.c void LCD_FunConfigvoid MainLCD=&LCD_func_ST7549T;void LCD_Init_ST7549Tkal_uint32 bkground,void*buf_addrvoid LCD_BlockWrite_ST7549Tkal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endyv
10、oid LCD_EnterSleep_ST7549Tvoidvoid LCD_ExitSleep_ST7549Tvoidvoid LCD_SetContrast_ST7549Tkal_uint8 level 串口屏void init_lcd_interfacevoid SPI_Initialize;/modified by jeff ji 071024/*init_lcd_interface*void lcdSendSerialDatakal_uint8 SerialData,kal_bool rs#define lcdSendCmdcmd lcdSendSerialDatacmd,0#def
11、ine lcdSendDatadata lcdSendSerialDatadata,1 并口屏:void init_lcd_interfacevoid kal_uint32 i;REG_LCD_ROI_CTRL=0;CLEAR_LCD_CTRL_RESET_PIN;#if definedMT6219|definedMT6226|definedMT6226M|definedMT6227|definedMT6223|definedMT6223P SET_LCD_PARALLEL_CE2WR_SETUP_TIMEkal_uint322;SET_LCD_PARALLEL_CE2WR_HOLD_TIME
12、2;SET_LCD_PARALLEL_CE2RD_SETUP_TIME2;SET_LCD_PARALLEL_WRITE_WAIT_STATE3;SET_LCD_PARALLEL_READ_LATENCY_TIME31;SET_LCD_ROI_CTRL_CMD_LATENCY3#if definedMT6226|definedMT6226M|definedMT6227|definedMT6223|definedMT6223P#if definedLCD_16BIT_MODE SET_LCD_PARALLEL_16BIT_DATA_BUS;/ywm+20060518#elif definedLCD
13、_18BIT_MODE GPIO_ModeSetup55,1;*volatile unsigned short*0 x801201B0|=0 x4000;*volatile unsigned short*0 x801201D0|=0 x0001;SET_LCD_PARALLEL_18BIT_DATA_BUS;#elif definedLCD_8BIT_MODE SET_LCD_PARALLEL_8BIT_DATA_BUS;#endif#endif#if definedMT6219 DISABLE_LCD_PARALLEL_SYNC;#endif#endif SET_LCD_CTRL_RESET
14、_PIN;Delayms100;/*init_lcd_interface*/五.音效优化1.Speaker2.Receiver3.Micphone模式:normal;handfree;headset Nvram_default_audio.c值的范围 0-255Audcoeff.c FIR 需使用音频测试仪器测出的参数,一般都是normal模式下的参数;handfree模式下的参数要依靠经验和尝试来确定。const unsigned short DG_DL_Speech =0 x1000;const unsigned short DG_Microphone =0 x1400;以上两个变量为Re
15、ceiver及Microphone的数字增益,值可以在0 x1000至0 x2000之间调整,但一般情况下不需调整。使用默认值,而只调整Nvram_default_audio.c当中的模拟增益值的大小即可audcoeff_default.h#define DEFAULT_SPEECH_LOUDSPK_MODE_PARA 128,224,5128,0,374,0,400,0 第一个参数范围值0至1024,值越大,回声抑制越弱;值越小,回声抑制越强。该值可以用于改善音频的回声及断续。其它值不建议修改._Apply_Mic_Setting对MIC的设置,注意MIC的单端及差分设置void _appl
16、y_mic_setting_c63216kal_int16 a_lowestif afe.mic_src=L1SP_LNA_1 /*Headset Mode*/*AFE_VAC_CON0|=0 x0480;/*Switch input source to headset microphone*/*AFE_VAC_CON1|=0 x0040;/*Switch on resister string*/else /*Normal Mode*/*AFE_VAC_CON0&=0 x0480;/*Switch input source to normal microphone*/*AFE_VAC_CON1
17、&=0 x0040;/*Switch off resister string*/六.ADC使用 1.工具配置2.系数设置 Chr_parameter.cconst kal_uint16 adc_volt_factorADC_MAX_CHANNEL 100,100,50,250,50,50,/*NC*/50/*NC*/,50为一倍3.ADC测量 Auxmain.c 七.Touch panel 1.MAKE文件中如下配置TOUCH_PANEL_SUPPORT =MT63012.Touch_panel_spi.h#define SPI_DIN_PIN gpio_tp_spi_din_pin /*GP
18、O*/#define SPI_CLK_PIN gpio_tp_spi_clk_pin/*GPO*/#define SPI_DOUT_PIN gpio_tp_spi_dout_pin/*GPI*/#define SPI_CS_PIN gpio_tp_spi_cs_pin/*GPO*/#define SPI_BUSY_PIN gpio_tp_spi_busy_pin/*GPI*/3.Touch_panel_custom.h#define TOUCH_PANEL_COORD_X_START 0#define TOUCH_PANEL_COORD_X_END 239#define TOUCH_PANEL
19、_COORD_Y_START 0#define TOUCH_PANEL_COORD_Y_END 319 八.USB 1.MAKE文件中_CHARGER_USB_DETECT_WIHT_ONE_EINT_ _USB_ENABLE_ USB_IN_NORMAL_MODE_SUPPORT=TRUE2.ADC配置,工具配置 ADC_CHR_USB3.Chr_parameter.cconst kal_uint16 adc_volt_factorADC_MAX_CHANNEL 100,100,50,250,50,50,/*NC*/50/*NC*/,九.UART 串口初始化 Uart.c中,void UAR
20、T_HWInitUART_PORT port UARTDCBStruct UART_DefaultConfig=UART_BAUD_115200,/*baud;*/len_8,/*dataBits;*/sb_1,/*stopBits;*/pa_none,/*parity;*/fc_none,/*no flow control*/0 x11,/*xonChar;*/0 x13,/*xoffChar;*/KAL_FALSE ;关于AT模式串口及Trace模式串口的设置NVRAMNvram_ mon_config.cstatic kal_uint8 const NVRAM_EF_PORT_SETTI
21、NG_DEFAULT=#if defined_ONLY_ONE_UART_ 0 x63,0 x00,/*TST uses uart_port2value is 1*/0 x00,0 x00,/*APP uses uart_port1*/#else 0 x01,0 x00,/*TST uses uart_port2value is 1*/0 x00,0 x00,/*APP uses uart_port1*/#endif#if definedEMPTY_MMI 0 x00,0 x10,0 x0E,0 x00,/*tst default baud rate base=921600=0 x000E10
22、00*/#else 0 x00,0 xC2,0 x01,0 x00,/*tst default baud rate base=115200=0 x0001C200*/#endif#if defined _GPRS_MODE_ 0 x00,0 xC2,0 x01,0 x00,/*ps default baud rate base=115200=0 x0001C200*/#else 0 x00,0 xC2,0 x01,0 x00,/*ps default baud rate base=57600=0 x0000E100*/#endif 0 x00,/*High SpeedSIM*/0 x00,/*
23、SWDBG*/0 x03,0 x63,/*uart power setting,plus 1-byte padding*/0 x00,0 x00,0 x00,0 x00 /*CTI baud rate*/;十.充电控制1.充电器检测 EINT 配置2.充电开始与停止 bmt_charge_start;bmt_charge_end;3.充电电流控制Pmu.cpmu_chr_cur_level pmu_ret_chr_currentvoid4.电池电量等级 kal_uint32 const NVRAM_EF_CUST_HW_LEVEL_TBL_DEFAULT=5.chr_parameter.c 十
24、一.工厂测试模式1.FactoryModeSrc.cconst testlet TestsMAX_AUTO_TEST_ITEMS 2.Nvram_ mon_config.cstatic kal_uint8 const NVRAM_EF_AUTOTEST_DEFAULTNVRAM_EF_AUTOTEST_SIZE 十二.其它 WDT的使用调试时使用,在出现死循环情况时.void WDT_Enablekal_bool en将该函数默认为Disable.但当RAM CRUSH掉后,无效.void DRV_RESETvoid LCD,键盘背光及马达控制Uem_gpio.ckal_bool custom
25、_cfg_gpio_set_levelkal_uint8 gpio_dev_type,kal_uint8 gpio_dev_level 3.工程模式*#3646633#4.META工具的使用5.总的初始化函数Init.c 中void Application_Initialize void*first_available_memory9、静夜四无邻,荒居旧业贫。11月-2311月-23Sunday,November 26,202310、雨中黄叶树,灯下白头人。05:54:5205:54:5205:5411/26/2023 5:54:52 AM11、以我独沈久,愧君相见频。11月-2305:54:
26、5205:54Nov-2326-Nov-2312、故人江海别,几度隔山川。05:54:5205:54:5205:54Sunday,November 26,202313、乍见翻疑梦,相悲各问年。11月-2311月-2305:54:5205:54:52November 26,202314、他乡生白发,旧国见青山。26 十一月 20235:54:52 上午05:54:5211月-2315、比不了得就不比,得不到的就不要。十一月 235:54 上午11月-2305:54November 26,202316、行动出成果,工作出财富。2023/11/26 5:54:5205:54:5226 Novembe
27、r 202317、做前,能够环视四周;做时,你只能或者最好沿着以脚为起点的射线向前。5:54:52 上午5:54 上午05:54:5211月-239、没有失败,只有暂时停止成功!。11月-2311月-23Sunday,November 26,202310、很多事情努力了未必有结果,但是不努力却什么改变也没有。05:54:5205:54:5205:5411/26/2023 5:54:52 AM11、成功就是日复一日那一点点小小努力的积累。11月-2305:54:5205:54Nov-2326-Nov-2312、世间成事,不求其绝对圆满,留一份缺乏,可得无限完美。05:54:5205:54:520
28、5:54Sunday,November 26,202313、不知香积寺,数里入云峰。11月-2311月-2305:54:5205:54:52November 26,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。26 十一月 20235:54:52 上午05:54:5211月-2315、楚塞三湘接,荆门九派通。十一月 235:54 上午11月-2305:54November 26,202316、少年十五二十时,步行夺得胡马骑。2023/11/26 5:54:5205:54:5226 November 202317、空山新雨后,天气晚来秋。5:54:52 上午5:54 上午05:5
29、4:5211月-239、杨柳散和风,青山澹吾虑。11月-2311月-23Sunday,November 26,202310、阅读一切好书如同和过去最杰出的人谈话。05:54:5205:54:5205:5411/26/2023 5:54:52 AM11、越是没有本领的就越加自命非凡。11月-2305:54:5205:54Nov-2326-Nov-2312、越是无能的人,越喜欢挑剔别人的错儿。05:54:5205:54:5205:54Sunday,November 26,202313、知人者智,自知者明。胜人者有力,自胜者强。11月-2311月-2305:54:5205:54:52November
30、 26,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。26 十一月 20235:54:52 上午05:54:5211月-2315、最具挑战性的挑战莫过于提升自我。十一月 235:54 上午11月-2305:54November 26,202316、业余生活要有意义,不要越轨。2023/11/26 5:54:5205:54:5226 November 202317、一个人即使已登上顶峰,也仍要自强不息。5:54:52 上午5:54 上午05:54:5211月-23MOMODA POWERPOINTLorem ipsum dolor sit amet,consectetur adipiscing elit.Fusce id urna blandit,eleifend nulla ac,fringilla purus.Nulla iaculis tempor felis ut cursus.感感 谢谢 您您 的的 下下 载载 观观 看看专家告诉