TMS320F28335中,将MCBSP配置为SPI从模式,怎么在一个同步帧中发送或接收多个字节??我现在的配置中,每个同步帧有效的时间内只能发送或接收一个字节内容,之后即使同步帧继续有效,DSP也不发送和接收数据了,请问该怎么设置,使的在同步帧为低的过程中,只要有时钟,就可以不停的发送数据和接收数据?谢谢!
我的MCBSP配置内容如下,用接收中断接收数据,每次接收8bit数据:
{ // McBSP-A register settings config as spi-slaveMcbspaRegs.SPCR2.bit.XRST=0; // Reset FS generator, sample rate generator & transmitter McbspaRegs.SPCR1.bit.RRST=0; // Reset Receiver, Right justify word McbspaRegs.SPCR2.bit.GRST = 0; //复位取样率发送器 McbspaRegs.SPCR1.bit.DLB = 0;//禁止回送 // McbspaRegs.SPCR1.bit.DLB = 1;// Enable loopback mode for test. Comment out for normal McBSP transfer mode. McbspaRegs.MFFINT.all=0x4; // 使能接收中断 McbspaRegs.SPCR1.bit.RINTM=0; //RRDY(SPCR1[1])从0变为1时产生接收中断(RINT)请求 //Add on 20140729 McbspaRegs.SPCR1.bit.CLKSTP = 2;// SPI模式 不延时 McbspaRegs.PCR.bit.CLKXP = 0; McbspaRegs.PCR.bit.CLKRP = 0; // 上升沿发送 下降沿接收 McbspaRegs.PCR.bit.CLKXM = 0; //SPI从模式 McbspaRegs.PCR.bit.SCLKME = 0; //时钟为lspclk McbspaRegs.SRGR2.bit.CLKSM = 1; McbspaRegs.SRGR1.bit.CLKGDV= 0x01;//配置为从模式时此位要为1 // McbspaRegs.SRGR1.bit.CLKGDV= 0x0063;//波特率:1.5M,20140525——yxy.原来为:0x7C; //300k..1.2M/////1.1MHz...0X87 McbspaRegs.PCR.bit.FSXM = 0; //发送帧同步由GSGM of SRGR2决定 // McbspaRegs.SRGR2.bit.FSGM = 0;//当数据由dxr到xsr寄存器时产生发送帧 CLKSM=1, FPER = 1 CLKG periodsMcbspaRegs.PCR.bit.FSXP = 1; //帧同步低有效McbspaRegs.RCR2.bit.RDATDLY=0;// 接收1bit 延时 FSX setup time 1 in master mode. 0 for slave mode (Receive)McbspaRegs.XCR2.bit.XDATDLY=0;// FSX setup time 1 in master mode. 0 for slave mode (Transmit) McbspaRegs.SPCR1.bit.RJUST = 0; //右对齐 高位补充0 McbspaRegs.RCR1.bit.RWDLEN1=0;// 16-bit word--2// 8-bit word--0McbspaRegs.XCR1.bit.XWDLEN1=0;// 16-bit word--2// 8-bit word--0McbspaRegs.RCR2.bit.RCOMPAND=0; //无压缩扩展,8位数据,先传送高位McbspaRegs.XCR2.bit.XCOMPAND=0; //无压缩扩展,8位数据,先传送高位McbspaRegs.SPCR2.bit.GRST=1;// Enable the sample rate generator delay_loop();// Wait at least 2 SRG clock cycles McbspaRegs.SPCR2.bit.XRST=1;// Release TX from Reset McbspaRegs.SPCR1.bit.RRST=1;// Release RX from ResetMcbspaRegs.SPCR2.bit.FRST=1;// Frame Sync Generator reset }
Eric Ma:
SPI发送和接收是同时的,写一个字节的同时,也是接收一个字节。如果要让它持续接收,可以让SPI写一个无效的数据,并通过TACK位禁止该无效数据出现在发送端。
另外也可尝试打开FIFO的方式。
Eric
TMS320F28335中,将MCBSP配置为SPI从模式,怎么在一个同步帧中发送或接收多个字节??我现在的配置中,每个同步帧有效的时间内只能发送或接收一个字节内容,之后即使同步帧继续有效,DSP也不发送和接收数据了,请问该怎么设置,使的在同步帧为低的过程中,只要有时钟,就可以不停的发送数据和接收数据?谢谢!
我的MCBSP配置内容如下,用接收中断接收数据,每次接收8bit数据:
{ // McBSP-A register settings config as spi-slaveMcbspaRegs.SPCR2.bit.XRST=0; // Reset FS generator, sample rate generator & transmitter McbspaRegs.SPCR1.bit.RRST=0; // Reset Receiver, Right justify word McbspaRegs.SPCR2.bit.GRST = 0; //复位取样率发送器 McbspaRegs.SPCR1.bit.DLB = 0;//禁止回送 // McbspaRegs.SPCR1.bit.DLB = 1;// Enable loopback mode for test. Comment out for normal McBSP transfer mode. McbspaRegs.MFFINT.all=0x4; // 使能接收中断 McbspaRegs.SPCR1.bit.RINTM=0; //RRDY(SPCR1[1])从0变为1时产生接收中断(RINT)请求 //Add on 20140729 McbspaRegs.SPCR1.bit.CLKSTP = 2;// SPI模式 不延时 McbspaRegs.PCR.bit.CLKXP = 0; McbspaRegs.PCR.bit.CLKRP = 0; // 上升沿发送 下降沿接收 McbspaRegs.PCR.bit.CLKXM = 0; //SPI从模式 McbspaRegs.PCR.bit.SCLKME = 0; //时钟为lspclk McbspaRegs.SRGR2.bit.CLKSM = 1; McbspaRegs.SRGR1.bit.CLKGDV= 0x01;//配置为从模式时此位要为1 // McbspaRegs.SRGR1.bit.CLKGDV= 0x0063;//波特率:1.5M,20140525——yxy.原来为:0x7C; //300k..1.2M/////1.1MHz...0X87 McbspaRegs.PCR.bit.FSXM = 0; //发送帧同步由GSGM of SRGR2决定 // McbspaRegs.SRGR2.bit.FSGM = 0;//当数据由dxr到xsr寄存器时产生发送帧 CLKSM=1, FPER = 1 CLKG periodsMcbspaRegs.PCR.bit.FSXP = 1; //帧同步低有效McbspaRegs.RCR2.bit.RDATDLY=0;// 接收1bit 延时 FSX setup time 1 in master mode. 0 for slave mode (Receive)McbspaRegs.XCR2.bit.XDATDLY=0;// FSX setup time 1 in master mode. 0 for slave mode (Transmit) McbspaRegs.SPCR1.bit.RJUST = 0; //右对齐 高位补充0 McbspaRegs.RCR1.bit.RWDLEN1=0;// 16-bit word--2// 8-bit word--0McbspaRegs.XCR1.bit.XWDLEN1=0;// 16-bit word--2// 8-bit word--0McbspaRegs.RCR2.bit.RCOMPAND=0; //无压缩扩展,8位数据,先传送高位McbspaRegs.XCR2.bit.XCOMPAND=0; //无压缩扩展,8位数据,先传送高位McbspaRegs.SPCR2.bit.GRST=1;// Enable the sample rate generator delay_loop();// Wait at least 2 SRG clock cycles McbspaRegs.SPCR2.bit.XRST=1;// Release TX from Reset McbspaRegs.SPCR1.bit.RRST=1;// Release RX from ResetMcbspaRegs.SPCR2.bit.FRST=1;// Frame Sync Generator reset }
风孩儿:
回复 Eric Ma:
您好,Eric Ma!
具体情况是这样的,SPI主站的开发板是别人的,我无法改动,主站给的SPI时钟和片选使能信号如下图所示:
发送15个8bit的过程中,SS一直保持低电平有效状态,直到发完15组数后才拉高。而MCBSP配置的SPI中,配置文件要求一帧只能包含一个数据字:
McbspaRegs.XCR1.bit.XFRLEN1=0; McbspaRegs.RCR1.bit.RFRLEN1=0; //每一帧一个数据字
在SS变低有效后只发送和接收一个数据字(此时为8bit)。我想问在不改变主站配置的情况下,怎么配置MCBSP为SPI从站,使得它可以按照SPI协议在一个同步帧有效的过程中连续接收并发送15个8bit的数据?谢谢!