STC硬件SPI驱动程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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;
}