#include "Function.h"

//======================================================================================     
//函数名：DelayMs
//功  能：短延时
//输  入：软件延时,延时时间ms
//输  出：无
//======================================================================================
void DelayMs(unsigned int ms)  //12MHz 6T
{                         
	unsigned int a;
	while(ms)
	{
		a=260;
		while(a--);
		ms--;
	}
	return;
}

//======================================================================================     
//函数名：Initial_trim
//功  能：主程序开始运行之前可以通过调用此函数初始化ADC,IMO时钟,ILO时钟的修调值 
//输  入：无
//输  出：无
//======================================================================================
void Initial_trim()
{
  u8 temp;
	
  MTP_ADL =0;
	MTP_ADH =0;
	MTP_CR = 0xC2;
	temp = MTP_DR;
	BG_VTRIM = temp;	 //BG电压修调
	
  MTP_ADL =2 ;
	MTP_CR = 0xC2;
	temp = MTP_DR;
	IMO_TRIM = temp;		
	
	MTP_ADL =3 ;
	MTP_CR = 0xC2;
	temp = MTP_DR;
	IMO_TRIMH = temp;	 //IMO时钟修调

  MTP_ADL =4 ;
	MTP_CR = 0xC2;
	temp = MTP_DR;
	ILO_TRIM = temp;   //ILO时钟修调
	MTP_CR = 0xC0;	
}

//======================================================================================     
//函数名：System_Init
//功  能：配置系统时钟
//输  入：无
//输  出：无
//======================================================================================
void System_Init(void)
{
	IMO_CR     = 0x20;    /*选择内部IMO时钟24M，系统时钟分频：12M
												//bit[7] EXT_SEL 外部时钟选择：
	                               0 选择IMO时钟
	                               1 选择外部引脚时钟
												//bit[6] ECO_SEL 外部晶振时钟选择：
	                               0 选择IMO时钟或外部引脚时钟
	                               1 选择外部晶振、引脚时钟或内部IMO时钟
												//bit[5] FX2_SEL 2倍主频选择：
	                               0 选择内部IMO的2分频
	                               1 选择外部晶振时钟	
												//bit[1] SYSX2 系统时钟：
	                               0 选择系统时钟2分频
	                               1 选择系统时钟不分频
	                      */
	CLK_CR     = 0x03;    /*系统频率选择SYSCLK
	                      //bit[2:0] CPUCKS:
	                                 000 SYSCLK/8
                                   001 SYSCLK/4	
	                                 010 SYSCLK/2
                                   011 SYSCLK		
	                                 100 SYSCLK/16
                                   101 SYSCLK/32		
	                                 110 SYSCLK/64
                                   111 SYSCLK/128	
                        */																	 

	PCLK_CR    = 0xF1;    /* Enable VC0/VC1/VC2/VC3, Disable VC3 Interrupt, VC2 Select System, SCK3 Select System
												//bit[7] VC0EN
	                               0 禁止VC0时钟
	                               1 使能VC0时钟
												//bit[6] VC1EN
	                               0 禁止VC1时钟
	                               1 使能VC1时钟
												//bit[5] VC2EN
	                               0 禁止VC2时钟
	                               1 使能VC2时钟
												//bit[4] VC5EN
	                               0 禁止VC5时钟
	                               1 使能VC5时钟	
												//bit[3] VC3IE
	                               0 禁止VC3时钟中断
	                               1 使能VC3时钟中断
												//bit[2] VC2SS VC2时钟源选择
	                               0 CLK_SYS作为VC2的时钟源
	                               1 VC1作为VC2的时钟源
												//bit[1:0] VC3SS VC3时钟源选择
	                               00 关闭VC3时钟
	                               01 来自CLK_SYS
	                               10 来自VC1时钟
	                               11 来自VC2时钟
	                      */
	MTP_CFG    = 0x01;   //MTP访问周期1								
	DelayMs(180);        //延时时间最小8ms，具体和电源上电爬坡时间有关
	Initial_trim();	     //修调函数，必须加入
}


