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.

[参考译文] CCS/CC2650MODA:中断触发 CS SPI CC2650 TI-RTOS

Guru**** 2540720 points
Other Parts Discussed in Thread: CC2650MODA, CC2650

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/672374/ccs-cc2650moda-interrupt-triggering-cs-spi-cc2650-ti-rtos

器件型号:CC2650MODA
Thread 中讨论的其他器件: CC2650

工具/软件:Code Composer Studio

你好。

在我的项目中、我通过蓝牙接收数据、并通过 SPI 接口将其发送给主器件。
如何启动中断以接收/发送来自主器件的数据。

SPI:从器件、POL0、PHA0;

电路板:CC2650 LaunchPad、CC2650MODA

如果使用  PIN_registerIntCb (SPIHandle、&SPICallbackFxn)

以1MHz 的速度延迟11个字符


PIN_Config SPIPinTable[]={
ioID_11 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE、
PIN_Terminate
};

SPIHandle = PIN_OPEN (&SPIPinState、SPIPinTable);

静态空 SPICallbackFxn (PIN_Handle handle、PIN_ID pinId)
{
bool transferOK = false;
如果(!正在传输)
{
TX_STRING[0]='T';TX_STRING[1]='e';TX_STRING[2]="S";TX_STRING[3]='t';TX_STRING[4]="S"; TX_STRING[5]='t';TX_STRING[6]='r';
//*********
spi_trans.count =(uint8_t) strlen (TX_string); //
SPI_TRANS.txBuf = TX_string; //
SPI_TRANS.rxBuf = rx_string; //
transferOK = SPI_transfer (SPI_connFunction、&SPI_trans);
}
}




  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    从引脚中断到 SPI 准备接收会有一些延迟、但11个字符似乎有点高。

    TX_string 和 RX_string 缓冲器的全长是多少? 您是否需要投影电池驱动、即您是否有任何电源限制?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    每个缓冲区的大小为40字节。

    我更改了措辞:

    "我在用于 CC2650的 Code Composer Studio 中有一个项目。 项目由电池驱动、具有电源启动功能。

    CC2650是 SPI 从器件。 从主器件接收第一个字节到启动引脚中断之间的延迟非常大。 主 SPI 图片见附件。

    如何正确行事?"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "Interrupt CS"是否为 IOID_11线路?

    查看您的代码(假设这是从器件侧)、您将不会启动传输、直到出现中断(我想 IOID_11连接到生成中断的主器件)。 查看您发布的逻辑跟踪、中断似乎发生在主器件实际开始传输数据之后、我本来希望在主器件开始传输之前出现这种情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "interrupt CS"是引脚(IOID_15),当调用 SPICallbackFxn 时会切换。(添加了用于调试)
    ioID_11是"CS_wireless"

    您正确理解了逻辑跟踪。

    我出了什么问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否提供一些有关如何初始化 SPI 驱动程序的附加代码、它是处于回调模式还是阻塞模式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    /*最后版本*/ SPI_Params SPI_DGSParams ={ SPI_MODE_CALLACK、/* transferMode * 50000、 //SPI_WAIT_FOREVY、// transferTimeout */ null、 /* transferCallbackFxn */ SPI_SLAVE、 /*模式*/ 1000000、 /*比特率*/ 8、 /* dataSize */ SPI_POL0_PHA0、 /*帧格式*/ (uintptr_t) NULL /*定制*/ };


    
    

     

    在阻塞模式下出现相同的问题

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这应该没问题、你应该坚持回调模式、因为如果你在回调函数内执行传输(或者 nay other Swi/Hwi 运行环境)、不能使用分块。

    传输前、您的设备处于什么模式? 我假设您让它进入待机状态以节省功耗?
    在这种情况下、您必须记住、从 STANDBY -> ACTIVE 转换通常有150us 的延迟(您可以在数据表中找到这一点)。 这似乎与您看到的延迟很匹配。

    如果是这种情况、您必须在主器件侧考虑这一点、以允许器件唤醒。

    SPI 驱动器文档中有一个示例、介绍了如何实现" CS 唤醒"功能以及限制是什么。 您必须查看 SDK 中较新器件的内容、但在如何实现 SDK 方面的想法是相同的。

    此处提供了指向最新 CC26X2 SDK 的快速链接、请查看"使用 SPI_MODE_CALLBACK 在从模式下唤醒片上选择失效"部分。

    dev.ti.com/.../_s_p_i_c_c26_x_x_d_m_a_8h.html