DA14850作为SPI从。主机接收的第三个字节的数据。

5个帖子/ 0新
最后一篇
RALF S.
离线
最后一次露面:4年5个月前
加入:2016年2月16日08:06
DA14850作为SPI从。主机接收的第三个字节的数据。

哈洛,

我已经安装对话框板作为SPI从与另外的流量控制线。当从站发送数据到主,主接收它们在第三字节。除了第一个或其中数据开始于第二个字节,如所预期的板的重新启动后的两个消息。我不使用FIFO缓冲器(SPI_FIFO_MODE = 0×03)。我不知道为什么会这样。调试表明spidrv_buffer_tx保存的数据像它应该做的事情,而不需要额外的零字节。有什么我失踪这里?

该SPI驱动看起来是这样的:

空隙SPI_Handler_RxTx(无效)
{
/ *表示TXRDY无效,以主从=主没有进一步的前台,直到应用程序是准备好了!* /
SPIDRV_TXRDY_L;

/ *表示RXPEND INACTIVE掌握=没有进一步传输到主直到应用程序准备好!* /
SPIDRV_RXPEND_L;

/ *锁ISR使用缓冲区* /
spidrv_cntrl.isr_lock = SPIDRV_CS_H_DETECTCNT;

/ *等待,直到数据准备* /
而(spi_data_rdy_getf())
{
/ * -------------------------------------------------------------------------------- * /
/ * SPI RX PART - 读取接收到的字节(如果可能)* /

/ *这个字节传送到我们的RX缓冲区(如果可能的话)* /
如果(spidrv_cntrl.rx_wr_idx {
spidrv_buffer_rx [spidrv_cntrl.rx_wr_idx] = 0xFF的&GetWord16(SPI_RX_TX_REG0);
spidrv_cntrl.rx_wr_idx ++;
}
别的
{/ *什么也不做,表示溢出错误* /
spidrv_cntrl.rx_overflw ++;
}

/ * -------------------------------------------------------------------------------- * /
/ * SPI TX PART - 传递一个从Tx缓冲器到发送寄存器(如果有的话)字节未决* /
如果(spidrv_cntrl.tx_rd_idx {
SetWord16(SPI_RX_TX_REG0,0xFF的&(spidrv_buffer_tx [spidrv_cntrl.tx_rd_idx]));
spidrv_cntrl.tx_rd_idx ++;
}
别的
{/ * TX读取指数达到最后一个字节:全部完成!* /
SetWord16(SPI_RX_TX_REG0,0×00);
}

/ *清除中断标志* /
SetWord16(SPI_CLEAR_INT_REG,0×01);
}

//明确IRQ(再次提出,如果事情待定)
SetWord16(SPI_CLEAR_INT_REG,0×01);
}

设备:
mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
嗨Ralf S,

嗨Ralf S,

如果使用的是一个高频率,而不使用的FIFO,中断命中在第一个8位传历程的结束(因为这是该数据已准备好被从SPI外围读出的时间),所以你有媒体链接丢失一个完整的周期,我认为最有可能你会读取来自寄存器中的数据,并把您的TX缓冲区(你花维修ISR的时间),当失去一个额外的完整周期。因此,在第三传历程的SPI发送寄存器具有所需的数据媒体链接中,将transmited。尝试减少主的SPI频率和检查,如果问题仍然存在或将延迟到第一个SPI交易和后面的值之间的主人为了使SPI TX注册有时间,以获得所需的值。

谢谢mt_dialog.

RALF S.
离线
最后一次露面:4年5个月前
加入:2016年2月16日08:06
谢谢回答!我试过

谢谢回答!我试图降低主频率,但奴隶的行为并没有改变。你是什​​么将延迟到主意味着什么呢?字节之间的延迟来发送?

和你有一个猜测,为什么从上第二个字​​节,并且只在第三下面的传输复位后发送的第一帧?

RALF S.
离线
最后一次露面:4年5个月前
加入:2016年2月16日08:06
我现在的工作。当我

我现在的工作。当我发送消息时,主字节我还是做派在TX寄存器写0×00。当我删除了这条线一切正常,但ISR被称为在我的框架在某些情况下,这导致来不及零字节。

我实现了RX-FIFO和我预先加载它,当我发送数据,因此主机接收的第一个字节的数据,一切工作正常。

但是,现在从外部中断唤醒时,我有一个不同的问题。因此,我会打开一个新的线程!

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
你好拉尔夫S.

你好拉尔夫S.

很高兴你发现了它,并感谢您让我们知道。也非常感谢您对同一职位没有发布您的新问题。

顺祝商祺MT_dialog