ADμC812的串行外设接口(SPI)及其应用
CPAH=1时,如果有其他脉冲的干扰,ADμC812将无法与主机获得同步。选择这种方式,当SS为低时,时钟计数器才开始工作。每经过8个时钟同周期,ISPI将置位(如果中断设置正确将产生中断),并且移位寄存器的数据锁存到SPIDAT中。SS保持低电平不会使时钟计数器复位。
CPHA=0时,如果有其他脉冲的干扰,ADμC812也可与主机获得同步。在这种方式下,从机通过SS信号获得的,而不是通过时钟信号获得的。当SS信号变低时,时钟计数器复位,数据位在此后的每一个时钟发送和接收;当SS变高时,ISPI位置位(如果中断设置正确,将产生中断),并且移位寄存器的数据锁存到SPIDAT中。ISPI置位与数据的锁存始终与时钟计数值无关,因此当SS的触发在多于或少于8个时钟时,在SS返回高电平瞬间,ADμC812将产生中断,并且收到或发送的数据将不可靠。在这种方式下,SS不可始终置低,如果始终置低,那么从机将始终发送00。
当了与主机获得同步,从机SS的下降沿必然由主机控制。当SS变低时,从机产生外部中断,中断服务中SPE位由软件清除,然后重新置位。SPE位的置位将使时钟计数器复位到零。须注意的一点是这一中断必须有比其他中断更高的优先级,才可使从机在主机第1个时钟到来之间获得同步。主机程序必须为从机中断执行中断服务提供足够的时间,以对SPE进行操作。典型的操作是在清除SS和向SPIDAT中写数据之间用12~15个NOP指令。
二、实际应用
图3所示为1个主机和1个从机典型的电路连接图。注意主、从机要有公共的地。
根据图3的连接情况及前面分析的主、从机工作工程,绘制流程图如图4所示。
主机程序:
SET EA ;打开中断允许
SET IE2.0 ;打开SPI中断
MOV SPICON,#30H ;送SPI控制字
MASTER:CLR P3.5 ;置SS为低
NOP ;等待从机中断执行完毕
NOP
NOP
NOP
MOV SPIDAT,#DATA;向SPIDAT中写数据
LCALL DELAY ;根据选择的分频比算出数据传输的时间,确定DELAY子程序的延时时间(也可用中断方式)
SETB P3.5 ;将SS置高
LJMP MASTER ;送下一个数
从机程序:
ORG 0013H ;外部中断INT0入口
CLR SPE ;SPE位清除
SETB SPE ;与主机时钟获得同步
SETB P3.2 ;撤销中断
RETI
……
SETB EA ;打开中断允许
SETB IE2.0 ;打开SPI中断
SETB EX0 ;打开外部中断
MOV SPICON
《ADμC812的串行外设接口(SPI)及其应用(第3页)》