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.

[参考译文] CC1310:重新启动后外部中断不起作用。

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1505896/cc1310-the-external-interrupt-does-not-work-after-a-reboot

器件型号:CC1310

工具/软件:

大家好。

我正在努力解决我的 CC1310器件的一个问题、希望能得到您的帮助。

我的 CC1310定制板包含一个连接到 DIO6引脚的 MPU6050加速计、其配置如下。

PIN_Config pinTable[]={
/*Accelerometer 中断*/
CC1310_LAUNCHXL_ACEL_INT | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE | PIN_HYSTERESIS、
PIN_Terminate
};

首先、我的 CC1310器件通过 DIO6引脚上的中断来检测运动并通过 UART 发送数据(这里一切都正常)。
从 UART 接收器件获得响应后、我的 CC1310器件(发送器)必须通过 SPI 从传感器读取数据、该数据被加载到有效载荷 TX 数据包并发送到 CC1310接收器件、后者必须用确认响应发送器(从这一点开始、有时会发生问题)。我观察到、如果上述射频消息的传输和接收没有正确完成、发送器中的系统崩溃。 (为解决此问题、我认为按下 cc1310设备(发射器)上的复位按钮后、一切都将正常工作、我的生活将会更快乐)但问题是、在复位后、CC1310无法检测到来自 MPU6050的运动中断、并且只有在断开并完全连接电源(电池)时、它才能再次正常工作。

什么会导致此行为、如何解决?
引脚复位是否会使 CC1310完全关闭、以及所有 DIO (包括射频内核)都打开?

这只是 MPU6050的问题吗?

我做了第二个代码、省略了 RF 消息传输部分、当通过 PIN 重置时、它的工作原理符合我的预期、因此我的直觉告诉我、问题可能是由该部分引起的。

这是我的射频部分、是否存在任何问题或我未考虑在内?

txPacket.PAYLOD[0]= 0xAE;
txPacket.PAYLOD[1]= 0x00;
txPacket.PAYLOD[2]= 0xB1;
txPacket.PAYLOD[3]= 0xDD;

uint8_t j、i;
for (j = 4、i = 0;j!=sizeof (ID_Main)+5;j++、++I){  
txPacket.PAYLOD[j]= ID_Main[i];
}

uint8_t k、l;
for (k = 12、l = 0;k!=sizeof (TID)+13;k++、++l){
txPacket.PAYLOD[k]= TID[l];
}//*/

txPacket.len = 24;
memcpy (&txPacket.dstAddr、&dir_broadcast、sizeof (dir_broadcast));
EasyLink_transmitASYNC (&txPacket、TxDoneCb);

信标挂起(RXSem、BIOS_WAIT_FOREVER);
EasyLink_receiveASYNC (rxDoneCb、0);

if (SISPENT_PEND (RXSem、(3000000 / Clock_tickPeriod))= false){
if(EasyLink_abort ()== Easyh Link_Status_Success ){
信标挂起(RXSem、BIOS_WAIT_FOREVER);
}
}

提前感谢!

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

    尊敬的 J:

    一个很好的做法是在重新启动 CC1310时重置 MPU6050:

    CC1310崩溃后很可能会挂起。

    顺便说一下、您是否有关于 CC1310崩溃的更多数据? 您是否通过 ROV 观察到任何异常、或者是否出现任何 PC 或异常寄存器值?

    此致、

    Arthur

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

    您好 Arthur。

    感谢您的建议、我正在开始工作活动、因此我将尝试通过重新启动 CC1310来重置 MPU6050。 我还将检查 ROV。 几个小时后我会发送我的结果。

    谢谢!

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

    您好 Arthur。  

    static void Task_ONE(UArg arg0, UArg arg1){
    
        static PIN_Handle  accelPinHandle;
        static PIN_State   accelPinState;
    
        /*Semaforo*/
         Semaphore_Params params;
         Semaphore_Params_init(&params);
         RXSem = Semaphore_create(0, &params, NULL);
    
    
         reset_MPU6050();
         usleep(100000);
    
         accelPinHandle = PIN_open(&acelerometroPinState, pinTable);
         PIN_registerIntCb(accelPinHandle, &accelInt);
    
         ACCEL_Init_MPU6050();
         Init_MPU6050_GYRO();
         
         
         while(1){
             
             // My code
         }
         
    }

    我已经解决了。
    我实现了一个将 RESET 位写入 MPU6050的函数、在运行的最高优先级任务中、首先添加引脚和中断配置、如下所示。
    我已经测试过、它可以成功运行。

    感谢您的支持。 Slight smileμ s

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

    伟大的消息,然后Smiley