Cómo depurar el controlador en la plataforma MTK
MXX_GPRS.mak(mcu/make)
Option.mak(mcu/make)
Para la misma plataforma, diferentes proyectos tienen diferentes funciones configuración.
Formato básico y pasos:
MXX_GPRS.mak:
XXX_XXX = XXX
XXX_XXX = NONE
XXX_XXX = TRUE
XXX_XXX = FALSE
Option.pl(mcu\tools)
Este archivo se agrega a mcu\custom\drv como LCD, imagen. El archivo utilizado para módulos como sensores debe modificarse para que el sistema de compilación ADS pueda compilar los archivos de este módulo;
Puede consultar image_sensor.
if (($project ne "basic") amp; amp; ($project ne "l1s") amp; amp; definido($cmos_sensor)) {
if ($ cmos_sensor ne "NINGUNO") {
push(@thatdirs, "drv\image_sensor\$ cmos_sensor");
}
}
}
2.LCM; retroiluminación; vibrador
Tome SUNRISE_0255_LCM como ejemplo
Paso 1:
En MXX_GPRS.mak Configure LCD_MODULE en y MAIN_LCD_SIZE;
LCD_MODULE = SUNRISE_0255_LCM
MAIN_LCD_SIZE = 240X320
Agregue Option.mak:
LCD_MODULE = SUNRISE_0255_LCM
MAIN_LCD_SIZE = 240X320
custom\drv\misc_drv\M678_BB\keypad_def.c
const keypad_struct keypad_custom_def = {
#si está definido ( __PHONE_SLIDE__) //Modelo deslizante
#if definido(__SLIDE_M678)
//agregue el teclado m678 definido aquí
//FILA 0 (primera columna)< / p>
DEVICE_KEY_XX,
....
//FILA 1 (segunda columna)
.....
//
.......
#else
#endif
#elif definido (__PHONE_BAR__) / /modelo recto
//
#elif definido(__PHONE_SPIN) //modelo rotativo
//
# elif definido(__PHONE_CLAMSHELL ) //modelo de volteo
//
#endif
};
Si lo necesita, se proporciona en la plataforma Para agregar detalles específicos definiciones de claves además de las definiciones de claves básicas, debe modificar el siguiente contenido según lo anterior:
interface\hwdrv\kbd_table.h
define DEVICE_KEY_XX; order
#define DEVICE_KEY_XX Valor de pedido
plutommi\mmi\Framework\Osl\OslSrc\KeyBrd.c
Supongamos que DEVICE_KEY_XX es una clave específica
/Definir una clave específica
const U16 PresentAllKeys[]=
{
KEY_0,
KEY_1,
CLAVE_2
CLAVE_3,
>
KEY_4,
KEY_5,
......
//definir claves específicas
#if definido(__SLIDE_M678)
, KEY_XX
#endif
};
// Asignación de teclado (nota El orden de adición debe ser coherente con PresentAllKeys[])
static const KeyPadMap nKeyPadMap[] = {
{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},
......
......
//Mapa teclas específicas
#if define(__SLIDE_M678)
{DEVICE_KEY_XX, KEY_XX, KEY_TIMER_IDXX, TONE_DTMF_1, DEVICE_AUDIO_PLAY_INFINITE},
#endif
};
// Definir ID DEL TIEMPO; es decir, KEY_ TIMER_IDXX
plutommi\mmi\Inc\TimerEvents.h
Agregar KEY_TIMER_IDXX;
Además, el tiempo de rebote; el tiempo de pulsación larga; el tiempo de repetición y otros parámetros se pueden modificar en drv\src\kbdmain.c
.
c
5. Detección de auriculares; control por cable
custom/drv\misc_drv\M678_BB\auxmain.c
Para la detección de auriculares, en circunstancias normales, solo Preste atención a los parámetros de AUX_EINT_NO (predeterminado de la plataforma) y SENDKEY.) y SENDKEY_ADC (consulte auxmain.c);
Puede realizar algunos ajustes según la situación real del hardware;
Para el control en línea, debe configurar los valores ADC correspondientes a REMOTE_EINT_NO, REMOTE_ADC y el botón Pulsar/Liberar;
Para un procesamiento específico, consulte el código de control __LINE_CONTROL_EARPHONE_SUPPORT__ de la plataforma 26;
6.ADC
Los recursos ADC0-ADC6 disponibles en la plataforma MT6226;
Tome el control de línea como ejemplo para introducir el proceso de modificación o adición:
interface\hwdrv\Bmt.h
typedef enum {
vbat_adc_channel=0,
visense_adc_channel,
vbattmp_adc_channel,
...
p>#if definido(__LINE_CONTROL_EARPHONE_SUPPORT__)
remote_adc_channel,
#endif
...
} adc_channel_type;
custom\drv\misc_drv\M678_BB\adc_channel.c
#if definido(__LINE_ CONTROL_EARPHONE_SUPPORT__) p>
const kal_uint8 ADC_REMOTE=6; //asumiendo hardware conectado a ADC6
#endif
kal_uint8 custom_adc_get_channel(adc_ tipo de canal)
{
Interruptor(tipo)
{
.........
#if definido(__LINE_CONTROL _EARPHONE_SUPPORT__) p>
caso remoto_adc_channel:
return ((kal_uint8)ADC_REMOTE
#endif
... ...... p>
}
# endif
};
custom\drv\misc_drv\M678_BB\auxmain.c
void aux_task_main( task_entry_struct * task_entry_ptr )
{
#if definido(__LINE_CONTROL_EARPHONE_SUPPORT__)
kal_uint8 remoto_adc_logic_id;
kal_uint8 remoto_adc_no
#endif
p>
......
......
//crear
#si está definido (__LINE_CONTROL_EARPHONE_SUPPORT__)
remote_adc_no = custom_adc_get_channel(remote_adc_channel)
remoto_adc_logic_id = adc_ sche_create_object(MOD_AUX, remoto_adc_no, 40, 1, KAL_TRUE
#endif
. .....
while(1)
{
receive_msg_ext_q(task_info_g[task_entry_ptr-gt;task_indx].task_ext_qid, amp;current_ilm
<); p> switch(current_ilm.msg_id){
......
//leer ADC
caso MSG_ID_READ_ALL_ADC_CHANNEL_REQ:
......
#if definido(__LINE_CONTROL_EARPHONE_SUPPORT__)
aux_read_adc_channel(remote_adc_logic_id);
#endif
....
romper
...
//destrucción
caso MSG_ID_BMT_ADC_MEASURE_DONE_CONF:
...
#if definido(__LINE_CONTROL_EARPHONE_SUPPORT__)
si no (mea_done_ptr-gt; adc_sche_id == remoto_ adc_logic_id)
{
adc_measure_count;
remote_value = (kal_int32)mea_done_ptr-gt;volt;
aux_remove_adc_channel (remote_adc_logic_id
}
#endif
...
}
}
}
}
El REGISTRO de interrupción CLAMSHELL se puede agregar en la función anterior
7. EINT
Descripción de EINT, consulte el manual de datos de la plataforma ;
Tome el control de cables como ejemplo para presentar el proceso de modificación o adición:
interface\hwdrv\Eint.h:
typedef enum
{
......
#if definido(__LINE_CONTROL_EARPHONE_SUPPORT__)
remote_eint_chann,
#endif< /pag
>
......
} eint_channel_type;
custom\drv\misc_drv\M678_BB\Eint_def.c
#if definido(__LINE_ CONTROL_EARPHONE_SUPPORT__)
const kal_uint8 REMOTE_EINT_NO=3; //asumiendo hardware configurado para EINT3
#endif
kal_uint8 custom_eint_get_channel(eint_channel_type type)
{
switch(tipo)
{
......
#if definido(__LINE_CONTROL _EARPHONE_SUPPORT__)
caso remoto_eint_chann:
retorno ((kal_uint8)REMOTE_EINT_NO
#endif
....
}
}
custom\drv\misc_drv\M678_BB\auxmain.c
//Función de controlador de interrupciones
void REMOTE_EINT_HISR( void)
{ <
if (remote_state) //nivel alto
{
//código de controlador asociado
}
else //nivel bajo
{
else // nivel bajo 50, /*EINT2*/
50 /*EINT3*/
};
Unidad: 50ms
También se puede modificar mediante los siguientes métodos
EINTaddr( )
EINT_Set_HW_Debounce()
EINT _SW_Debounce_Modify()
y otras funciones a modificar
8. Cargador/USB
Consulte Customer_BMT_V0.1.pdf
Documentos relacionados:
custom\drv\misc_drv\M678_ BB\chr_parameter.c Atención:
bmt_customized_struct bmt_custom_chr_def[ ] = {};
Esta es la configuración de corriente y voltaje relacionada con la carga;
static const kal_int32 chr_usb _detect_volt
Esto lo detecta CHARGER/; Valor de voltaje USB;
Mcu\bmt\*.*
Mcu\drv\src\pwic.c
Panel táctil
personalizado\drv\misc_drv\M678_BB\touch_panel_custom.c
personalizado\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
Los puntos de modificación incluyen:
asignaciones de GPIO; valores de coordenadas; detección de presión; etc.
Las modificaciones específicas se pueden encontrar en el código
10.AFE
custom\audio\M678_BB\afe.c (interruptor analógico, PA; interruptor, etc.)
custom\audio\M678_BB\audcoeff.c (parámetros de entrada/salida FIR)
custom\audio\M678_BB\nvram_default_audio.c (valor de GANANCIA)
l1audio/afe2.c (código de gestión AFE)
¡El contenido anterior se ajusta de acuerdo con los datos proporcionados por el hardware!
11.
¿Cómo utilizar Task en la plataforma MTK?
Tome el proyecto DMB como ejemplo; consulte el siguiente archivo de control DMB_SUPPPORT
custom\system\M678_BB\custom_config.c
custom\system; \M678_BB\custom_config .h
custom\drv\DMB\TCC78X\dmb_hw.c
12 Nor/Nand Flash T-Flash
Agregar nueva NAND; :
Drv \src\NAND_MTD.c
static const flash_list NAND_ID_Table[] =
{
/{ ID, tamaño del plano (MB), tamaño de bloque (KB), tamaño de página (B), ciclo de direcciones, ancho del bus IO, subcontrolador mtd}
//Agregar información sobre la nueva NAND (consulte las especificaciones del chip)
}
DA (agente de descarga) parte del código (generalmente no es necesario modificarlo)
DA_SRC\src\nand_ dev_tbl.c
Const NAND_Device_S g_NandFlashDevTbl[] =
{
/Añadir nueva información NAND (ver especificaciones del chip)
};
Agregar nuevo Nor Flash
DA_ SRC\src\flash_dev_tbl.c
Const Nor_Device_S g_FlashDevTbl[] =
{
/ Agregue nueva información Nor (ver especificaciones del chip)
};
Para modificaciones DA; es necesario regenerar el archivo DA para la herramienta de descarga flash