/*
 * SPI_MASTER.c
 *
 *  Created on: 2019-9-2
 *      Author: charles_cai
 */
#include"main.h"

#ifndef SPI_MASTER_C_
#define SPI_MASTER_C_

#define MODE1	SSCICKP=0;CKEGE=0;	//空闲时为低电平，在SCL上升沿发送数据
#define MODE2	SSCICKP=0;CKEGE=1;	//空闲时为低电平，在SCL下降沿发送数据
#define MODE3	SSCICKP=1;CKEGE=0;	//空闲时为高电平，在SCL下降沿发送数据
#define MODE4	SSCICKP=1;CKEGE=1;	//空闲时为高电平，在SCL上升沿发送数据

unsigned char Send_BUF[10] ={0};//发送缓存
unsigned char Reciv_BUF[10] ={0};//接收缓存

/************************
 * 函数名   ：Init_SPI
 * 函数功能：初始化SPI模块
 * 入口参数：无
 * 返回      ：无
 ************************/
void Init_SPI()
{
	SSCIEN=0;				//关闭SPI模块，初始化完之后再打开

	SSCICTL0=0X02;			//SPI 主控模式，时钟 = 工作时钟/64
	SSCICTL1=0X00;
	SSCISTA=0X00;

	MODE4//SPI的模式配置
	SSCIEN=1;
}
/************************
 * 函数名   ：SPI_one
 * 函数功能：发送单个字节，并将接收的字节带回
 * 入口参数：待发送的字节
 * 返回      ：接收的字节
 ************************/
unsigned char SPI_one(unsigned char d)
{
	SSCIBUFR=d; //将待发送的字节放入发送缓存中
	while(!SSCIIF); //等待发送完毕后SSCIIF置位，
	SSCIIF=0;
	return SSCIBUFR;//返回接收的字节
}

/************************
 * 函数名   ：SPI_mul
 * 函数功能：连续发送Send_BUF中的多个字节，并将接收的数据放入Reciv_BUF
 * 入口参数：待发送的字节数
 * 返回      ：无
 ************************/
void SPI_mul(unsigned char cnt)
{
	unsigned char i=0;
	for(i=0;i<10;i++)//清空接收缓存
		Reciv_BUF[i]=0;

	for(i=0;i<cnt;i++)
	{
		Delay_10us_loop(5);//延时一段时间，给接收端留下足够的处理时间
		Reciv_BUF[i]=SPI_one(Send_BUF[i]);//发送数据后，读取接收的数据
	}

	for(i=0;i<10;i++)//清空Send_BUF
		Send_BUF[i]=0;
}

#endif /* SPI_MASTER_C_ */
