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.

[参考译文] CC2650MODA:闪存/调试会话后复位

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

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/733022/cc2650moda-reset-after-flash-debug-session

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

您好!

 

我正在与 CC2650MODA 和 TI 的简单中央项目合作。
如果我对器件进行调试、然后停止该器件、然后使用按钮关闭电源、则无法使用按钮再次启动器件。
当我通过移除电源关闭器件电源时、器件会在我打开电源后使用按钮启动。

此行为仅在闪存或调试后发生! 否则、只需按下一个按钮即可关闭和打开电源。

是否可以避免移除电源?

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用开箱即用的 simple_peripheral/simple_central 项目进行测试时是否存在此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、开箱即用的 simple_peripheral/simple_central 项目也存在此问题

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

    我已经重现了 CC2650 Launchpad 和 Minimal 项目的问题。

    请参阅随附的代码、其中 我使用 Board_BUTTON0关闭 Launchpad 并打开 Launchpad 的电源。

    //
    *版权所有(c) 2015,Texas Instruments Incorporated
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    //
    
    /*
    === pinInterrupt.c ====
    //
    
    //* XDCtools 头文件*/
    #include 
    #include 
    #include 
    
    /* BIOS 头文件*/
    #include 
    #include 
    #include 
    #include 
    
    /* TI-RTOS 头文件*/
    #include 
    #include 
    
    /*示例/板头文件*/
    #include "Board.h"//
    
    Driverlib CPU 函数,用于此处的 CPUdelay*/
    #include 
    
    /*可以是任何内容,如计算 primes */
    #define FakeBlockingSlowWork() CPUdelay (12e6)
    #define FakeBlockingFastWork() CPUdelay (3e6)
    
    //引脚驱动程序句柄*/
    静态 PIN_Handle pinHandle;
    
    // PIN_Config 表的全局存储器*/
    static PIN_STATE (3e6)任务
    
    
    堆
    
    
    栈;static 任务256_workstatic Task_track;static 任务256_workstatic 任务堆栈;static 任务块256_workstatu.task_track;static 任务256]
    
    
    /*
    *初始引脚配置表
    *-引脚表初始化后、LED Board_LED0和 Board_LED1熄灭。
    *-按钮设置为使用上拉电阻器输入。 在 SmartRF06上、对于
    *、BUTTON0已启动 其他则为左键。
    */
    PIN_Config pinTable[]={
    BOARD_LED0 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、
    BOARD_LED1 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、
    BOARD_BUTTON0 | PIN_INPUT_EN | PIN_PULLUP、
    PIN_TERMINATE
    };
    
    void doWork (void)
    {
    PIN_setOutputValue (pinHandle、Board_LED1、1);
    FakeBlockingSlowWork();/*假装做一些有用但耗时的事情*/
    PIN_setOutputValue (pinHandle、Board_LED1、0);
    }
    
    void doUrgentWork (void)
    {
    PIN_setOutputValue (pinHandle、Board_LED2、1);
    FakeBlockingFastWork();//假装做一些有用但耗时的事情*/
    PIN_setOutputValue (pinHandle、Board_LED2、0);
    }
    
    void workTaskFunc (UArg0、UArg1 arg1)
    {
    while (1){
    
    /*执行工作*/
    doWork();
    
    /*睡眠*/
    Task_sleep (1000 *(1000 / Clock_tickPeriod));
    }
    }
    
    void urgentWorkTaskFunc(UArg0、UArgarg1)
    {
    while (1){
    
    Semaphore_pend (urgentWorkSem、BIOS_wait_forever);
    POWER_SHUTDOWN (NULL、0);
    
    /*执行工作*/
    doUrgentWork();
    }
    }
    
    void pinInterruptHandler (PIN_Handle handle、PIN_ID pinId)
    {
    Semaphore_post (urgentWorkSem);
    }
    
    /*
    ===== main ====
    *
    */
    int main (void)
    {
    /*呼叫板初始化函数*/
    PIN_init (BoardGpioInitTable);
    
    /*打开引脚*/
    pinHandle = PIN_OPEN (&pinState、pinTable);
    if (!pinHandle){
    System_abort ("初始化电路板引脚时出错");
    }
    
    PIN_registerIntCb (pinHandle、pinInterruptHandler);
    PIN_setInterrupt (pinHandle、Board_BUTTON0 | PIN_IRQ_NEGEDGE);
    PIN_setConfig (pinHandle、PINCC26XX_BM_WAKEUP、Board_BUTTON0 | PINCC26XX_WAKEUP_NEGEDGE);
    /*设置 LED 任务*/
    Task_Params workTaskParams;
    Task_Params_init (&workTaskParams);
    workTaskParams.STACKSIZE = 256;
    workTaskParams.priority = 1;
    workTaskParams.stack = workTaskStack;
    
    Task_construct (&workTask、workTaskFunc、&workTaskParams、NULL);
    
    Task_Params urgentWorkTaskParams;
    Task_Params_init (urgentWorkTaskParams);
    urgentWorkTaskParams.STACKSIZE = 256;
    urgentWorkTaskParams.priority = 2;
    urgentWorkTaskParams.stack = urgentWorkTaskStack;
    
    Task_construct(&urgentWorkTask, urgentWorkTaskFunc, urgentWorkTaskParams, NULL);
    
    /*启动内核。 *
    BIOS_start();
    
    返回(0);
    }
    
    //注意,解决方案还涉及将以下内容添加到.cfg 文件
    var semaphore0Params = new semaphore.Params ();
    semaphore0Params.instance.name ="urgentWorkSem";
    Program.global.urgentWorkSem = semaphore.create (null、semaphore0Params);
    */
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    调试时、由于在调试模式下强制打开 JTAG 域、器件将无法正确进入关断模式。
    我们的引脚关断示例对此进行了说明。
    dev.ti.com/.../README.html
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢您、我的问题得到了解决