C8051对硬件SPI接口的设置教程

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

硬件SPI
STC12C5A32S2的硬件SPI接口:
MISO P1.6
MOSI P1.5
SPICLK P1.7
/SS P1.4
两种操作模式:主模式/从模式
功能寄存器名及功能:
详见DATASHEET
工作模式及时钟频率选择;
SPCTL = 0XD0
主模式,忽略/SS, SPICLK空闲时为低电平,数据高位先发送,时钟频率=CPU_CLK/4
做主机时应注意
在SPI中,传输总是由主机启动的。

如果SPO使能(SPEN=1)并选为主机,主机对SPI数据寄存器的写操作将启动SPI的时钟发生器和数据的传输。

在数据写入SPDAT之后的一个到半个SPI位时间后,数据将出现在MOSI脚。

传输完一个字节后,SPI时钟发生器停止,传输完成标志(SPIF)置位并产生一个中断(如果SPI中断使能)。

关于配置中断寄存器:DATASHEET说“要产生SPI中断,需要ESPI/EADC/EA全部为1”,但是实际操作中只需将EA配
置为1(总中断打开)就行了,而且ESPI是IE2中的寄存器
关于这个问题,我认为是因为这里是MCU做主机,AD5612为从(AD5612只能为从)。

而DATASHEET上的例子为两个MCU,用/SS做主从选择时的应用方法
具体程序:
/**************************************************
函数原型:void readMemoryArrayclock_SPI()
功能:SPI发送数据。

***************************************************
unsigned char readMemoryArrayclock_SPI(date)
{
SPDAT = date;
while(!(SPSTAT & 0x80)); //判断传输是否完成
SPSTAT = 0Xc0; //清零(向该两个标志位写“1”,会将它们清零)
return date;
}
/**************************************************
函数原型:void writeMemoryArrayclock_SPI()
功能:SPI接收数据。

***************************************************
void writeMemoryArrayclock_SPI()
{
SPDAT = 0X04; //对SPDAT写入数据能启动时钟和数据的发送
while(!(SPSTAT & 0X80)); //判断传输是否完成
SPSTAT = 0xc0; //清零(向该两个标志位写“1”,会将它们清零)date = SPDAT;
}
传输可以被认为是双向的,且清零方法有些不同。

相关文档
最新文档