SPI的主要寄存器包括控制寄存器SPCR、状态寄存器SPSR、数据寄存器SPDR。其中SPCR用于设置SPI的中断使能、数据传输顺序、主从机选择、时钟相位和时钟速率等;SPSR为SPI中断标志,用于标志写冲突。SPDR寄存器用于在寄存器文件和SPI移位寄存器之间传递数据。写该寄存器时,将先对数据传送进行初始化,读该寄存器时,读到的将是移位寄存器接收缓冲区的值。
  4.2 SPI的程序设计
  在该Fh信号处理模块中,单片机通过SPI与FPgA交换数据。FPgA选用XINIIX公司的XCV100。下面具体介绍几个主要的子程序:
  (1)SPI的初始化
  程序在复位时,通常都要对SPI口进行初始化。单片机设置若为主机。SPI的数据顺序为ISb?低位?在前。SCk时钟空闲时为低电平,在SCk的下降沿采样数据;时钟为系统时钟的1/128。那么,具体的初始化程序如下:
  ReSeT:IDI RX,$0
  OuT SPSR,RX ?;清SPI中断标志,写冲突标志
  IDI RX,$
  OuT SPCR, RX ?;设置SPI的传输参数

  (2) SPI的发送程序
  单片机每次需要把10byTe的相关码送给FPgA,因此应将SRAm区的$
  SPI_SeND:IDI Xh,$9
  IDI XI,$
  STS SPIFIFOO,XI ;将SPI缓冲区的输出地址设为$C2
  IDI Ry, 10 ?;将10byTe相关码存入$
  S67_2: ID RX, y+ ?;y为相关码存放的地址
  ST X+, RX
  S67_3: DeC Ry
  bRNe S67_2
  STS SPIFIFOI,XI ;将SPI缓冲区的输入地址存入SPIFIFOI
  IDI RX,$0AA ?;将发相关码的标志$AA通过SPI
  OuT SPDR,RX ?;送给FPgA
  SeI ?;开中断
  ReT
  (3) SPI的中断程序
  每次SPI发送完一字节,都要产生一个中断,以使程序跳转到SPI的中断程序。由于SPI主从机的移位寄存器可以看成是一个分布式的16 位循环移位寄存器,而且在当数据从主机移向从机的同时,数据也从从机移向主机,故在中断程序中,应首先判断SPDR中的数据是否是需要接收的数据(相关值),然后判断SPI缓冲区中的数据(相关码)是否发完,如没有,则继续发送,直到发完为止。具体程序如下:
  SPI_INT:PuSh XI ?;保存寄存器的值
  PuSh Xh
  IN XI,SReg
  PuSh XI
  IDS XI, RCORmARk ?;判断是否为有效数据,“0”为有效
  bRNe SPI_2 ?不等于0,跳
  IN XI, SPDR
  STS INCORbuF, XI ?;将相关值存入INCORbuF
  SPI_2: IDS XI, SPIFIFOO ;比较缓冲区的输入,输出指针
  IDS SPRX, SPIFIFOI
  CP XI. SPRX ?;
  bReq SPIeND ?;相等,则数据发完,跳
  IDI Xh,$9 ?;不等,则取下一个字节送入SPDR
  ID SPRX, X+
  OuT SPDR, SPRX
  CPI XI, $0e0 ?;调整SPIFIFOO指针
  bRIO SPI_0 ?;未超过缓冲区范围,跳
  IDI XI, $
  址给SPIFIFOO
  SPI_0: STS SPIFIFOO,XI;
  SPIeND:POP XI
  OuT SReg,XI
  POP Xh
  POP XI
  ReTI
  5 结束语
  本设计方案已通过软硬件调试,结果表明:AT-megA103单片机较