文档库 最新最全的文档下载
当前位置:文档库 › STC硬件SPI驱动程序

STC硬件SPI驱动程序

#ifndef SPI_H
#define SPI_H

#include

#define SSIG 1 //1: 忽略SS脚,由MSTR位决定主机还是从机 0: SS脚用于决定主从机。
#define SPEN 1 //1: 允许SPI, 0:禁止SPI,所有SPI管脚均为普通IO
#define DORD 0 //1:LSB先发, 0:MSB先发
#define MSTR 1 //1:设为主机 0:设为从机
#define CPOL 1 //1: 空闲时SCLK为高电平, 0:空闲时SCLK为低电平
#define CPHA 1 //
#define SPR1 0 //SPR1,SPR0 00: fosc/4, 01: fosc/16
#define SPR0 0 // 10: fosc/64, 11: fosc/128
#define SPEED_4 0 // fosc/4
#define SPEED_16 1 // fosc/16
#define SPEED_64 2 // fosc/64
#define SPEED_128 3 // fosc/128


#define SPIF 0x80 //SPI传输完成标志。写入1清0。
#define WCOL 0x40 //SPI写冲突标志。写入1清0。

void SPI_Init_Initing();
void SPI_Init_Working(void);
void SD_spi_write(unsigned char Mydata);
unsigned char SD_spi_read(void);


#endif


#include"SPI.h"
#include"STC12C5A60S2.H"
/*****************************************/
/****设备初始化时对SPI配置,要求速度低****/
/*****************************************/
void SPI_Init_Initing()
{
SPCTL = (SSIG << 7) + (SPEN << 6) + (DORD << 5) + (MSTR << 4) + (CPOL << 3) + (CPHA << 2) + SPEED_64;
}

/*****************************************/
/****读写设备时对SPI配置,要求速度低******/
/*****************************************/
void SPI_Init_Working(void)
{
SPCTL = (SSIG << 7) + (SPEN << 6) + (DORD << 5) + (MSTR << 4) + (CPOL << 3) + (CPHA << 2) + SPEED_4;
}

/***********************************************
功能:SPI发送一个字节
变量:x,待发送的字节变量
***********************************************/
void SD_spi_write(unsigned char Mydata)
{
SPSTAT = 0xC0; //清0 SPIF和WCOL标志
SPDAT = Mydata; //发送一个字节
while(!(SPSTAT & SPIF)) ; //等待发送完成
}

/***********************************************
功能:SPI接收一个字节的数据
变量:返回一个字节变量,从SD卡读取的数据
***********************************************/
unsigned char SD_spi_read(void)
{
SPSTAT = 0xC0; //清0 SPIF和WCOL标志
SPDAT = 0xff; //发送一个字节
while(!(SPSTAT & SPIF)) ; //等待发送完成
return SPDAT;
}



相关文档