MTK DRIVER INTRODUCTION 1 CUSTNEW Make DRVCUSTOMTOOLSUPPORT TRUE
- Slides: 29
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) COM_DEFS += __CUST_NEW__ endif
一. 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. 返回模式 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>. 设置中断模式 通过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 (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, 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; 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 定义 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) { *(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; } 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 } /* 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 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 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 值的范围 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 ) { /* 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, 50, 250, 50, /*NC*/ 50 /*NC*/ }, 50为一倍
3. ADC测量 Auxmain. c
七. 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 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, /* 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__) 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 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 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 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 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 (void *first_available_memory)
- Meteo mtk
- Peta konsep dimensi 3
- Soal kuliah matematika
- Veraserv
- Nilai peluang empirik
- L
- User mode driver framework
- 102 dr
- Chapter 2 jesus christ true god and true man
- To make someone believe something that is not true
- Trashketball
- Driver introduction
- Make the lie big, make it simple
- Go make a difference in the world
- Dawes plan
- Intro paragraph outline
- Winston churchill taxi story
- Curriculum guide for driver education in virginia module 10
- Module 7 topic 1 drivers ed
- Module 11 topic 1 insuring a vehicle
- Module 8 topic 1
- Traditional mirror settings should be used
- User-mode driver framework
- What is driver id for gsa card
- Driver readiness
- The new jersey driver manual test
- Altering a driver's license
- Texting and driving laws in alabama
- Demonte driver
- Pustaka acuan driver dan oldham 1994