TI论坛
直播中

陈萌

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

请问VC5502 MCBSP配置为SPI接口后发送数据的最后2位只要是以二进制10结尾(2,6,a, e)的数据均会变成11是为什么?

问题如标题所述,我需要和CH374U通讯,ch374u读写时序是每次3个字节分别是ADDRESS + READ_CMD + xxxx,ADRESS + WRITE_CMD + WRITE_DATA,我配置mcbsp为spi, 单相,单帧,每帧24位。
一下是我的mcbsp的配置:
#define CFG_MCBSP_AS_SPI
[
MCBSP_SPCR1_RMK(
MCBSP_SPCR1_DLB_OFF,
MCBSP_SPCR1_RJUST_RZF,
MCBSP_SPCR1_CLKSTP_NODELAY,
MCBSP_SPCR1_DXENA_OFF,
MCBSP_SPCR1_ABIS_DISABLE,
MCBSP_SPCR1_RINTM_RRDY,
MCBSP_SPCR1_RSYNCERR_NO,
MCBSP_SPCR1_RRST_DISABLE
),
MCBSP_SPCR2_RMK(
MCBSP_SPCR2_FREE_YES,
MCBSP_SPCR2_SOFT_YES,
MCBSP_SPCR2_FRST_RESET,
MCBSP_SPCR2_GRST_RESET,
MCBSP_SPCR2_XINTM_XRDY,
MCBSP_SPCR2_XSYNCERR_NO,
MCBSP_SPCR2_XRST_DISABLE
),
MCBSP_RCR1_RMK(
MCBSP_RCR1_RFRLEN1_OF(0),
MCBSP_RCR1_RWDLEN1_24BIT
),
MCBSP_RCR2_RMK(
MCBSP_RCR2_RPHASE_SINGLE,
MCBSP_RCR2_RFRLEN2_OF(0),
MCBSP_RCR2_RWDLEN2_8BIT,
MCBSP_RCR2_RCOMPAND_MSB,
MCBSP_RCR2_RFIG_YES,
MCBSP_RCR2_RDATDLY_1BIT
),
MCBSP_XCR1_RMK(
MCBSP_XCR1_XFRLEN1_OF(0),
MCBSP_XCR1_XWDLEN1_24BIT
),
MCBSP_XCR2_RMK(
MCBSP_XCR2_XPHASE_SINGLE,
MCBSP_XCR2_XFRLEN2_OF(0),
MCBSP_XCR2_XWDLEN2_8BIT,
MCBSP_XCR2_XCOMPAND_MSB,
MCBSP_XCR2_XFIG_YES,
MCBSP_XCR2_XDATDLY_1BIT
),
MCBSP_SRGR1_RMK(
MCBSP_SRGR1_FWID_OF(2),
MCBSP_SRGR1_CLKGDV_OF(9)
),
MCBSP_SRGR2_RMK(
MCBSP_SRGR2_GSYNC_FREE,
MCBSP_SRGR2_CLKSP_RISING,
MCBSP_SRGR2_CLKSM_INTERNAL,
MCBSP_SRGR2_FSGM_DXR2XSR,
MCBSP_SRGR2_FPER_OF(26)
),
MCBSP_MCR1_DEFAULT,
MCBSP_MCR2_DEFAULT,
MCBSP_PCR_RMK(
MCBSP_PCR_XIOEN_SP,
MCBSP_PCR_RIOEN_SP,
MCBSP_PCR_FSXM_INTERNAL,
MCBSP_PCR_FSRM_INTERNAL,
MCBSP_PCR_CLKXM_OUTPUT,
MCBSP_PCR_CLKRM_OUTPUT,
MCBSP_PCR_SCLKME_NO,
MCBSP_PCR_DXSTAT_0,
MCBSP_PCR_FSXP_ACtiVELOW,
MCBSP_PCR_FSRP_ACTIVELOW,
MCBSP_PCR_CLKXP_RISING,
MCBSP_PCR_CLKRP_FALLING
),
MCBSP_RCERA_DEFAULT,
MCBSP_RCERB_DEFAULT,
MCBSP_RCERC_DEFAULT,
MCBSP_RCERD_DEFAULT,
MCBSP_RCERE_DEFAULT,
MCBSP_RCERF_DEFAULT,
MCBSP_RCERG_DEFAULT,
MCBSP_RCERH_DEFAULT,
MCBSP_XCERA_DEFAULT,
MCBSP_XCERB_DEFAULT,
MCBSP_XCERC_DEFAULT,
MCBSP_XCERD_DEFAULT,
MCBSP_XCERE_DEFAULT,
MCBSP_XCERF_DEFAULT,
MCBSP_XCERG_DEFAULT,
MCBSP_XCERH_DEFAULT
]
以下是我的读写函数:
UINT32 spi_read(void)
[
while(!MCBSP_rrdy(mcbsp_handle))
;
return MCBSP_read32(mcbsp_handle);
]
void spi_write(const UINT32 data)
[
while(!MCBSP_xrdy(mcbsp_handle))
;
MCBSP_write32(mcbsp_handle, data);
]
调试图如下:

回帖(4)

李波

2018-7-27 08:53:15
SPI_read函数里不是应该先做一个SPI_write的操作么?不然SPI没有时钟啊,还是说你的相关程序没有全贴上来?
                                                                         http://processors.wiki.ti.com/index.php/Main_Page
Think Over Before Asking.
http://www.catb.org/~esr/faqs/smart-questions.html#goal
举报

陈萌

2018-7-27 09:13:12
引用: lifei639156 发表于 2018-7-27 08:53
SPI_read函数里不是应该先做一个SPI_write的操作么?不然SPI没有时钟啊,还是说你的相关程序没有全贴上来?
                                                                         http://processors.wiki.ti.com/index.php/Main_Page
Think Over Before Asking.

unsigned char ch374_read(const unsigned char addr)
[
UINT32 val = 0;
UINT32 ret = 0;
val = ((((UINT32)addr) << 16u) | (((UINT32)READ_CMD) << 8u));
spi_write(val);
ret = spi_read();
return (unsigned char)(ret & 0xFF);
]
void ch374_write(const unsigned char addr, const unsigned char data)
[
UINT32 val = 0;
val = ((((UINT32)addr) << 16u) | (((UINT32)WRITE_CMD) << 8u) | (((UINT32)data) & 0xFF));
spi_write(val);
spi_read();
]
你是说以上代码吗?
举报

陈萌

2018-7-27 09:23:48
引用: lifei639156 发表于 2018-7-27 08:53
SPI_read函数里不是应该先做一个SPI_write的操作么?不然SPI没有时钟啊,还是说你的相关程序没有全贴上来?
                                                                         http://processors.wiki.ti.com/index.php/Main_Page
Think Over Before Asking.

之前几天尝试将CLKG调到3.5MHz,后结果成功了,但是后来问题又出现了,代码没有变更。
举报

李波

2018-7-27 09:31:27
引用: xtl1117 发表于 2018-7-27 09:23
之前几天尝试将CLKG调到3.5MHz,后结果成功了,但是后来问题又出现了,代码没有变更。

可能是时钟极性不对,换一下采数的上升沿/下降沿设置试试。
                                                                         http://processors.wiki.ti.com/index.php/Main_Page
Think Over Before Asking.
http://www.catb.org/~esr/faqs/smart-questions.html#goal
举报

更多回帖

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