TI论坛
直播中

庞哲

7年用户 192经验值
私信 关注
[问答]

请教关于McBSP配置SPI主/从模式的数据收发问题

使用场景是一片C6416和一片C6713通过McBSP相连接
C6416配置McBSP为SPI主模式,C6713配置McBSP为SPI从模式
C6416一直进行数据发送,但是C6713的rrdy一直没有信号,也就是无法读取SPI的DRR数据
用示波器测量了C6416的时钟、片选、数据,都是正常的
请问这是什么问题?

回帖(9)

庞哲

2018-7-25 09:49:23
C6416的McBSP配置如下
void init_mcbsp(MCBSP_Handle handle)[    Uint32 spcr, rcr, xcr, srgr, mcr, pcr;    Uint32 rcere0, rcere1, rcere2, rcere3;    Uint32 xcere0, xcere1, xcere2, xcere3;    /* SPI mode, CLKSTP = 11b and CLKXP = 0: Clock starts with rising edge with delay. */    spcr = MCBSP_SPCR_RMK(           MCBSP_SPCR_FREE_DEFAULT,           MCBSP_SPCR_SOFT_DEFAULT,           MCBSP_SPCR_FRST_DEFAULT,           MCBSP_SPCR_GRST_DEFAULT,           MCBSP_SPCR_XINTM_DEFAULT,           MCBSP_SPCR_XSYNCERR_DEFAULT,           MCBSP_SPCR_XRST_DEFAULT,           MCBSP_SPCR_DLB_DEFAULT,           MCBSP_SPCR_RJUST_DEFAULT,           MCBSP_SPCR_CLKSTP_DELAY,         /* CLKSTP = 11b */           MCBSP_SPCR_DXENA_OFF,           MCBSP_SPCR_RINTM_DEFAULT,           MCBSP_SPCR_RSYNCERR_DEFAULT,           MCBSP_SPCR_RRST_DEFAULT           );    rcr =  MCBSP_RCR_RMK(           MCBSP_RCR_RPHASE_SINGLE,           MCBSP_RCR_RFRLEN2_DEFAULT,           MCBSP_RCR_RWDLEN2_DEFAULT,           MCBSP_RCR_RCOMPAND_DEFAULT,           MCBSP_RCR_RFIG_NO,           MCBSP_RCR_RDATDLY_1BIT,          /* 1 - (Master) */           MCBSP_RCR_RFRLEN1_DEFAULT,           MCBSP_RCR_RWDLEN1_32BIT,           MCBSP_RCR_RWDREVRS_DISABLE           );    xcr =  MCBSP_XCR_RMK(           MCBSP_XCR_XPHASE_DEFAULT,           MCBSP_XCR_XFRLEN2_DEFAULT,           MCBSP_XCR_XWDLEN2_DEFAULT,           MCBSP_XCR_XCOMPAND_DEFAULT,           MCBSP_XCR_XFIG_DEFAULT,           MCBSP_XCR_XDATDLY_1BIT,          /* 1 - (Master) */           MCBSP_XCR_XFRLEN1_DEFAULT,           MCBSP_XCR_XWDLEN1_32BIT,           MCBSP_XCR_XWDREVRS_DISABLE           );    srgr = MCBSP_SRGR_RMK(           MCBSP_SRGR_GSYNC_FREE,           MCBSP_SRGR_CLKSP_RISING,           MCBSP_SRGR_CLKSM_INTERNAL,       /* SRGR clock mode from internal source */           MCBSP_SRGR_FSGM_DEFAULT,           MCBSP_SRGR_FPER_DEFAULT,           MCBSP_SRGR_FWID_DEFAULT,           MCBSP_SRGR_CLKGDV_OF(0)          /* C64X: CLKG = CPU/4 / (CLKGDV+1) */           );    mcr =  MCBSP_MCR_DEFAULT;    rcere0 = MCBSP_RCERE0_RMK(0);    rcere1 = MCBSP_RCERE1_RMK(0);    rcere2 = MCBSP_RCERE2_RMK(0);    rcere3 = MCBSP_RCERE3_RMK(0);    xcere0 = MCBSP_XCERE0_RMK(0);    xcere1 = MCBSP_XCERE1_RMK(0);    xcere2 = MCBSP_XCERE2_RMK(0);    xcere3 = MCBSP_XCERE3_RMK(0);    pcr =  MCBSP_PCR_RMK(           MCBSP_PCR_XIOEN_SP,           MCBSP_PCR_RIOEN_SP,           MCBSP_PCR_FSXM_INTERNAL,         /* SS output (Master) */           MCBSP_PCR_FSRM_EXTERNAL,           MCBSP_PCR_CLKXM_OUTPUT,          /* TX CLK output (Master) */           MCBSP_PCR_CLKRM_INPUT,           MCBSP_PCR_CLKSSTAT_0,           MCBSP_PCR_DXSTAT_0,           MCBSP_PCR_FSXP_ACTIVELOW,        /* SS polarity: Valid when SS goes low */           MCBSP_PCR_FSRP_ACTIVELOW,           MCBSP_PCR_CLKXP_RISING,          /* TX CLK polarity: Sampling at rising edge of clock */           MCBSP_PCR_CLKRP_FALLING           );    MCBSP_configArgs(handle, spcr, rcr, xcr, srgr, mcr, rcere0, rcere1,                     rcere2, rcere3, xcere0, xcere1, xcere2, xcere3, pcr);    return;]
举报

余少虹

2018-7-25 10:07:03
因为c6416的发送时序正常,请重点检查一下c6713的SPI slave配置,要跟c6416的时序匹配。
举报

庞哲

2018-7-25 10:21:31
引用: wtrwefsdf 发表于 2018-7-25 09:49
C6416的McBSP配置如下
void init_mcbsp(MCBSP_Handle handle)[    Uint32 spcr, rcr, xcr, srgr, mcr, pcr;    Uint32 rcere0, rcere1, rcere2, rcere3;    Uint32 xcere0, xcere1, xcere2, xcere3;    /* SPI mode, CLKSTP = 11b and CLKXP = 0: Clock starts with rising edge with delay. */    spcr = MCBSP_SPCR_RMK(  ...

C6713的McBSP配置如下
void init_mcbsp(MCBSP_Handle handle)[    Uint32 spcr, rcr, xcr, srgr, mcr, pcr;    Uint32 rcer, xcer;    /* SPI mode, CLKSTP = 11b and CLKXP = 0: Clock starts with rising edge with delay. */    spcr = MCBSP_SPCR_RMK(           MCBSP_SPCR_FREE_DEFAULT,           MCBSP_SPCR_SOFT_DEFAULT,           MCBSP_SPCR_FRST_DEFAULT,           MCBSP_SPCR_GRST_DEFAULT,           MCBSP_SPCR_XINTM_DEFAULT,           MCBSP_SPCR_XSYNCERR_DEFAULT,           MCBSP_SPCR_XRST_DEFAULT,           MCBSP_SPCR_DLB_DEFAULT,           MCBSP_SPCR_RJUST_DEFAULT,           MCBSP_SPCR_CLKSTP_DELAY,         /* CLKSTP = 11b */           MCBSP_SPCR_DXENA_OFF,           MCBSP_SPCR_RINTM_DEFAULT,           MCBSP_SPCR_RSYNCERR_DEFAULT,           MCBSP_SPCR_RRST_DEFAULT           );    rcr =  MCBSP_RCR_RMK(           MCBSP_RCR_RPHASE_SINGLE,           MCBSP_RCR_RFRLEN2_DEFAULT,           MCBSP_RCR_RWDLEN2_DEFAULT,           MCBSP_RCR_RCOMPAND_DEFAULT,           MCBSP_RCR_RFIG_NO,           MCBSP_RCR_RDATDLY_0BIT,          /* 0 - (Slave) */           MCBSP_RCR_RFRLEN1_DEFAULT,           MCBSP_RCR_RWDLEN1_32BIT,           MCBSP_RCR_RWDREVRS_DISABLE           );    xcr =  MCBSP_XCR_RMK(           MCBSP_XCR_XPHASE_DEFAULT,           MCBSP_XCR_XFRLEN2_DEFAULT,           MCBSP_XCR_XWDLEN2_DEFAULT,           MCBSP_XCR_XCOMPAND_DEFAULT,           MCBSP_XCR_XFIG_DEFAULT,           MCBSP_XCR_XDATDLY_0BIT,          /* 0 - (Slave) */           MCBSP_XCR_XFRLEN1_DEFAULT,           MCBSP_XCR_XWDLEN1_32BIT,           MCBSP_XCR_XWDREVRS_DISABLE           );    srgr = MCBSP_SRGR_RMK(           MCBSP_SRGR_GSYNC_FREE,           MCBSP_SRGR_CLKSP_RISING,           MCBSP_SRGR_CLKSM_INTERNAL,       /* SRGR clock mode from internal source */           MCBSP_SRGR_FSGM_DEFAULT,           MCBSP_SRGR_FPER_DEFAULT,           MCBSP_SRGR_FWID_DEFAULT,           MCBSP_SRGR_CLKGDV_OF(0)          /* C671X: CLKG = CPU/2 / (CLKGDV+1) */           );    mcr =  MCBSP_MCR_DEFAULT;    rcer = MCBSP_RCER_DEFAULT;    xcer = MCBSP_XCER_DEFAULT;    pcr =  MCBSP_PCR_RMK(           MCBSP_PCR_XIOEN_SP,           MCBSP_PCR_RIOEN_SP,           MCBSP_PCR_FSXM_EXTERNAL,         /* set SS as input - (Slave) */           MCBSP_PCR_FSRM_EXTERNAL,           MCBSP_PCR_CLKXM_INPUT,           /* set TX CLK as input - (Slave) */           MCBSP_PCR_CLKRM_INPUT,           MCBSP_PCR_CLKSSTAT_0,           MCBSP_PCR_DXSTAT_0,           MCBSP_PCR_FSXP_ACTIVELOW,        /* SS polarity: Valid when SS goes low */           MCBSP_PCR_FSRP_ACTIVELOW,           MCBSP_PCR_CLKXP_RISING,          /* TX CLK polarity: Sampling at rising edge of clock */           MCBSP_PCR_CLKRP_FALLING           );    MCBSP_configArgs(handle, spcr, rcr, xcr, srgr, mcr, rcer, xcer, pcr);    return;]
举报

余少虹

2018-7-25 10:33:30
引用: wtrwefsdf 发表于 2018-7-25 10:21
C6713的McBSP配置如下
void init_mcbsp(MCBSP_Handle handle)[    Uint32 spcr, rcr, xcr, srgr, mcr, pcr;    Uint32 rcer, xcer;    /* SPI mode, CLKSTP = 11b and CLKXP = 0: Clock starts with rising edge with delay. */    spcr = MCBSP_SPCR_RMK(           MCBSP_SPCR_FREE_DEFAULT,           MCBSP_SPCR_SOFT_D ...

寄存器配置基本对的,把c6713B的CLKGDV 设成1试试。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分