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.

TMS320C6713B: MCBSP的spi模式通信被中断4打断

Part Number: TMS320C6713B

TI工程师:

      你好,我再使用MCBSP配置成spi主模式和另一个spi的从芯片通信时,配置如下:

/* Serial Port Control Register (SPCR) */
MCBSP_SPCR_RMK(

//时钟持续
MCBSP_SPCR_FREE_YES, 
//仿真 断点时钟不中断
MCBSP_SPCR_SOFT_NO,
//暂时设置Fram cs复位
MCBSP_SPCR_FRST_YES, 
//暂时设置速率生成器复位
MCBSP_SPCR_GRST_YES, 

MCBSP_SPCR_XINTM_XRDY,
//暂时写0 关于错误的
MCBSP_SPCR_XSYNCERR_NO,
//暂时复位一下
MCBSP_SPCR_XRST_YES,

//不回环
MCBSP_SPCR_DLB_OFF,

//不使用符号扩展或者校验
MCBSP_SPCR_RJUST_RZF,

MCBSP_SPCR_CLKSTP_DELAY,
//保持例程设定
MCBSP_SPCR_DXENA_OFF,
MCBSP_SPCR_RINTM_RRDY,
//保持例程设定
MCBSP_SPCR_RSYNCERR_NO,
//复位
MCBSP_SPCR_RRST_YES

),

/* Receive Control Register (RCR) */
MCBSP_RCR_RMK(

//单相
MCBSP_RCR_RPHASE_SINGLE, 

//单相 单数据
MCBSP_RCR_RFRLEN2_OF(0), 

//32bits接收
MCBSP_RCR_RWDLEN2_32BIT,
//MSB first
MCBSP_RCR_RCOMPAND_MSB,
//忽略frame
MCBSP_RCR_RFIG_YES, 
MCBSP_RCR_RDATDLY_1BIT,
//1word
MCBSP_RCR_RFRLEN1_OF(1), 
//32bit
MCBSP_RCR_RWDLEN1_32BIT,
//不涉及,保持例程设定
MCBSP_RCR_RWDREVRS_DISABLE
),

/* Transmit Control Register (XCR) */
MCBSP_XCR_RMK(

//signal phase
MCBSP_XCR_XPHASE_SINGLE,
//1word
MCBSP_XCR_XFRLEN2_OF(0),
//不用p2 但是暂且改成32
MCBSP_XCR_XWDLEN2_32BIT, 
//msb first
MCBSP_XCR_XCOMPAND_MSB, 
//忽略unexpected frame pluse
MCBSP_XCR_XFIG_YES,
//delay 1
MCBSP_XCR_XDATDLY_1BIT, 

//1word
MCBSP_XCR_XFRLEN1_OF(1),
//8bit
MCBSP_XCR_XWDLEN1_32BIT, 

//不涉及,保持原设置
MCBSP_XCR_XWDREVRS_DISABLE 

),

/*serial port sample rate generator register(SRGR) */
MCBSP_SRGR_RMK(
//保持原设定,不需要FSR同步
MCBSP_SRGR_GSYNC_FREE,
//不使用clks,不涉及
MCBSP_SRGR_CLKSP_RISING,
//CPU产生分频
MCBSP_SRGR_CLKSM_INTERNAL,

//每次DXR2XSR copy时产生一次fram 即 cs
MCBSP_SRGR_FSGM_DXR2XSR,
//忽略
MCBSP_SRGR_FPER_OF(63),
//忽略
MCBSP_SRGR_FWID_OF(31),

MCBSP_SRGR_CLKGDV_OF(60)
),

MCBSP_MCR_DEFAULT, /* Using default value of MCR register */
MCBSP_RCER_DEFAULT,/* Using default value of RCER register */
MCBSP_XCER_DEFAULT,/* Using default value of XCER register */

/* serial port pin control register(PCR) */
MCBSP_PCR_RMK(

//管脚配置为串口功能,非GPIO
MCBSP_PCR_XIOEN_SP, 
//配置为串口功能,非GPIO
MCBSP_PCR_RIOEN_SP, 
//内部产生fsx
MCBSP_PCR_FSXM_INTERNAL,

//内部产生
MCBSP_PCR_FSRM_INTERNAL,
//CLKX输出
MCBSP_PCR_CLKXM_OUTPUT,
//非回环模式,虽然CLKRM不用,但是暂且设置输出
MCBSP_PCR_CLKRM_OUTPUT,
MCBSP_PCR_CLKSSTAT_0, 

MCBSP_PCR_DXSTAT_0,
//低有效
MCBSP_PCR_FSXP_ACTIVELOW,
//低有效
MCBSP_PCR_FSRP_ACTIVELOW, 

MCBSP_PCR_CLKXP_RISING, 
MCBSP_PCR_CLKXP_RISING
)

麻烦查看一下配置是否正确,目前只使用spi通信正常,但是一但中断4一触发就会导致通信异常,spi收发的数据都不正确了,请问有什么方式能解决吗?

  • 您好,

    根据您提供的代码配置,以下是一些可能导致通信异常的问题和解决方法:

    1. 中断触发导致通信异常:中断触发时,可能会干扰SPI通信的时序或数据传输。您可以尝试在中断处理程序中禁用或延迟中断触发,以确保SPI通信正常进行。您可以使用延迟函数或者在中断触发后重新配置SPI控制寄存器来解决这个问题。

    2. 时钟配置问题:SPI通信的时钟配置非常重要。请确保主从设备之间的时钟配置是一致的,包括时钟极性、时钟相位和时钟频率。如果时钟配置不正确,会导致数据传输错误。请仔细检查您的时钟配置是否正确,并与从设备的时钟配置进行匹配。

    3. 数据长度配置问题:SPI通信的数据长度配置也非常重要。请确保主从设备之间的数据长度配置是一致的,包括帧长度、字长和字节顺序。如果数据长度配置不正确,会导致数据传输错误或解析错误。请仔细检查您的数据长度配置是否正确,并与从设备的数据长度配置进行匹配。

    4. 引脚配置问题:请确保SPI通信的引脚配置正确。检查您的引脚配置是否与硬件连接一致,并确保引脚功能正确设置为SPI功能而不是GPIO功能。

    5. 错误处理:在SPI通信中,错误处理非常重要。请确保您的代码能够正确处理错误情况,例如超时、传输错误或其他异常情况。您可以使用错误标志或状态寄存器来检测和处理这些错误。

    如果您已经检查了上述问题并且仍然遇到通信异常,建议您使用示波器或逻辑分析仪来监视SPI信号并检查时序和数据传输是否正确。这将帮助您进一步分析和解决问题。

  • 你好,配置没有问题,没有触发中断4的时候通信一切正常,且出现问题的时候示波器波形量取MISO和MOSI的波形都是有数据,且数据正确,最后添加调试信息发现,上一次的数据,再下一次spi通信时返回了,且数据正确。相当于读数时会慢一拍从DRR寄存器读取到。

  • 您好,

    根据您的描述,问题可能是在SPI通信中出现了数据延迟的情况。当没有触发中断4时,通信正常,但当触发中断4时,读取数据会有延迟。

    这种情况可能是由于以下原因之一导致的:

    1. 中断处理程序的执行时间较长:
    - 当中断4触发时,可能会触发中断处理程序,如果中断处理程序的执行时间较长,可能会导致SPI通信的延迟。建议优化中断处理程序的执行时间,尽量减少其中的延迟操作。

    2. 总线竞争或冲突:
    - 当中断4触发时,可能会导致总线竞争或冲突,从而导致SPI通信的延迟。您可以检查其他设备或模块是否在同一总线上使用,并确保适当的总线访问协议和优先级。

    3. 时序问题:
    - SPI通信的时序问题可能导致数据延迟。请确保SPI时钟频率和时序满足设备的要求,并确保正确的数据采样和传输顺序。

    4. 软件配置问题:
    - 检查SPI控制器的配置参数,例如时钟相位、极性和数据位顺序等,确保与设备的要求匹配。

    为了进一步调试和解决问题,您可以尝试以下操作:

    1. 检查中断处理程序:
    - 优化中断处理程序的执行时间,确保其尽可能快速地完成,避免可能引起延迟的操作。

    2. 检查总线竞争或冲突:
    - 检查其他设备或模块是否在同一总线上使用,并确保适当的总线访问协议和优先级。

    3. 检查SPI时序和配置:
    - 确保SPI时钟频率和时序满足设备的要求,并检查SPI控制器的配置参数是否正确。

    4. 调试时序问题:
    - 使用示波器或逻辑分析仪检查SPI信号的时序,确保数据采样和传输顺序正确。