📄 init.c
字号:
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
/*******************************************************************************
* Include header files
*******************************************************************************/
#include "kal_release.h"
#include "reg_base.h"
#include "init.h"
#include "intrCtrl.h"
#include "isrentry.h"
#include "custom_config.h"
#include "stack_buff_pool.h"
#include "fat_fs.h"
#include "drv_comm.h"
#include "bmt.h"
#include "pwic.h"
#include "wdt_sw.h"
#include "bl_MTK_BB_REG.h"
#include "drvpdn.h"
#include <stdio.h>
#include <string.h>
#include <rt_misc.h> /* for __rt_lib_init() */
#include <stdlib.h>
#ifdef __CHIP_VERSION_CHECK__
#include "Uart_sw.h"
#endif /* __CHIP_VERSION_CHECK__ */
#if defined(MT6208)
#include "drv_comm.h"
#include "wdt_sw.h"
#endif /* MT6208 */
#ifdef __MULTI_BOOT__
#include "syscomp_config.h"
#include "multiboot_config.h"
#endif /*__MULTI_BOOT__*/
#include "gpio_sw.h"
/*******************************************************************************
* Define pragma
*******************************************************************************/
#ifdef __ADS__
#if (!defined(MT6208) && !defined(MT6205B))
#pragma import __use_realtime_division
#endif /* !MT6208 && MT6205B */
#else /* __ADS__ */
#pragma import __use_realtime_division
#endif /* __ADS__ */
#define MANUFACTURE_ID_ADDR 0x80030100//flash id is saved in DMA register
#define DEV_ID_ADDR 0x80030200
#define EXT_DEV1_ID_ADDR 0x80030104
#define EXT_DEV2_ID_ADDR 0x80030204
#define EMI_LOCATION_ADDR 0x80030300//FOR save flash location in the flash_timing_table(debug use)
#define TEST_MEMORY 0X1234ABCD//for caculate sram size
#ifdef REMAPPING
#define EXTRAM_32MADDR 0x00400400
#define EXTRAM_0MADDR 0X00000400
#else
#define EXTRAM_32MADDR 0x08400400
#define EXTRAM_0MADDR 0x08000400//for caculate sram size
#endif
extern kal_uint32 EMI_EXTSRAM_SIZE;
/*******************************************************************************
* Define global data
*******************************************************************************/
static kal_uint16 _boot_mode = 0 /* NORMAL Mode */;
kal_uint32 rand_num_seed;
static kal_uint16 _32khz_gpio_pin = 0xFFFF;
static kal_uint16 _32khz_gpio_data = 0xFFFF;
static kal_uint32 _32khz_user_cnt;
extern kal_uint16 gManufacture_code;
extern kal_uint16 gDev_code;
extern kal_uint16 gExt_dev_code1;
extern kal_uint16 gExt_dev_code2;
extern kal_uint32 gFatsize;
extern kal_uint32 gfat_base_addr;
extern kal_uint8 drv_dbg;//location of flash in initialize_fdd_table() flash_setting table debug use
kal_uint8 emi_dbg;//location of flash in custom_setemi() timing table debug use
kal_uint8 flash_driver_dbg;//driver used in flash_amd_mtd.c debug use
/*
* Need to use a segment of internal RAM to generate randum number seed.
* We pick up address 0x40002000 since it won't be modified by other
* program such as bootloader.
*/
static const kal_uint32 RAND_GEN_START_ADDR = 0x40002000;
/*******************************************************************************
* Declare import data
*******************************************************************************/
extern BMTStruct BMT; /* Main BMT struct */
extern boot_mode_type system_boot_mode;
extern kal_uint32 SYS_Stack_Pool[];
/*******************************************************************************
* Declare import function prototype
*******************************************************************************/
static void systemIntialization(void);
static void HWDInitialization(void);
static void systemInitializeResource(void);
#if defined(KAL_ON_NUCLEUS) && defined(NU_DEBUG)
#define RTOS_DEBUG
#endif /* KAL_ON_NUCLEUS && NU_DEBUG */
#if defined(KAL_ON_THREADX) && !defined(TX_DISABLE_ERROR_CHECKING)
#define RTOS_DEBUG
#endif /* KAL_ON_THREADX && !TX_DISABLE_ERROR_CHECKING */
#if defined(KAL_ON_OSCAR)
#define RTOS_DEBUG
#endif /* KAL_ON_OSCAR */
#define _SST_FUNCTION_ENABLE_
#ifdef _SST_FUNCTION_ENABLE_
/* under construction !*/
#endif /* _SST_FUNCTION_ENABLE_ */
extern int mainp(void);
extern void Drv_Init_Phase1(void);
extern void Drv_Init_Phase2(void);
extern int stack_check_msgid_range(void);
extern void kal_initialize_mem(void);
extern void fatal_error_handler( kal_uint8 *, kal_int32, kal_int32);
extern kal_char *release_dsp_fw(void);
extern kal_char *release_dsp_ptch(void);
extern kal_char *release_verno(void);
extern kal_char *release_branch(void);
extern kal_char *release_hw_ver(void);
#ifdef _MAUI_SOFTWARE_LA_
/* under construction !*/
#endif /* _MAUI_SOFTWARE_LA_ */
#if !defined(__L1_STANDALONE__) && !defined(EMPTY_MMI)
extern void MMICheckDiskDisplay(void);
#endif
#ifdef IDMA_DOWNLOAD
extern void idma_load(void);
#endif /* IDMA_DOWNLOAD */
#ifdef MTK_SLEEP_ENABLE
extern void L1SM_Init( void );
#endif
#ifndef L1_NOT_PRESENT
extern void L1D_SetInitMode( kal_int16 mode );
#endif /* !L1_NOT_PRESENT */
#if !defined(__MAUI_BASIC__)
extern void Initialize_FDD_tables(void);
extern int Check_NORFlash_Formatted(void);
#endif
#ifdef __USB_ENABLE__
extern kal_bool INT_USBBoot(void);
extern void isrCTIRQ1_USBPowerOn(void);
#endif /*__USB_ENABLE__*/
#if ( (defined(__MTK_TARGET__) || defined (MTK_KAL_MNT)) && !defined(__MAUI_BASIC__) && !defined(__L1_STANDALONE__) && !defined(EMPTY_MMI) )
extern void InitializeResourceVariables(void);
#endif /* __MTK_TARGET__ || MTK_KAL_MNT */
#ifdef _NAND_FLASH_BOOTING_
extern kal_bool NFB_SecondaryImageLoaded;
extern void NFB_LoadingSecondaryMAUI(void);
extern void NFB_InitThirdROM(void);
#endif
#ifdef __CHIP_VERSION_CHECK__
extern void U_PutUARTByte(UART_PORT port, kal_uint8 data);
#endif /* __CHIP_VERSION_CHECK__ */
/*************************************************************************
* FUNCTION
* INT_SetPLL
*
* DESCRIPTION
* This function dedicates for PLL setting.
*
* CALLS
* Non
*
* PARAMETERS
*
* RETURNS
*
* GLOBALS AFFECTED
*
*************************************************************************/
void INT_SetPLL(void)
{
#ifdef MT6205B
#if defined(EXT_26M)
/*for DSP configuration*/
*(volatile kal_uint16 *)PDN_CLR0 = 0x8000; /* PDN_CON0 turn on DSP div by 2 */
*(volatile kal_uint16 *)CLK_CON |= 0x0001; /* DSP div by 2 */
#if defined(MCU_26M)
*(volatile kal_uint16 *)MPLL = 0x0001; /* MCU - MCU Frequency register on MT6205B */
#elif defined (MCU_13M) /* MCU_26M */
*(volatile kal_uint16 *)PDN_CLR0 = 0x1000; /* PDN_CON0 turn on MCU div by 2 */
*(volatile kal_uint16 *)CLK_CON |= 0x0008; /* MCU div by 2 */
*(volatile kal_uint16 *)MPLL = 0x0000; /* MCU - MCU Frequency register on MT6205B */
#endif /* MCU_26M */
#endif /* EXT_26M */
#ifndef __MAUI_BASIC__
*(volatile kal_uint16*)PREFETCH_CON = 0x0003;
#endif /* !__MAUI_BASIC__ */
#endif /* MT6205B */
#if defined(MT6208) && defined(EXT_13M)
{
kal_uint32 delay;
/* configuration for MT6208, which features 13, 26, 39 and 52MHz */
*(volatile kal_uint16 *)PDN_SET0 = 0xa807;
*(volatile kal_uint16 *)PDN_CLR0 = ~0xa807;
#ifdef MPLLX1
*(volatile kal_uint16 *)MPLL = 0x0000;
#elif defined(MPLLX2)
*(volatile kal_uint16 *)MPLL = 0x0001;
#elif defined(MPLLX3)
*(volatile kal_uint16 *)MPLL = 0x0002;
#elif defined(MPLLX4)
*(volatile kal_uint16 *)MPLL = 0x0003;
#endif /* MPLL */
for (delay=0;delay<1000;delay++);
*(volatile kal_uint16 *)CLK_CON = 0x0002;
#ifdef MPLLX1
#ifndef __MAUI_BASIC__
/* For stability issue */
*(volatile kal_uint16*)PREFETCH_CON = 0x0003;
#endif /* !__MAUI_BASIC__ */
#endif /* MPLLX1 */
}
#endif /* MT6208 && EXT_13M */
#if defined(MT6218) || defined(MT6218B) || defined(MT6219)
{
kal_uint16 i;
#ifdef MCU_52M
#ifdef EXT_26M
// Power on DSP_DIV2, MPLL, DPLL, MCU_DIV2, and CLKSQ
*(volatile kal_uint16 *)PDN_CLR0 = ~0x04ff;
// Enable MCU clock divider
*(volatile kal_uint16 *)0x80000108 = 0x0008;
// Reset the MPLL and setting MPLL to 52MHz
*(volatile kal_uint16 *)0x80000100 = 0x0083;
*(volatile kal_uint16 *)0x80000100 = 0x0003;
// delay until PLL is stable
for (i=0;i<200;i++);
// Enable MPLL output
*(volatile kal_uint16 *)0x80000108 = 0x000a;
#elif defined (EXT_13M) /* EXT_26M */
// Power on MPLL, DPLL and CLKSQ
*(volatile kal_uint16 *)PDN_CLR0 = ~0x94ff;
// Reset the MPLL and setting MPLL to 52MHz
*(volatile kal_uint16 *)0x80000100 = 0x0083;
*(volatile kal_uint16 *)0x80000100 = 0x0003;
// delay until PLL is stable
for (i=0;i<200;i++);
// Enable MPLL output
*(volatile kal_uint16 *)0x80000108 = 0x0002;
#endif /* EXT_26M */
#elif defined (MCU_26M) /* MCU_52M */
#ifdef EXT_26M
// Power on DSP_DIV2, MPLL, DPLL, MCU_DIV2, and CLKSQ
*(volatile kal_uint16 *)PDN_CLR0 = ~0x04ff;
// Enable MCU clock divider
*(volatile kal_uint16 *)0x80000108 = 0x0008;
// Reset the MPLL and setting MPLL to 26MHz
*(volatile kal_uint16 *)0x80000100 = 0x0081;
*(volatile kal_uint16 *)0x80000100 = 0x0001;
// delay until PLL is stable
for (i=0;i<200;i++);
// Enable MPLL output
*(volatile kal_uint16 *)0x80000108 = 0x000a;
#elif defined (EXT_13M) /* EXT_26M */
// Power on CLKSQ
*(volatile kal_uint16 *)PDN_CLR0 = ~0x94ff;
// Reset the MPLL and setting MPLL to 26MHz
*(volatile kal_uint16 *)0x80000100 = 0x0081;
*(volatile kal_uint16 *)0x80000100 = 0x0001;
// delay until PLL is stable
for (i=0;i<200;i++);
// Enable MPLL output
*(volatile kal_uint16 *)0x80000108 = 0x0002;
#endif /* EXT_26M */
#endif /* MCU_52M */
}
#endif /* MT6218 || MT6218B || MT6219 */
#if defined(MT6217) || defined(MT6226) || defined(MT6227) || defined(MT6226M) || defined(MT6227D) || defined(MT6226D)
{
kal_uint16 i;
#ifdef EXT_26M
// Power on DSP_DIV2, MPLL, DPLL, MCU_DIV2, and CLKSQ
*(volatile kal_uint16 *)PDN_CLR0 = ~0x04ff;
// Enable MCU clock divider
*(volatile kal_uint16 *)0x80000108 = 0x0008;
// Reset the MPLL and setting MPLL to 52MHz
#if defined(MT6217)
*(volatile kal_uint16 *)0x80000100 = 0x0083;
*(volatile kal_uint16 *)0x80000100 = 0x0003;
#else /* MT6217 */
*(volatile kal_uint16 *)0x80000100 = 0x0084;
*(volatile kal_uint16 *)0x80000100 = 0x0004;
#endif /* MT6217 */
// delay until PLL is stable
for (i=0;i<200;i++);
// Enable MPLL output
*(volatile kal_uint16 *)0x80000108 = 0x000a;
#elif defined (EXT_13M) /* EXT_26M */
// Power on MPLL, DPLL and CLKSQ
*(volatile kal_uint16 *)PDN_CLR0 = ~0x94ff;
// Reset the MPLL and setting MPLL to 52MHz
#if defined(MT6217)
*(volatile kal_uint16 *)0x80000100 = 0x0083;
*(volatile kal_uint16 *)0x80000100 = 0x0003;
#else /* MT6217 */
*(volatile kal_uint16 *)0x80000100 = 0x0084;
*(volatile kal_uint16 *)0x80000100 = 0x0004;
#endif /* MT6217 */
// delay until PLL is stable
for (i=0;i<200;i++);
// Enable MPLL output
*(volatile kal_uint16 *)0x80000108 = 0x0002;
#endif /* EXT_26M */
#ifdef MCU_52M
*(volatile kal_uint16 *)0x80000114 = 0x0003;
#elif defined (MCU_39M)
*(volatile kal_uint16 *)0x80000114 = 0x0002;
#elif defined (MCU_26M)
*(volatile kal_uint16 *)0x80000114 = 0x0001;
#elif defined (MCU_13M)
*(volatile kal_uint16 *)0x80000114 = 0x0000;
#endif
}
#endif /* MT6217 || MT6226 || MT6227 || MT6226M */
#if defined(MT6228) || defined(MT6229) || defined(MT6230)
{
kal_uint16 i;
#ifdef EXT_26M
// 1. Power on DSP_DIV2, MCU_DIV2, and CLKSQ
*PDN_CLR0 = 0x9800;
// 2. Enable MCU clock divider
*CLK_CON = 0x0008;
#elif defined (EXT_13M)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -