/****************************************************************************************
 * 项目用途：演示SPI从机的用法
 * 文件名: main.c
 * 项目名: KF8A100FTN_SPI_Slave
 * 版 本: v1.0
 * 日 期: 2019年09月02日 17时18分31秒
 * 作 者: charles_cai
 * 功能：主机发送10个数据，并带回10个数据，主机验证收到的数据正确性，正确则LED2闪烁。错误则停止闪烁。
 * SPI从机接口：
 * 		SDI——P01——数字输入模式
 * 		SDO——P17——数字输出模式
 * 		SCK——P00——数字输入模式
 * 		SS——P05——数字输入模式
 ****************************************************************************************/
#include"main.h"
//主函数
void main()
{
	unsigned char i=0, Flag=0;
	Init_osc();//初始化时钟和IO口
	Init_GPIO();
	Init_SPI();//初始化SPI外设
	Init_intrup();

	for(i=0;i<10;i++)//填写待发送数据的缓存
	{
		Send_BUF[i]= i+10;
	}

	while(1)
	{
		for(i=0;i<10;i++)//验证接收的数据是否正确
		{
			if(i== Reciv_BUF[i])
				Flag=1;
			else
			{
				Flag=0;
				break;
			}
			Reciv_BUF[i] =0;
		}

		if(Flag)//如果接受的数据正确则LED2闪烁
		{
			Flag=0;
			Delay_ms_loop(100);
			LED2 =0;
			Delay_ms_loop(100);
			LED2 =1;
		}
	}
}
//中断函数0:0X04入口地址
void int_fun0() __interrupt (0)
{
	if(SSCIIF)//接收中断需要一定的时间处理数据，主机的发送速度不能太快
	{
		SSCIIF=0;
		if(0==SSCIBUFR)//如果收到的是第一个字节，初始化接收计数和发送计数
		{
			Reciv_cnt =0;
			Send_cnt=1;
		}

		Reciv_BUF[Reciv_cnt++] =SSCIBUFR;//读出接受的数据，并将它存到缓存中
		if(Reciv_cnt>9)
			Reciv_cnt=0;

		SSCIBUFR= Send_BUF[Send_cnt++];//将待发送的数据填写到SSCIBUFR中，等待下次主机通讯时带回
		if(Send_cnt>9)
			Send_cnt=0;
	}
}


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

}
