McBSP复用SPI设计及EEPROM读写

SPI通信是高速、同步、全双工总线式的,它以主从方式工作,通常有一个主设备和一个或多个从设备,需要4根线,MOSI(主设备输出),MISO(主设备输入),SCLK(时钟信号,由主设备产生),CS(从设备使能信号,由主设备控制,一般低电平片选)。SPI有四种通信模式,不同的从设备在出厂就已配置为某种模式,这是不能改变的,所以需要对主设备进行SPI模式配置。DSP通过以下方面可以配置SPI的四种通信模式,通过CPOL(时钟极性,表示总线空闲时的时钟电平状态,或者0表示上升沿发送下降沿接收,1表示下降沿发送上升沿接收)和CPHA(时钟相位,0表示数据发送在第一个边沿,1表示数据发送在第一个边沿延时半个周期)来控制主设备的通信模式,即CPOL=0;CPHA=0,上升沿发送,下降沿接收;CPOL=0;CPHA=1,上升沿延时半个周期发送(即下降沿发送),上升沿接收;CPOL=1;CPHA=0,下降沿发送,上升沿接收;CPOL=1;CPHA=1,下降沿延时半个周期发送(即上升沿发送),下降沿接收。

       DSP的时序定义同常规SPI时序存在一些不同,普通SPI时序如上图所示,DSPSPI配置CPOL=0;CPHA=1(等同于McBSP复用SPI时,CLKXP=0;CLKRP=1;CLKSTP=3)对应于普通的SPI模式0,即CPOL=0;CPHA=0,因为描述CPOL时钟极性是相同的(0表示总线空闲时为低电平,1表示总线空闲时为高电平),而描述CPHA时钟相位是不同的(在DSPSPI时序描述中,0表示数据发送在第一个边沿,1表示数据发送在第一个边沿延时半个周期,而在普通SPI时序描述中,0表示数据接收在第一个边沿,1表示数据接收在第一个边沿延时半个周期)。同时,接收即表示采样,当主机在上升沿采样时,从机必须在上升沿发生之前必须准备好数据,即是从机在下降沿发生后,就要把数据放出来,为主机上升沿采样做好准备。一般从设备的SPI时序模式为0,即对应DSPCPOL=0;CPHA=1

McBSP相关寄存器意义:PCR管脚控制寄存器:FSXM发送帧同步模式,0表示发送帧同步由外部源通过FSX引脚提供,1表示发送帧同步由采样率发生器内部产生,如由SRGR2的FSGM位确定,同理FSRM接收帧同步模式。CLKXM发送时钟模式位,确定发送时钟的源为外部或内部,以及MCLKX引脚是输入还是输出,在时钟停止模式下,如果McBSP是主机,则CLKXM=1。SCLKME采样率发生器输入时钟模式选择位。FSXP发送帧同步极性位,FSXP确定FSX的极性,0表示发送帧同步脉冲高激活,1表示发送帧同步脉冲低激活;同理FSRP接收帧同步极性位。CLKXP发送时钟极性位,0表示上升沿发送,1表示下降沿发送。CLKRP接收时钟极性位,0表示下降沿接收,1表示在上升沿接收。

DRR1和DRR2数据接收寄存器,DXR1和DXR2数据发送寄存器。

SPCR1串行端口控制寄存器1:如果串行字长度为16位或更小,则DR引脚接收数据的流程:从DR管脚进来的数据会先存放在RSR数据接收移位寄存器,直到RSR寄存器存满了一个串行字,这个串行字才会被发往RBR数据接收缓冲寄存器,最后发送到DRR数据接收寄存器,RSR和RBR不可供用户访问。DX管脚同理,把一个或多个串行字当成一个组来进行传输,称为帧。DLB表示数字回环模式位,0表示禁用,数字回环模式是直接将发送和接收连接起来,使用单个DSP测试代码。

RCR1接收控制寄存器1:RWDLEN1接收字长1,每个接收数据帧可以有一个或两个,取决于加载到RPHASE位的值,如果选择单相帧,则RCR1中的RWDLEN1选择帧中接收到的每个串行字的长度,0表示8位。RCR2接收控制寄存器2:RPHASE接收相位数,0表示接收帧只有一个相位。RWDLEN2接收字长2。

XCR1发送控制寄存器1:XWDLEN1发送字长1,0表示8位。XCR2发送控制寄存器2:XPHASE发送相位数,0表示发送帧只有一个相位。XDATDLY和RDATDLY表示帧的延时位,帧的开始一般是帧同步处于激活状态后的第一个时钟周期,但实际数据的接收和发送的开始可以有必要的延迟,0表示无延迟,1表示1位数据延迟。

SRGR采样率发生器寄存器1:CLKGDV分频、SCLKME=0,CLKSM=1,选择内部低速时钟经过分频后作为CLKG时钟。GSYNC(CLKG的时钟同步模式位),仅当采样率发生器的输入时钟源为外部MCLKR管脚时有用。CLKSM采样率发生器输入时钟模式位。FSGM采样率发生器发送帧同步模式位,同步位可以从FSX引脚(FSXM=0)或从McBSP内部(FSXM=1)进行帧同步。当FSXM=1时,FSGM位确定McBSP如何提供帧同步脉冲。

SPI发送数据的流程:首先程序向发送数据缓冲寄存器SPITXBUF写入数据,如果此时数据移位寄存器SPIDAT为空,则SPITXBUF将需要发送的完整数据传输给SPIDAT,数据在SPITXBUF寄存器和SPIDAT寄存器内存放都是左对齐的,也就是从高位开始存储。SPIDAT经过每一个时钟脉冲,完成一位数据的发送或者接收。假设在时钟脉冲的上升沿时,SPIDAT将数据的最高位发送出去,然后将剩余的所有数据左移一位,接下来,在时钟脉冲的下降沿时,SPIDAT锁存移位数据,并保存至其最低位。当发送完指定位数的数据后,SPIDAT寄存器将其内部的数据发送给数据接收缓冲寄存器SPIRXBUF,等待CPU来读取。数据在SPIRXBUF中存放是右对齐的,也就是从低位开始存储。

将McBSP配置为SPI模式,一般只需要配置发送时钟极性CLKXP,不需要关心接收时钟极性。当McBSP被配置为时钟停止模式时,发送器和接收器在内部是同步的,发送数据帧时钟FSX用作从使能SS,发送数据位时钟CLKX用作SCK,接收数据位时钟CLKR和接收数据帧时钟FSR在内部与CLKX和FSX是相连的。

FSX配置为输出(FSXM=1)并连接到从设备上的从设备使能SS输入,在管脚复用模式下,每个单元的数据发送寄存器DXR到数据发送移位寄存器XSR传输产生从设备使能FSX,因此为了在SPI主设备模式下接收一个单元,McBSP必须同时发送一个单元(写DXR),以便产生必须的从设备使能FSX。

在McBSP开始将数据移位输出到DX引脚之前,FSX需要声明为低电平,以便使能从设备。因此,在复用模式下,XDATDLY和RDATDLY位必须编程为1,当McBSP为SPI主设备时,XDATDLY的值为0或2会产生不确定的操作,并且RDATDLY的值为0会使接收的数据移位不正确。作为SPI从设备时,McBSP的(R/X)CR寄存器中的(R/X)DATDLY位必须设置为0,以保证发送的第一个数据能够出现在DX引脚上。

MCBSP默认为最高位先发送,但是对于一些固定的8bits传输协议,需要先发送最低位的数据,则McBSP可以通过设置XCR2的XCOMPAND为01,则8bits的数据在通过串行口发送前将会被翻转,这样发送数据时就变成低位优先发送。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值