请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28335 您好、
我的客户正在尝试将28335的 McBSP 配置为 SPI 从器件。
他解决了从 McBSP SPI 从器件发送的数据无法满足时钟的上升沿的问题。

配置代码如下:
SPIC_COMMU_REGS.SPCR2.all = 0x0000 ;
SPIC_COMMU_REGS.SPCR1.all = 0x0000 ;
SPIC_COMMU_REGS.SPCR2.bit.GRST = 0 ;
SPIC_COMMU_REGS.SPCR1.bit.CLKSTP = 2 ;
SPIC_COMMU_REGS.SPCR1.bit.DLB = 0 ;
SPIC_COMMU_REGS.SPCR1.bit.RINTM = 0 ;
SPIC_COMMU_REGS.PCR.bit.CLKXP = 0 ;
SPIC_COMMU_REGS.PCR.bit.CLKXM = 0 ; //作为从机
SPIC_COMMU_REGS.PCR.bit.SCLKME = 0 ;
SPIC_COMMU_REGS.SRGR2.bit.CLKSM= 1 ; //用低速时钟
SPIC_COMMU_REGS.SRGR1.bit.CLKGDV = 1;//2分频
SPIC_COMMU_REGS.PCR.bit.FSXM = 0; // The FSX pin is an input pin.
SPIC_COMMU_REGS.PCR.bit.FSXP = 1 ; // The FSX pin is active low.
SPIC_COMMU_REGS.PCR.bit.CLKRM = 0 ;
SPIC_COMMU_REGS.PCR.bit.FSRM = 0 ;
SPIC_COMMU_REGS.XCR2.bit.XDATDLY =0 ;
SPIC_COMMU_REGS.RCR2.bit.RDATDLY =0 ;
SPIC_COMMU_REGS.MFFINT.bit.RINT = 1 ;
SPIC_COMMU_REGS.MFFINT.bit.XINT = 0 ;
SPIC_COMMU_REGS.RCR2.bit.RPHASE = 0 ;//接收单相
SPIC_COMMU_REGS.XCR2.bit.XPHASE = 0 ;//发送 单相
SPIC_COMMU_REGS.RCR2.bit.RFIG = 0 ;//发送 帧不忽略
SPIC_COMMU_REGS.XCR2.bit.XFIG = 0 ;//发送 帧不忽略
SPIC_COMMU_REGS.RCR1.bit.RWDLEN1 = 5 ;//接收 word length 32 bits
SPIC_COMMU_REGS.XCR1.bit.XWDLEN1 = 5 ;//发送 word length 32 bits
SPIC_COMMU_REGS.RCR1.bit.RFRLEN1 = 0 ;//接收 frame length 4 word
SPIC_COMMU_REGS.XCR1.bit.XFRLEN1 = 0 ;//发送 frame length 4 word
SPIC_COMMU_REGS.SPCR2.bit.GRST =1 ;//enable the sample rate generator
for(i = 0 ; i < 10 ; i++); // Wait at least 2 SRG clock cycles
SPIC_COMMU_REGS.SPCR2.bit.XRST =1 ; // enable the transmitter
SPIC_COMMU_REGS.SPCR1.bit.RRST =1 ; //enable the receiver
SPIC_COMMU_REGS.SPCR2.bit.FRST =1 ; //enable the frame-synchronization logic
PS: spic_commu_REGS 是 McbspXRegs 的重命名
然后、他尝试通过将 SPCR1.bit.CLKSTP 更改为3并将 SRGR1.bit.CLKGDV 更改为9来解决此问题。 但他遇到了 数据宽度无法满足时钟要求的问题。

配置代码如下:
SPIC_COMMU_REGS.SPCR2.all = 0x0000 ;
SPIC_COMMU_REGS.SPCR1.all = 0x0000 ;
SPIC_COMMU_REGS.SPCR2.bit.GRST = 0 ;
SPIC_COMMU_REGS.SPCR1.bit.CLKSTP = 3 ;
SPIC_COMMU_REGS.SPCR1.bit.DLB = 0 ;
SPIC_COMMU_REGS.SPCR1.bit.RINTM = 0 ;
SPIC_COMMU_REGS.PCR.bit.CLKXP = 0 ;
SPIC_COMMU_REGS.PCR.bit.CLKXM = 0 ; //作为从机
SPIC_COMMU_REGS.PCR.bit.SCLKME = 0 ;
SPIC_COMMU_REGS.SRGR2.bit.CLKSM= 1 ; //用低速时钟
SPIC_COMMU_REGS.SRGR1.bit.CLKGDV = 9;//,10分频
SPIC_COMMU_REGS.PCR.bit.FSXM = 0; // The FSX pin is an input pin.
SPIC_COMMU_REGS.PCR.bit.FSXP = 1 ; // The FSX pin is active low.
SPIC_COMMU_REGS.PCR.bit.CLKRM = 0 ;
SPIC_COMMU_REGS.PCR.bit.FSRM = 0 ;
SPIC_COMMU_REGS.XCR2.bit.XDATDLY =0 ;
SPIC_COMMU_REGS.RCR2.bit.RDATDLY =0 ;
SPIC_COMMU_REGS.MFFINT.bit.RINT = 1 ;
SPIC_COMMU_REGS.MFFINT.bit.XINT = 0 ;
SPIC_COMMU_REGS.RCR2.bit.RPHASE = 0 ;//接收单相
SPIC_COMMU_REGS.XCR2.bit.XPHASE = 0 ;//发送 单相
SPIC_COMMU_REGS.RCR2.bit.RFIG = 0 ;//发送 帧不忽略
SPIC_COMMU_REGS.XCR2.bit.XFIG = 0 ;//发送 帧不忽略
SPIC_COMMU_REGS.RCR1.bit.RWDLEN1 = 5 ;//接收 word length 32 bits
SPIC_COMMU_REGS.XCR1.bit.XWDLEN1 = 5 ;//发送 word length 32 bits
SPIC_COMMU_REGS.RCR1.bit.RFRLEN1 = 0 ;//接收 frame length 4 word
SPIC_COMMU_REGS.XCR1.bit.XFRLEN1 = 0 ;//发送 frame length 4 word
SPIC_COMMU_REGS.SPCR2.bit.GRST =1 ;//enable the sample rate generator
for(i = 0 ; i < 10 ; i++); // Wait at least 2 SRG clock cycles
SPIC_COMMU_REGS.SPCR2.bit.XRST =1 ; // enable the transmitter
SPIC_COMMU_REGS.SPCR1.bit.RRST =1 ; //enable the receiver
SPIC_COMMU_REGS.SPCR2.bit.FRST =1 ; //enable the frame-synchronization logic
PS: spic_commu_REGS 是 McbspXRegs 的重命名
对这一问题有什么建议吗?