TMS320F241型DSP的SPI口EEPROM扩展
DSP中SPI有16位的发送和接收能力,且接收和发送均是双缓冲。所有数据寄存器都是16位宽的,而X5043的地址、数据寄存器均是8位的,将DSP中SPI传输字符长度设置成8位宽。要向X5043存储数据时,DSP将一个8位字节长度的数据写入SPIDAT或SPITXBUF的高8位上如图2所示,在时钟信号的作用下,以左对齐方式发送,先发送数据的最高位。DSP接收一个8位字节长度的数据,是以右对齐方式接收如图3所示,8位字节长度的数据写入SPIDAT或SPIRXBUF 的低8位上。
3.4各控制寄存器设置
LDP #SPICCR>>7
SPLK #0007h,SPICCR
;复位SPI, 8个字符长度
S
PLK #000Eh,SPICTL
;主模式,使能TALK,禁止SPI的中断
;上升沿发送,下降沿接收,有延时
SPLK #000Fh,SPIBRR
;设置SPI的传输波特率
SPLK #0087h,SPICCR
;SPI准备好发送或接收下一字符
3.5程序设计
RAM块中的变量定义:
.bss SPI_Xdata,1
;SPI数据传输暂存器
.bss address1,1
;EEPROM存储器地址暂存器
.bss data1,1
;EEPROM存储器数据暂存器
X5043存储器地址:
WREN .set 0600h
;设置写使能锁存指令地址
WRDI .set 0400h
;复位写使能锁存指令地址
RSDR .set 0500h
;读状态寄存器指令地址
WRSR .set 0100h
;写状态寄存器指令地址
READh .set 0B00h
READl .set 0300h
;读存储器阵列数据指令地址
WRITEh .set 0A00h
WRITEl .set 0200h
;写存储器阵列数据指令地址
3.5.1 DSP的SPI数据发送、接收子程序代码
XMIT_VALUE:
LDP #0
LACC SPI_Xdata
LDP #SPITXBUF>>7
SACL SPITXBUF
;写需发送的值到SPI传输缓冲器
XMIT_RDY:
LDP #SPISTS>>7
BIT SPISTS,BIT6
BCND XMIT_RDY,NTC
;测试SPI_INT位,如果SPI_INT=0,则重复循环
;等待数据发送完毕进行下一步操作
LDP #SPIRXBUF>>7
LACL SPIRXBUF
;读取数据清除SPI_INT标志位
LDP #0
SACL SPI_Xdata
;将接收的值存入数据传输暂存器
RET
3.5.2 X5043内部非易失性写判断子程序代码
RSDR_WIP:
SPISTE_LOW
;置低SPISTE引脚,从而选通X5043
LDP #0
SPLK #RSDR,SPI_Xdata
CALL XMIT_VALUE
;写读状态寄存器地址,高8位
SPISTE_HIGH
;置高SPISTE引脚,禁止X5043
LDP #0
BIT SPI_Xdata,BIT0
BCND RSDR_WIP,TC
;测试状态寄存器WIP位。如果WIP=1,正在进行内部写操作。
;等待内部写操作完成进行下一步操作
RET
使用上述判断子程序能够保证X5043完成内部写操作。向X5043存储器阵列写入数据时后面将
《TMS320F241型DSP的SPI口EEPROM扩展(第2页)》