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.

[参考译文] CC2640:Sensor Controller Studio 会突然停止 GPIO 事件触发

Guru**** 2583365 points
Other Parts Discussed in Thread: ADS1293

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/591783/cc2640-sensor-controller-studio-stops-gpio-event-trigger-suddenly

器件型号:CC2640
主题中讨论的其他器件:ADS1293

大家好、

我正在使用 SCS 访问我的 SPI 器件。 我的 SPI 器件每5ms 生成一次中断。 我正在为接收 GPIO 触发器配置 Sensor Controller Studio。  

我在主 CPU 代码中接收到来自事件处理程序的几个警报。 之后、SCS 停止 GPIO 触发事件。 尽管我的 SPI 器件正在将 GPIO 线置为有效。  

我在下面给出了我的代码(SCS 和 CCS)。  

不确定我会出现什么问题。 请指导我。  

 

以下是我的事件处理程序代码:  

SCS 中的//事件处理程序代码  

spiBegin (SPI_POL0_PHA0、AUXIO_SPI_CSn_ADS1293_CSB); // CS Low

spiTx8bit (SPI_POL0_PHA0、0xD0); //读取命令

对于(U16 n = 0;n < 9;n++){

spiRx8bit (SPI_POL0_PHA0;output.ecgData[n]); //从 SPI 器件读取数据

spiEnd (SPI_POL0_PHA0、AUXIO_SPI_CSn_ADS1293_CSB); // CS 高电平

evhSetupGpioTrigger (0、AUXIO_I_ADS1293_DRDYB、0、EVH_GPIO_TRIG_ON_EDGE);//对下一个触发器进行编程

fwGenAlertInterrupt(); //通知 CPU。  

以下是我的主 CPU 警报处理程序:  

//主循环
while (1){

//等待警报回调
Semaphore_pend (Semaphore_handle (&semScTaskAlert)、BIOS_wait_forever);
//清除警报中断源
scifClearAlertIntSource();

DevID = scifTaskData.dataLogger.output.deviceID;
过滤器= scifTaskData.datalogger.output.filter;
for (i=0;i<9;i++)
ecgData[i]= scifTaskData.datalogger.output.ecgData[i];

//确认警报事件
scifAckAlertEvents ();

此致

Lakshmikanth。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Lakshmi、
    GPIO 引脚以32kHz 的频率进行采样、并且必须在至少2 x 32kHz 的周期内保持有效才能被安全捕获。 evhSetupGpioTrigger()部分的帮助查看器对此进行了说明。

    您是否观察到了中断信号、以确保其足够慢、能够被捕捉?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Erik、

    如前所述、GPIO 引脚每5ms 生效一次(低电平有效)。 事件在最初生成几次、然后停止。

    此致

    Lakshmikanth。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否同时捕获 SPI 线路和中断线路的逻辑分析仪图?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请查找附件。

     这是触发器最初工作时捕获的。 红色的信号是 GPIO。

    在两个或三个这样的传输之后、即使 GPIO 被置为有效、触发器也会停止工作。

    此致

    Lakshmikanth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否尝试在匹配而不是边沿触发(EVH_GPIO_TRIG_ON_MATCH)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的。 但有时它会生成、有时不会生成。

    此致
    Lakshmikanth。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在传感器控制器不触发的情况下、中断信号保持低电平的时间是多久? 您是否有此情况的信号图?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Erik、

    它保持低电平5ms。 我要附加高电平到低电平有效的捕获。 请检查。  

    此致

    Lakshmikanth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您能否与我分享您的 SCS 项目、并向我展示如何从主应用程序(代码)初始化传感器控制器驱动程序?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../ADS1293_5F00_DataLogger_5F00_to_5F00_Eirik.zipHIEirik、

    请查找随附的 SCS 项目。 下面是我的主应用程序代码。

    int main (void){
    Task_Params taskParams;

    //初始化 PIN 驱动程序
    PIN_init (BoardGpioInitTable);

    //配置操作系统任务
    Task_Params_init (&taskParams);
    taskParams.stack = myTaskStack;
    taskParams.STACKSIZE = sizeof (myTaskStack);
    taskParams.priority = 3;
    Task_construction (&myTask、taskFxn、_taskParams、NULL);

    //创建用于等待传感器控制器警报事件的信号量
    Semaphore_Params semParams;
    Semaphore_Params_init (semParams);
    semParams.mode = Semaphore_Mode_binary;
    Semaphore_construction (semScTaskAlert、0、semParams);

    //启动 TI-RTOS
    BIOS_start();
    返回0;

    }// main

    void taskFxn (UArg a0、UArg A1){

    uint16_t DevID;
    uint16_t 滤波器;
    uint16_t ecgData[10];
    int i=0;

    //初始化传感器控制器
    scifOsalInit();
    scifOsalRegisterCtrlReadyCallback (scCtrlReadyCallback);
    scifOsalRegisterTaskAlertCallback (scTaskAlertCallback);
    scifInit (&scifDriverSetup);
    scifStartRtcTicksNow (0x00010000 / 8);

    // ADS1293寄存器配置
    TI_ADS1293_WriteRegSettings();

    //配置并启动传感器控制器的模拟光传感器任务(不要与操作系统任务混淆)
    scifStartTasksNbl (BV (SCIF_DATA_LOGGER_TASK_ID);

    //主循环
    while (1){

    //等待警报回调
    Semaphore_pend (Semaphore_handle (&semScTaskAlert)、BIOS_wait_forever);
    //清除警报中断源
    scifClearAlertIntSource();

    DevID = scifTaskData.dataLogger.output.deviceID;
    过滤器= scifTaskData.datalogger.output.filter;
    for (i=0;i<9;i++)
    ecgData[i]= scifTaskData.datalogger.output.ecgData[i];


    //确认警报事件
    scifAckAlertEvents ();

    }// taskFxn

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

    您好、Erik、

    下面是一些观察结果。

    我已在事件处理程序中添加 GPIO 输出、以检查事件是否正在生成。

    我发现 GPIO 事件正在被触发。 但出于某种原因、事件处理程序中的 SPI 接口无法正常工作。 我在 SPI 总线上看不到任何活动 相同的 SPI 操作在初始化代码中表现良好。

    我还发现唤醒主 CPU (由 fwGenQuickAlertInterrupt()提供;)所需的时间,从 CPU 回来所需的时间为35mS,因此缺少一些 GPIO 事件。

    请查找随附的屏幕截图。 D5信号是 DIO_0引脚、用于切换。 D0是我的 GPIO 事件。

    Lakshmikanth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您向我发送了错误的 SCS 项目。 没有事件处理程序设置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Erik、

    事件处理程序设置是什么意思?

    我在事件处理程序代码中添加了以下代码、并在任务设置中启用了数字输入引脚、并将该引脚命名为 ADS1293_DRDYB。 我还启用了任务事件处理部分中的 GPIO 事件触发器选项。 我可以在我发送给您的同一个项目中看到所有这些内容。

    如有其他需要、请告诉我。

    事件处理程序代码:

    spiBegin (SPI_POL0_PHA0、AUXIO_SPI_CSn_ADS1293_CSB);
    spiTx8bit (SPI_POL0_PHA0、0xD0);
    对于(U16 n = 0;n < 9;n++){

    spiRx8bit (SPI_POL0_PHA0;output.ecgData[n]);


    spiEnd (SPI_POL0_PHA0、AUXIO_SPI_CSn_ADS1293_CSB);

    evhSetupGpioTrigger (0、AUXIO_I_ADS1293_DRDYB、0、EVH_GPIO_TRIG_ON_EDGE);

    fwGenAlertInterrupt();
    //fwGenQuickAlertInterrupt();

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

    似乎您向我发送了压缩的 SCS 项目、供我查看、但它不能反映您描述的项目。 请将正确的问题发送给我进行审核。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我现在找到它。 对我的下载文件夹中的许多文件导致混音:)。 我现在正在查看它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    乍一看、项目看起来不错。 但是、请尝试进行以下评论中给出的更改。

    第一轮回顾:

    1)

    您不需要基于 RTC 的执行调度。 删除此行:

    scifStartRtcTicksNow (0x00010000 / 8);

    2)

    使用 EVH_GPIO_TRIG_ON_MATCH

     

     

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

    您好、Erik、

    我将尝试您的建议、并尽快更新您的最新信息。

    以下是一些观察结果。  

    我正在切换事件处理程序中的 GPIO 引脚、以检查事件是否正在生成。

    1) 1)我发现我的 GPIO 事件总是被触发。 但出于某种原因、事件处理程序中的 SPI 接口无法正常工作。 我在 SPI 总线上看不到任何活动 相同的 SPI 操作在初始化代码中表现良好。

    2)我还发现唤醒主 CPU (通过 fwGenQuickAlertInterrupt();)所需的时间,并且从 CPU 返回所需的时间为35mS,因此由于我的触发器编程时间为5ms,一些 GPIO 事件丢失。

    SPI 在事件处理程序中不工作的原因可能是什么?

    此致

    Lakshmikanth

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

    您好、Erik、

    我已经尝试了您的建议。 我观察到以下情况。  

    1) 1) 在少数事件触发器正常启动后、我观察到 MOSI 线路在下一次触发前突然置为高电平。

    2) 2) CS 线路也会在此之后生效。  

    3) 3)发生这种情况后、SPI 总线停止工作、但事件将被触发。  

    我禁用了 CPU 的警报指示并尝试了。 但我仍然看到上述情形。  是否知道为什么这些行在我不知情的情况下被断言?  

    我已附上协议分析器屏幕供您参考。  

    此致

    Lakshmikanth

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

    您好 、lakshmikanth、

    是否确定您也没有在 TI-RTOS 应用程序中使用这些引脚?

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

    我已确保这些引脚未在我的 TI-RTOS 中使用。

    我在同一个引脚上启用了主 CPU 的 SPI0 (SSI)以检查其是否正常工作。 它工作得非常好。 当我使用 Sensor Controller Studio 中的 SPI 时、我看不到 SPI 总线上的任何活动

    SCS 的 bitbang SPI 是否有任何限制?

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

    我不知道。 您可以尝试将 SPI 位速率设置为平衡(1.1MHz)并进行测试。 我不知道为什么比特率会影响您案例中的稳定性、但值得一试。 在芯片选择之前 MOSI 置位没有任何意义!

    此外、MISO 信号似乎是高电平有效、因此您可以尝试将 INIT 上的 MISO 配置设置为"低电平"而不是"高电平":