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/LAUNCHXL-CC3235S:无法复位计时器

Guru**** 2540720 points
Other Parts Discussed in Thread: CC3200, CC3235S

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/909818/ccs-launchxl-cc3235s-unable-to-reset-the-timer

器件型号:LAUNCHXL-CC3235S
主题中讨论的其他器件:CC3235SCC3200

工具/软件:Code Composer Studio

尊敬的 TI:

我们将使用 TRF7970ABP 将 simplelink cc3200的代码移植到 simplelink cc3235、因为我们使用的是 NFC_reader 程序。 该程序中有一个称为计时器复位的函数  

TimerDisable (TIMERERA2_base、TIMER_A);

但在 CC3235中、Timer.h 库中没有类似的函数、我使用的是以下函数  

/*!
*@用于停止计时器的简短功能。 如果计时器已停止、则
* 函数无效。
*
*@调用了 PRE Timer_open ()。
*
*@param[in]句柄从 Timer_open ()返回的 Timer_handle。
*
*@sa Timer_start ()
*/
extern void Timer_stop (Timer_handle); 

来自 Tiimer.h 库

但它不起作用、请帮助我解决此问题。

让我知道我在哪里犯错。

提前感谢  

Sarju Bhatnagar

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

    Sarju、

    原始计时器调用使用的是 Driverlib、应在 SDK 中引用 Driverlib。 Timer_Stop()的后续调用是一个 TI 驱动程序,它是 driverlib 之上的一个抽象层。

    要继续、您可以找到 driverlib 调用或将所有计时器代码迁移到 TI 驱动程序。

    BR、

    Vince

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

    你好,Vince!

    感谢您 的回复、

    1) 1) drvierlib 是否可以与 CC3235S LP 一起使用、因为它有自己的库和 SDK。

    2) 2)目前、我想使用 TI 驱动程序、但问题是重置 CC3200使用的计时器  

    TimerDisable (TIMERERA2_base、TIMER_A); 

    正如我之前所说的。

    但在 CC3235S 中、我无法重置计时器、Help Do 让我知道如何重置计时器、或者是否有任何与计时器相关的文档?

    再次感谢您的回复。

    等待您的进一步答复

    Sarju Bhatnagar

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

    请回复 asap、

    并告诉您如何设置基于超时的中断。 下面是我将用于它的代码  

    #include 
    
    /*驱动程序头文件*/
    #include 
    #include 
    #include 
    #include 
    #include "timer.h"
    #include "hw_memmap.h"
    #include "hw_types.h"
    
    /*板头文件*/
    #include "ti_drivers_config.h"
    
    //用于切换 LED 的回调。 //
    空 timerCallback (Timer_handle myHandle、int_fast16_t 状态);
    空 timerCallback1 (Timer_handle myHandle、int_fast16_t 状态);
    空 check_out (void);
    void timer_reinitiated();
    
    静态 int ticks = 0;
    Timer_handle timer0、Timer1;
    Timer_Params 参数;
    
    静态 Display_handle 显示;
    
    /*
    === mainThread ====
    //
    void * mainThread (void * arg0)
    {
    
    /*调用驱动程序初始化函数*/
    GPIO_init();
    timer_init();
    display_init();
    
    /*配置 LED 引脚*/
    GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    
    /*关闭用户 LED */
    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_OFF);
    
    /*打开输出的显示屏*/
    Display = Display_open (Display_Type_UART、NULL);
    if (display =NULL){
    /*无法打开显示驱动程序*/
    while (1);
    }
    
    /*
    *将计时器设置为连续回调模式,以调用回调
    *每1、000、000微秒或1秒运行一次。
    *
    Timer_Params_init (&params);
    params.period = 1000000;
    Params.periodUnits = Timer_Period_US;//Timer_Period_Hz
    Params.timerMode = Timer_OneShot_callback;//Timer_free_running;//Timer_OneShot_Blocking;//Timer_Continuous_callback//Timer_OneShot_callback
    params.timerCallback = timerCallback;
    
    timer0 = Timer_open (CONFIG_TIMER_0、params);
    
    if (timer0 == NULL){
    /*初始化计时器失败*/
    while (1){}
    
    
    // if (Timer_start (timer0)= Timer_STATUS_ERROR){
    // /*无法启动计时器*/
    // while (1){}
    //}
    
    // Timer_stop (timer0);
    Timer_start (timer0);
    int32_t status=Timer_setPeriod (timer0、Timer_Period_US、100000);
    if (status =Timer_STATUS_SUCCESS)
    {
    Display_printf (display、0、0、"Timer_STATUS_SUCCESCn");
    }
    其他
    {
    Display_printf (display、0、0、"Timer_STATUS_ERROR\n");
    }
    Timer_start (timer0);
    
    
    Timer_stop (timer0);
    STATUS=Timer_setPeriod (timer0、Timer_Period_US、10000);
    if (status =Timer_STATUS_SUCCESS)
    {
    Display_printf (display、0、0、"Timer_STATUS_SUCCESCn");
    }
    其他
    {
    Display_printf (display、0、0、"Timer_STATUS_ERROR\n");
    }
    Timer_start (timer0);
    
    return (NULL);
    }/*
    
    
    *此回调每1、000、000微秒或1秒调用一次。 由于
    *每次调用此函数时都会切换 LED、因此 LED 将以
    *每2秒闪烁一次的速率闪烁。
    //
    void timerCallback (Timer_handle myHandle、int_fast16_t status)
    {
    
    Display_printf (display、0、0、"计时器计数为:%d\n"、ticks ++);
    // Display_printf (display、 0、0、"发生定时器中断!\n");
    // if (ticks = 10)
    //{
    // check_out();
    //}
    
    
    void check_out()
    {
    
    }
    

    但它不起作用。

    请告诉我出错的地方。

    等待您的回复  

    Sarju Bhatnagar

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

    Sarju、

    为什么要执行多次启动和停止并重新配置周期? 您能否尝试使用参数设置一次计时器、并测试它是否起作用?

    BR、

    Vince  

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

    Vince、  

    是的、使用参数设置计时器一次就可以完美地工作、我在这里要做的是

    "我正在尝试 进行超时中断"

    实际上、我正在将 cc3200 NFC 读取器代码移植到 cc3235、此代码使用超时中断。 在 cc3235中。

    if (Timer_setPeriod (timer0、Timer_Period_US、1000)=Timer_Status_Success)
    {
    Display_printf (display、0、0、"Timer_STATUS_SUCCESS");
    } 

     是设置 超时周期的函数。 这是该函数使用的建议  

    Timer_stop (timer0); 

    功能。 当它被停止时、也应该启动、因此我正在使用它  

    Timer_start (timer0);
    

    以便发生中断。

    我希望现在您能了解我要做的事情、请告诉我如何设置超时中断。 应在定时器超过中断时发生。  

    非常感谢您的回复。  

    正在等待您的进一步回复...

    Sarju Bhatnagar


     

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

    Sarju、

    您能否尝试将此模式从一次性回调更改为更连续的模式?  

    确保在停止计时器后、再次启动计时器。 在这种情况下、您仍然看不到中断? 您还可以尝试关闭计时器并将其打开。 这应该是一种权变措施。

    BR、

    Vince