MTK DRIVER INTRODUCTION 1 CUSTNEW Make DRVCUSTOMTOOLSUPPORT TRUE

  • Slides: 29
Download presentation
MTK DRIVER INTRODUCTION

MTK DRIVER INTRODUCTION

 首先需要注意两个宏定义 1. __CUST_NEW__ 程序中有多处用该宏将代码隔开 Make文件中若如下定义: DRV_CUSTOM_TOOL_SUPPORT = TRUE Option. mak文件中 ifdef DRV_CUSTOM_TOOL_SUPPORT ifeq

首先需要注意两个宏定义 1. __CUST_NEW__ 程序中有多处用该宏将代码隔开 Make文件中若如下定义: DRV_CUSTOM_TOOL_SUPPORT = TRUE Option. mak文件中 ifdef DRV_CUSTOM_TOOL_SUPPORT ifeq ($(strip $(DRV_CUSTOM_TOOL_SUPPORT)), TRUE) COM_DEFS += __CUST_NEW__ endif

一. GPIO口的初使化与使用 <1> GPIO口的初始化 方法:两种: 1. 具 customdrvDrv_ToolDrv. Gen. exe 修改: customdrvmisc_drvIWIT 23_NEP_07 A_PMJ_BBcodegencode

一. GPIO口的初使化与使用 <1> GPIO口的初始化 方法:两种: 1. 具 customdrvDrv_ToolDrv. Gen. exe 修改: customdrvmisc_drvIWIT 23_NEP_07 A_PMJ_BBcodegencode gen. dws 2. 程序中修改:Gpio_drv. c void GPIO_init(void) <2>操作 1. 写状态 a. 模式修改 GPIO_Mode. Setup(kal_uint 16 pin, kal_uint 16 conf_dada) b. 方向修改 void GPIO_Init. IO(char direction, char port) c. 置高与置低 GPIO_Write. IO(char data, char port)

 d. 上拉与下拉的使能 void GPIO_Pullen. Setup(kal_uint 16 pin, kal_bool enable) 2. 读取状态 a. 返回模式

d. 上拉与下拉的使能 void GPIO_Pullen. Setup(kal_uint 16 pin, kal_bool enable) 2. 读取状态 a. 返回模式 char GPIO_Return. Mode(char port); b. 返回方向 char GPIO_Return. Dir(char port); c. 返回电平值 char GPIO_Return. Dout(char port); 3. GPIO使用中需注意的问题

二. 中断的配置与使用 <1>. 中断个数 8个 EINT 0, EINT 1为专用中断, EINT 2 -7 与GPIO等功能复用 <2>.

二. 中断的配置与使用 <1>. 中断个数 8个 EINT 0, EINT 1为专用中断, EINT 2 -7 与GPIO等功能复用 <2>. 设置中断模式 通过DRV_TOOL或Gpio_init(void)来初始化,也可在程序中通过 GPIO_Mode. Setup(kal_uint 16 pin, kal_uint 16 conf_dada)随时修 改 <3>. 中断注册函数 在某个TASK中注册中断,建议注册在AUX_TASK中, 便于管理 EINT_Registration(FLICK_EINT_NO, KAL_TRUE, flick_state, FLICK_EINT_HISR, KAL_TRUE); <4>. 中断处理函数 以FLICK及BATTERY两个中断为例:

 void FLICK_EINT_HISR(void) //added by Jeff Ji 071024 { ilm_struct *flick_ilm; aux_id_struct *aux_id_data; if

void FLICK_EINT_HISR(void) //added by Jeff Ji 071024 { ilm_struct *flick_ilm; aux_id_struct *aux_id_data; if (flick_state == LEVEL_HIGH) { aux_id_data = (aux_id_struct*) aux_id_data->aux_id = AUX_ID_FLICK_OFF; construct_local_para(sizeof(aux_id_struct), TD_CTRL); } DRV_Build. Primitive(flick_ilm, MOD_EINT_HISR, MOD_UEM, MSG_ID_AUX_ID, aux_id_data);

 else { aux_id_data = (aux_id_struct*) construct_local_para(sizeof(aux_id_struct), TD_CTRL); aux_id_data->aux_id = AUX_ID_FLICK_ON; DRV_Build. Primitive(flick_ilm, MOD_EINT_HISR,

else { aux_id_data = (aux_id_struct*) construct_local_para(sizeof(aux_id_struct), TD_CTRL); aux_id_data->aux_id = AUX_ID_FLICK_ON; DRV_Build. Primitive(flick_ilm, MOD_EINT_HISR, MOD_UEM, MSG_ID_AUX_ID, aux_id_data); } msg_send_ext_queue(flick_ilm); } flick_state = !flick_state; EINT_Set_Polarity(FLICK_EINT_NO, flick_state);

 void BATTERY_EINT_HISR(void) { iwit_battery_state = !iwit_battery_state; EINT_Set_Polarity(BAT_EINT_NO, iwit_battery_state); iwit_fake. Charger. Act = KAL_TRUE;

void BATTERY_EINT_HISR(void) { iwit_battery_state = !iwit_battery_state; EINT_Set_Polarity(BAT_EINT_NO, iwit_battery_state); iwit_fake. Charger. Act = KAL_TRUE; if(iwit_battery_state == LEVEL_HIGH)//plug out { bmt_set_chr_status(bmt_chr_out); bmt_charger_action(KAL_FALSE); } else //plug in { if(iwit_charger_present) { bmt_set_chr_status(bmt_chr_in); bmt_charger_action(KAL_TRUE); } } }

三. 键盘配置 5 X 6键盘 Powerkey单独,第 6列 DEVICE_KEY_END Keypad_def. c 配置行列矩阵 Kbd_table. h 定义

三. 键盘配置 5 X 6键盘 Powerkey单独,第 6列 DEVICE_KEY_END Keypad_def. c 配置行列矩阵 Kbd_table. h 定义 DRIVER KEY CODE Key. Brd. c 定义Key. Pad. Map Global. Constants. h 定义MMI KEY CODE

 四. LCD驱动 <1> Lcd_sw. h 1. 定义写命令及写数据的函数 #define LCD_Ctrl. Write_HX 8306 A(_data)

四. LCD驱动 <1> Lcd_sw. h 1. 定义写命令及写数据的函数 #define LCD_Ctrl. Write_HX 8306 A(_data) { *(volatile kal_uint 32 *) LCD_HX 8306 A_CTRL_ADDR= ((_data & 0 x. FF 00)<<2)|((_data & 0 x. FF)<<1); LCD_delay_HX 8306 A(); } #define LCD_Data. Write_HX 8306 A(_data) { *(volatile kal_uint 32 *) LCD_HX 8306 A_DATA_ADDR= ((_data & 0 x. FF 00)<<2)|((_data & 0 x. FF)<<1); LCD_delay_HX 8306 A(); } 2. 定义是否使用DMA方式 #define LCD_CMD_DMA_MODE 3. 若是并口屏,要定义LCD接口的位数 #define LCD_18 BIT_MODE

<2> Lcd. c void LCD_Fun. Config(void) { Main. LCD = &LCD_func_ST 7549 T; }

<2> Lcd. c void LCD_Fun. Config(void) { Main. LCD = &LCD_func_ST 7549 T; } void LCD_Init_ST 7549 T(kal_uint 32 bkground, void **buf_addr) void LCD_Block. Write_ST 7549 T(kal_uint 16 startx, kal_uint 16 starty, kal_uint 16 endx, kal_uint 16 endy) void LCD_Enter. Sleep_ST 7549 T(void) void LCD_Exit. Sleep_ST 7549 T(void) void LCD_Set. Contrast_ST 7549 T(kal_uint 8 level)

 <1> 串口屏 void init_lcd_interface(void) { SPI_Initialize(); //modified by jeff ji 071024 } /*

<1> 串口屏 void init_lcd_interface(void) { SPI_Initialize(); //modified by jeff ji 071024 } /* init_lcd_interface() * void lcd. Send. Serial. Data(kal_uint 8 Serial. Data, kal_bool rs) #define lcd. Send. Cmd(cmd) lcd. Send. Serial. Data(cmd, 0) #define lcd. Send. Data(data) lcd. Send. Serial. Data(data, 1)

 <2> 并口屏: void init_lcd_interface(void) { kal_uint 32 i; REG_LCD_ROI_CTRL=0; CLEAR_LCD_CTRL_RESET_PIN; #if (defined(MT 6219)||defined(MT

<2> 并口屏: void init_lcd_interface(void) { kal_uint 32 i; REG_LCD_ROI_CTRL=0; CLEAR_LCD_CTRL_RESET_PIN; #if (defined(MT 6219)||defined(MT 6226 M)||def ined(MT 6227)||defined(MT 6223)|| defined(MT 6223 P)) SET_LCD_PARALLEL_CE 2 WR_SETUP_TIME((kal_uint 32)2); SET_LCD_PARALLEL_CE 2 WR_HOLD_TIME(2); SET_LCD_PARALLEL_CE 2 RD_SETUP_TIME(2); SET_LCD_PARALLEL_WRITE_WAIT_STATE(3); SET_LCD_PARALLEL_READ_LATENCY_TIME(31); SET_LCD_ROI_CTRL_CMD_LATENCY(3

 #if (defined(MT 6226)||defined(MT 6226 M)||defined(MT 6227)||defined(MT 62 23)|| defined(MT 6223 P)) #if (defined(LCD_16

#if (defined(MT 6226)||defined(MT 6226 M)||defined(MT 6227)||defined(MT 62 23)|| defined(MT 6223 P)) #if (defined(LCD_16 BIT_MODE)) SET_LCD_PARALLEL_16 BIT_DATA_BUS; //ywm++ 20060518 #elif (defined(LCD_18 BIT_MODE)) GPIO_Mode. Setup(55, 1); *((volatile unsigned short *) 0 x 801201 B 0) |= 0 x 4000; *((volatile unsigned short *) 0 x 801201 D 0) |= 0 x 0001; SET_LCD_PARALLEL_18 BIT_DATA_BUS; #elif (defined(LCD_8 BIT_MODE)) SET_LCD_PARALLEL_8 BIT_DATA_BUS; #endif #if (defined(MT 6219)) DISABLE_LCD_PARALLEL_SYNC; #endif SET_LCD_CTRL_RESET_PIN; Delayms(100); } /* init_lcd_interface() */

五. 音效优化 Speaker 2. Receiver 3. Micphone 模式:normal ; handfree ; headset Nvram_default_audio. c

五. 音效优化 Speaker 2. Receiver 3. Micphone 模式:normal ; handfree ; headset Nvram_default_audio. c 值的范围 0 - 255 Audcoeff. c FIR 需使用音频测试仪器测出的参数,一般都是normal模式下的参数; handfree模式下的参数要依靠经验和尝试来确定。 const unsigned short DG_DL_Speech = 0 x 1000; const unsigned short DG_Microphone = 0 x 1400; 以上两个变量为Receiver及Microphone的数字增益,值可以在 0 x 1000至 0 x 2000之间调整,但一般情况下不需调整。使用默认值, 而只调整Nvram_default_audio. c当中的模拟增益值的大小即可 1.

 _Apply_Mic_Setting对MIC的设置,注意MIC的单端及差分设 置 void _apply_mic_setting_c 63216(kal_int 16 a_lowest) { if( afe. mic_src==L 1 SP_LNA_1

_Apply_Mic_Setting对MIC的设置,注意MIC的单端及差分设 置 void _apply_mic_setting_c 63216(kal_int 16 a_lowest) { if( afe. mic_src==L 1 SP_LNA_1 ) { /* Headset Mode */ *AFE_VAC_CON 0 |= 0 x 0480; /* Switch input source to headset microphone */ *AFE_VAC_CON 1 |= 0 x 0040; /* Switch on resister string */ } else { /* Normal Mode */ *AFE_VAC_CON 0 &= ~0 x 0480; /* Switch input source to normal microphone */ *AFE_VAC_CON 1 &= ~0 x 0040; /* Switch off resister string */ }

六. ADC使用 1. 具配置 2. 系数设置 Chr_parameter. c const kal_uint 16 adc_volt_factor[ADC_MAX_CHANNEL] { 100,

六. ADC使用 1. 具配置 2. 系数设置 Chr_parameter. c const kal_uint 16 adc_volt_factor[ADC_MAX_CHANNEL] { 100, 50, 250, 50, /*NC*/ 50 /*NC*/ }, 50为一倍

 3. ADC测量 Auxmain. c

3. ADC测量 Auxmain. c

 七. Touch panel 1. MAKE文件中如下配置 TOUCH_PANEL_SUPPORT 2. Touch_panel_spi. h = MT 6301 #define

七. Touch panel 1. MAKE文件中如下配置 TOUCH_PANEL_SUPPORT 2. Touch_panel_spi. h = MT 6301 #define SPI_DIN_PIN gpio_tp_spi_din_pin /*GPO*/ #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_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 = TRUE 2. ADC配置, 具配置 ADC_CHR_USB

八. USB 1. MAKE文件中 __CHARGER_USB_DETECT_WIHT_ONE_EINT__ __USB_ENABLE__ USB_IN_NORMAL_MODE_SUPPORT = TRUE 2. ADC配置, 具配置 ADC_CHR_USB 3. Chr_parameter. c const kal_uint 16 adc_volt_factor[ADC_MAX_CHANNEL] { 100, 50, 250, 50, /*NC*/ 50 /*NC*/ },

九. UART <1> 串口初始化 Uart. c中,void UART_HWInit(UART_PORT port) UARTDCBStruct UART_Default. Config = { UART_BAUD_115200,

九. UART <1> 串口初始化 Uart. c中,void UART_HWInit(UART_PORT port) UARTDCBStruct UART_Default. Config = { UART_BAUD_115200, /* baud; */ len_8, /* data. Bits; */ sb_1, /*stop. Bits; */ pa_none, /* parity; */ fc_none, /*no flow control*/ 0 x 11, /* xon. Char; */ 0 x 13, /* xoff. Char; */ KAL_FALSE };

 <2> 关于AT模式串口及Trace模式串口的设置(NVRAM) Nvram_common_config. c static kal_uint 8 const NVRAM_EF_PORT_SETTING_DEFAULT[] = { #if defined(__ONLY_ONE_UART__)

<2> 关于AT模式串口及Trace模式串口的设置(NVRAM) Nvram_common_config. c static kal_uint 8 const NVRAM_EF_PORT_SETTING_DEFAULT[] = { #if defined(__ONLY_ONE_UART__) 0 x 63, 0 x 00, /* TST uses uart_port 2(value is 1) */ 0 x 00, /* APP uses uart_port 1 */ #else 0 x 01, 0 x 00, /* TST uses uart_port 2(value is 1) */ 0 x 00, /* APP uses uart_port 1 */ #endif

 #if defined(EMPTY_MMI) 0 x 00, 0 x 10, 0 x 0 E, 0

#if defined(EMPTY_MMI) 0 x 00, 0 x 10, 0 x 0 E, 0 x 00, /* tst default baud rate base = 921600 = 0 x 000 E 1000 */ #else 0 x 00, 0 x. C 2, 0 x 01, 0 x 00, /* tst default baud rate base = 115200 = 0 x 0001 C 200 */ #endif #if defined (__GPRS_MODE__) 0 x 00, 0 x. C 2, 0 x 01, 0 x 00, /* ps default baud rate base = 115200 = 0 x 0001 C 200 */ #else 0 x 00, 0 x. C 2, 0 x 01, 0 x 00, /* ps default baud rate base = 57600 = 0 x 0000 E 100 */ #endif 0 x 00, /* High Speed. SIM */ 0 x 00, /* SWDBG */ 0 x 03, 0 x 63, /* uart power setting, plus 1 -byte padding */ 0 x 00, 0 x 00 /* CTI baud rate */ };

十. 充电控制 1. 充电器检测 EINT 配置 2. 充电开始与停止 bmt_charge_start(); bmt_charge_end(); 3. 充电电流控制 Pmu. c

十. 充电控制 1. 充电器检测 EINT 配置 2. 充电开始与停止 bmt_charge_start(); bmt_charge_end(); 3. 充电电流控制 Pmu. c pmu_chr_cur_level pmu_ret_chr_current(void) 4. 电池电量等级 kal_uint 32 const NVRAM_EF_CUST_HW_LEVEL_TBL_DEFAULT[] = {} 5. chr_parameter. c

十一. 厂测试模式 1. Factory. Mode. Src. c const testlet Tests[MAX_AUTO_TEST_ITEMS] 2. Nvram_common_config. c static

十一. 厂测试模式 1. Factory. Mode. Src. c const testlet Tests[MAX_AUTO_TEST_ITEMS] 2. Nvram_common_config. c static kal_uint 8 const NVRAM_EF_AUTOTEST_DEFAULT[NVRAM_EF_AUTOTE ST_SIZE] { }

十二. 其它 <1> WDT的使用 调试时使用, 在出现死循环情况时. void WDT_Enable(kal_bool en) 将该函数默认为Disable. 但当RAM CRUSH掉后, 无效. void

十二. 其它 <1> WDT的使用 调试时使用, 在出现死循环情况时. void WDT_Enable(kal_bool en) 将该函数默认为Disable. 但当RAM CRUSH掉后, 无效. void DRV_RESET(void) <2> LCD, 键盘背光及马达控制 Uem_gpio. c kal_bool custom_cfg_gpio_set_level(kal_uint 8 gpio_dev_type, kal_uint 8 gpio_dev_level )

 3. 程模式 *#3646633# 4. META 具的使用 5. 总的初始化函数 Init. c 中 void Application_Initialize

3. 程模式 *#3646633# 4. META 具的使用 5. 总的初始化函数 Init. c 中 void Application_Initialize (void *first_available_memory)