This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28335:当 McBSP 被配置为 SPI 从器件时、数据发送与时钟不匹配

Guru**** 2589280 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1286005/tms320f28335-data-transmit-mismatch-with-clock-when-mcbsp-is-configurated-as-spi-slave

器件型号: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 的重命名  

对这一问题有什么建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们目前正在对此主题进行离线讨论、完成后将在此处进行更新。

    此致!

    马修