SPI的C语音通用实现Word文档下载推荐.docx

上传人:b****5 文档编号:19652258 上传时间:2023-01-08 格式:DOCX 页数:8 大小:15.65KB
下载 相关 举报
SPI的C语音通用实现Word文档下载推荐.docx_第1页
第1页 / 共8页
SPI的C语音通用实现Word文档下载推荐.docx_第2页
第2页 / 共8页
SPI的C语音通用实现Word文档下载推荐.docx_第3页
第3页 / 共8页
SPI的C语音通用实现Word文档下载推荐.docx_第4页
第4页 / 共8页
SPI的C语音通用实现Word文档下载推荐.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

SPI的C语音通用实现Word文档下载推荐.docx

《SPI的C语音通用实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SPI的C语音通用实现Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。

SPI的C语音通用实现Word文档下载推荐.docx

下一位数据信号上线,再重复上述过程,直到一个字节的8位信号传输结束

工作方式2:

  当CPHA=0、CPOL=1时SPI总线工作在方式2。

与前者唯一不同之处只是在同步时钟信号的下降沿时捕捉位信号,上升沿时下一位数据上线。

工作方式3:

  当CPHA=1、CPOL=0时SPI总线工作在方式3。

MISO引脚和MOSI引脚上的数据的MSB位必须与SPSCK的第一个边沿同步,在SPI传输过程中,在同步时钟信号周期开

始时(上升沿)数据上线,然后在同步时钟信号的下降沿时,SPI的接收方捕捉位信号,在时钟信号的一个周期结束时(上升沿),下一位数据信号上线,再重复

上述过程,直到一个字节的8位信号传输结束

工作方式4:

  当CPHA=1、CPOL=1时SPI总线工作在方式4。

与前者唯一不同之处只是在同步时钟信号的上升沿时捕捉位信号,下降沿时下一位数据上线。

例如,WINBOND的W25XXX系列SPIFLASH就支持工作方式1和工作方式4

本文提供一种通用的IO模拟SPI的程序,用户只需几个简单的函数并初始化一个结构体TS_SPI_BSP,即可以调用StandardSpiMasterWrite和StandardSpiReadSlave对SPI芯片进行读写操作。

*/

typedefenum

{

scl_idle_low_sampling_at_first_edge=0,

scl_idle_high_sampling_at_first_edge,

scl_idle_low_sampling_at_second_edge,

scl_idle_high_sampling_at_second_edge,

}TE_SPI_MODE;

typedefstruct

/*片选脚拉高函数*/

void(*pfnCSsetHigh)(void);

/*片选脚拉低函数*/

void(*pfnCSsetLow)(void);

/*时钟脚拉高函数*/

void(*pfnSCKsetHigh)(void);

/*时钟脚拉低函数*/

void(*pfnSCKsetLow)(void);

/*主出从入脚拉高函数*/

void(*pfnMOSIsetHigh)(void);

/*主出从入脚拉低函数*/

void(*pfnMOSIsetLow)(void);

/*读主入从出脚电平函数*/

unsignedchar(*pfnReadMISO)(void);

/*短延时函数*/

void(*pfnSPIShortDelay)(void);

/*芯片的SPI模式*/

TE_SPI_MODEChipSpiMode;

}TS_SPI_BSP;

staticvoidmaster_write_mode1(TS_SPI_BSP*p_spi,unsignedcharwrite_data)

unsignedchari;

for(i=0;

i<

8;

i++)

{

if(write_data&

0x80)

p_spi->

pfnMOSIsetHigh();

else

pfnMOSIsetLow();

p_spi->

pfnSCKsetHigh();

pfnSPIDelay();

write_data<

<

=1;

pfnSCKsetLow();

}

}

staticvoidmaster_write_mode2(TS_SPI_BSP*p_spi,unsignedcharwrite_data)

staticvoidmaster_write_mode3(TS_SPI_BSP*p_spi,unsignedcharwrite_data)

staticvoidmaster_write_mode4(TS_SPI_BSP*p_spi,unsignedcharwrite_data)

staticunsignedcharread_slave_mode1(TS_SPI_BSP*p_spi)

unsignedcharReadData=0;

ReadData<

if(p_spi->

pfnReadMISO()==1)

ReadData|=0x01;

returnReadData;

staticunsignedcharread_slave_mode2(TS_SPI_BSP*p_spi)

staticunsignedcharread_slave_mode3(TS_SPI_BSP*p_spi)

staticunsignedcharread_slave_mode4(TS_SPI_BSP*p_spi)

staticvoidStandardSpiEnableChip(TS_SPI_BSP*p_spi)

p_spi->

pfnCSsetLow();

staticvoidStandardSpiDisableChip(TS_SPI_BSP*p_spi)

pfnCSsetHigh();

voidStandardSpiMasterWrite(TS_SPI_BSP*p_spi,unsignedcharwrite_data)

StandardSpiEnableChip(p_spi);

switch(p_spi->

ChipSpiMode)

casescl_idle_low_sampling_at_first_edge:

master_write_mode1(p_spi,write_data);

break;

casescl_idle_high_sampling_at_first_edge:

master_write_mode2(p_spi,write_data);

casescl_idle_low_sampling_at_second_edge:

master_write_mode3(p_spi,write_data);

casescl_idle_high_sampling_at_second_edge:

master_write_mode4(p_spi,write_data);

default:

StandardSpiDisableChip(p_spi);

unsignedcharStandardSpiReadSlave(TS_SPI_BSP*p_spi)

unsignedcharretval=0;

retval=read_slave_mode1(p_spi);

retval=read_slave_mode2(p_spi);

retval=read_slave_mode3(p_spi);

retval=read_slave_mode4(p_spi);

returnretval;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1