TI论坛
直播中

蒋美燕

8年用户 967经验值
私信 关注
[问答]

请问C64X 配成一个SPI1主机DSP首次复位运行,SP0输出数据正确,之后SP0发送数据不正确是什么原因?

BCBSP1配置成SP1主机;
MCBSP0配置成SP0从机;
           CLKX1—CLKX0
          FSX1---FSX0
          DX1—DR0
         DR1—DX0
           SP1的接收口DR1连接示波器测试输入数据,  发现DSP首次复位运行,SP0输出数据正确。但之后SP0发送数据不正确(仍然发送上次调试数据),第二发送数据才是正确(发送本次调试的数据)? SP1之后也会发生RFULL错误!?
            [  备注:SP0的接收口DX1连接示波器测试输入数据, 调试都是正确的  ]
while(1)
[
     //SPI0从机发程序准备
     if( ( MCBSP0_SPCR & MCBSP_SPCR_XRDY ) != 0)
    [
        MCBSP0_DXR_8BIT = B0txBEYT;
    ]
    //SPI1主机发程序
    if( ( MCBSP1_SPCR & MCBSP_SPCR_XRDY ) != 0)
    [
       MCBSP1_DXR_8BIT = B1txBEYT;
    ]

_waitusec( 20000 ); //等待发送数据
   //SPI0从机收程序收
   if( ( MCBSP0_SPCR & MCBSP_SPCR_RRDY ) != 0)
   [
       B0rxBEYT = MCBSP0_DRR_8BIT;
   ]

   //SPI1主机收程序收
   if( ( MCBSP1_SPCR & MCBSP_SPCR_RRDY ) != 0)//读后该地址自动清除RRDY
   [
      B1rxBEYT = MCBSP1_DRR_8BIT;
  ]   
     _waitusec( 20 );
]
============================================
今天早上有测试一遍:结果是:
         第一次调试:首次复位工作,第一次彼此收发数据正确;
        第二次调试:第二次收发数据,从机SP0执行MCBSP0_DXR_8BIT = B0txBEYT; 后,并没有将DXR中的数据拷贝到XSR中,因为XEMPTY一直为0;直到主机SP1产生时钟发送完数据后从机SP0才执行DXR中的数据拷贝到XSR中;所以就出错了,第二调试后都不能将数据发送出来??
      

回帖(4)

余少虹

2018-7-25 09:26:08
请问用的是哪款DSP器件?是两块DSP之间的mcbsp0和mcbsp1通信吗?
举报

蒋美燕

2018-7-25 09:33:13
引用: vuywsdfwf 发表于 2018-7-25 09:26
请问用的是哪款DSP器件?是两块DSP之间的mcbsp0和mcbsp1通信吗?

C6424,是的。
      我是把mcbsp0配置成SPI0从机,  mcbsp1配置成SPI1主机;mcbsp0和mcbsp1都是一个DSP上的资源。
举报

蒋美燕

2018-7-25 09:41:10
引用: vuywsdfwf 发表于 2018-7-25 09:26
请问用的是哪款DSP器件?是两块DSP之间的mcbsp0和mcbsp1通信吗?

C6424 DSP(用的是TI 官方demo板:EVM6424);这个板子上有mcbsp0和mcbsp1资源。
          我是把mcbsp0配置成从机为SPI0, mcbsp1配置成主机为SPI1。
-----------------------------------------------------------------------------------------------------
       今天调试,我只配置SPI1主机(且不连接从机SPI0)。
        防止RFULL错误:主机SPI1连续发送数据,每次发生一次数据,都判断是否有收到数据(RRDY),有就读出出来,在发下一个数据。但是发送第3个数据,任然产生RFULL错误?不晓得什么原因?
代码如下:
while(MCBSP1_SPCR&MCBSP_SPCR_XEMPTY);
MCBSP1_DXR_8BIT = *ptrm;
_waitusec( 20 ); //等待发送数据/仿真才有电平数据输出

if( MCBSP1_SPCR & MCBSP_SPCR_RRDY )
[ rm = MCBSP1_DRR_8BIT; ]
while(MCBSP1_SPCR&MCBSP_SPCR_XEMPTY);
MCBSP1_DXR_8BIT = *ptrm;
_waitusec( 20 );
if( MCBSP1_SPCR & MCBSP_SPCR_RRDY )
[ rm = MCBSP1_DRR_8BIT; ]
while(MCBSP1_SPCR&MCBSP_SPCR_XEMPTY);
MCBSP1_DXR_8BIT = *ptrm;
_waitusec( 20 ); //数据发送完成后,发现RFULL错误!!!!!
if( MCBSP1_SPCR & MCBSP_SPCR_RRDY )
[ rm = MCBSP1_DRR_8BIT; ]
while(MCBSP1_SPCR&MCBSP_SPCR_XEMPTY);
MCBSP1_DXR_8BIT = *ptrm;
_waitusec( 20 );
if( MCBSP1_SPCR & MCBSP_SPCR_RRDY )
[ rm = MCBSP1_DRR_8BIT; ]
举报

蒋美燕

2018-7-25 09:46:58
引用: bctwerwer 发表于 2018-7-25 09:41
C6424 DSP(用的是TI 官方demo板:EVM6424);这个板子上有mcbsp0和mcbsp1资源。
          我是把mcbsp0配置成从机为SPI0, mcbsp1配置成主机为SPI1。
-----------------------------------------------------------------------------------------------------

问题已经解决,延迟时间,或判断标志等待。
举报

更多回帖

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