/****************************************************************************************
 * KF8A系列单片机	KF8A100GQT_DEMO	开发板演示程序
 * 标    题: EEPROM实验
 * 项目名: 12- EEPROM_Sample
 * 开发环境：ChipON IDE
 * 版          本     ：V1.0 (2019/07/23)
 * 作 者: 上海芯旺微电子有限公司
 * 功能简述：测试DATE_EEPROM的读写操作，如程序所示，对相应的地址进行操作，操作结果通过断电 使用PRO读取。
 * 硬件说明：
 * 跳线接法：单片机供电选择为3.3V或5V
 ****************************************************************************************/
#include<KF8A100GQT.h>
#include "includes.h"

void delay_ms(uint16 num)
{
	uint16 i,j;
	for(i=0;i<num;i++)
	{
		j=100;
		while(j--);
	}
}

void SYS_Init(void)
{
	TR0 = 0;	TR1	= 0;	TR2	= 0;	TR3 = 0;
	TR4 = 0;	TR5 = 0;	TR6 = 0;	TR7 = 0;
	TR9 = 0;	TRA = 0;	TRB = 0;
	P0LR = 0;	P1LR = 0;	P2LR = 0;	P3LR = 0;
	P4LR = 0;	P5LR = 0;	P6LR = 0;	P7LR = 0;
	P9LR = 0;	PALR = 0;	PBLR = 0;

	//使用外部晶振时，引脚配置输入，配置字选择外部时钟且允许切换
	SCLKCTL = SYSYCLK_SEL_SCKS|SYSCLK_SCLK_SEL_INTHF|SYSCLK_FREQ_DIV1;	//INTHF作为主时钟
	_NOP();_NOP();	//高速时钟稳定
	PLLEN=0;
	PLLCTL = PLL_SEL_DIV1|PLL_SEL_INTHF|PLLBIAS_CUR_MIN|PLLPMUL_2;
	PLLEN=1;
	delay_ms(200);
	SCLKCTL|=SYSYCLK_SEL_SCKS|SYSCLK_SCLK_SEL_UPCK;		//UPCK作为主时钟	32M
	SCLKOE = 0;		//机器周期禁能输出,输出波形与IO翻转速率相关
	CLKOUTSEL = 0;
	HFCKCTL = 0xCE;	//外设高速时钟开启, 选择INTHF为HFCLK时钟信号
	LFCKCTL = 0x8F;	//外设低速时钟开启, 选择EXTLF为LFCLK时钟信号
}

void main()
{
	unsigned char i;
	unsigned char temp=0x00;

	SYS_Init();
	//总中断开启
	AIE=1;
	PUIE=1;
	LED_R=1;
//--- 准备待写入的16个数据0x00 0x11 0x22...0xFF
	for (i = 0; i < DATAEEPROM_BUFFER_SIZE; i++)
	{
		Dataeeprom_Buffer.bytes[i] = temp;
		temp+=0x11;
	}
//---setp 1 		写入到0x00 和0x0F的DATA_EE空间
	Dataeeprom_Data_Write(0x00,DATAEEPROM_BUFFER_SIZE);
//--- setp 2 		读取 0x09，并写入到0x40
		// 读取所需到缓存
	temp=Dataeeprom_SingleDate_Read(0x09);
		// 修改要写入的值
	Dataeeprom_SingleData_Write(0x40,temp);
//--- setp 3	将0X40-0x4F中写入的16个数据0x00 0x11 0x22...0xFF；
	temp=0;
	for (i = 0; i < DATAEEPROM_BUFFER_SIZE; i++)
	{
		Dataeeprom_Buffer.bytes[i] = temp;
		temp+=0x11;
	}
	Dataeeprom_Data_Write(0x40,DATAEEPROM_BUFFER_SIZE);
//--- setp 4	将0X40-0x4F中的数据读出到数组并修改0X40的值后放置到0x20段
	Dataeeprom_Data_Read(0x40,DATAEEPROM_BUFFER_SIZE);
	Dataeeprom_Buffer.byte0=0xFE;
	Dataeeprom_Data_Write(0x20,DATAEEPROM_BUFFER_SIZE);
	LED_R=0;
	while(1)
	{

	}

}


//中断函数0:0X04入口地址
void int_fun0() __interrupt (0)
{

}


//中断函数1:0x14入口地址
void int_fun1() __interrupt (1)
{

}
