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-CC3235SF:计时器的使用

Guru**** 2587365 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/874913/ccs-launchxl-cc3235sf-usage-of-timers

器件型号:LAUNCHXL-CC3235SF
Thread 中讨论的其他器件:SYSBIOS

工具/软件:Code Composer Studio

大家好!

我尝试使用 Timer1和 Timer2生成2个中断、我对使用哪个库以及如何使用感到有点困惑。

我第一次尝试使用 { 、  }库,但不幸的是,在运行只有一个计时器的示例时,我无法同时运行2个计时器。

此外、使用这些库、我无法确定如何设置计时器的优先级、当由于冲突而具有多个计时器时、这可能是个问题。  

因此、我尝试使用 { 、 },它还公开硬件参数,并尝试运行如下所示的计时器:

Hwi_Params Hwi_params;
Timer_Params params;
Error_Block EB;
Error_init (&EB);
Hwi_Params_init (&hwi_params);
Timer_Params_init (&params);

// Timer_any 获取任何可用的计时器

XDC_UINT TimerId = Timer_any;
hwi_params.priority = 1;
//hwi_params.maskSetting = Hwi_MaskingOption_self;
params.hwiParams =&hwi_params;
params.periodType = Timer_PeriodType_microsecs;
//params.startMode = Timer_StartMode_user;// Timer_start
params.periodType = ti_sysbios_interfaces_itimer_PeriodType_micros;
//params.runMode = ti_sysbios_interfaces_itimer_RunMode_OneShot;
params.startMode = ti_sysbios_interfaces_itimer_StartMode_user;
params.period = timerPeriod_unit * unit;// 1ms = 1000us

TimerHandle = Timer_create (TimerId、(Timer_Functr) timerFunction、&params、&EB);

IF (TimerHandle = NULL)
{
// Serial.println ("***计时器创建失败");
System_abort ("计时器创建失败");

} 

但是、中断从未发生、代码似乎卡在 Timer_Handler 的创建过程中。

我观察到的另一件事是,如果我想通过使用 Timer_getNumTimer()来检查板上有多少个计时器  我在使用 HAL 库时会得到4个计时器,在使用 M3库时会得到1个计时器。

您能否通过一些示例或建议来帮助我使用哪个库?

非常感谢!

Artemis

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

    Artemis、  

    我们的 drivers 文件夹中提供了如何使用 TI 驱动程序创建计时器的示例。 我建议从 SDK 开始。

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

    您好!

    感谢您的回复。

    您是指 HAL 库还是指特定的 ARM 系列(具体取决于电路板)?

    谢谢、

    Artemis

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

    Artemis、

    请看以下网址: http://dev.ti.com/tirex/explore/node?node=AN9vyPZ65XTx3JC9I6ZZ6A__fc2e6sr__LATEST

    BR、

    Vince  

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

    尊敬的 Vince:

    非常感谢您的回复。 该示例确实有用。

    我正在用 C++编写应用程序、并且不知道如何在不使用 CSS 的情况下定义 Timer_config 和 Timer_count 及其位置。

    你有什么建议吗?

    最棒的

    Artemis

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

    计时器配置应该是我们的驱动程序中的一个结构、因此您只需要为其分配值。 对于 Timer_count、您可以将其设为 int。

    BR、

    Vince

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

    尊敬的 Vince:

    您的意思是像在 ti_config_timer.c 文件中完成的那样?

    /*
    === timerCC32XXObjects ===
    */
    TimerCC32XX_Object timerCC32XX Objects[CONFIG_TIMER_COUNT];
    
    /*
    === timerCC32XXHWAttrs ===
    //
    const TimerCC32XX_HWAttrs timerCC32XXHWAttrs[CONFIG_TIMER_COUNT]={
    /* CONFIG_TIMER_0 */
    {
    baseAddress = TIMERA0_BASE、
    .subTimer = TimerCC32XX_timer32、
    .intNum = INT_TIMERA0A、
    .intPriority =(~0)
    }、
    /* CONFIG_TIMER_1 */
    {
    baseAddress = TIMERA2_base、
    .subTimer = TimerCC32XX_timer16A、
    .intNum = INT_TIMERA2A、
    .intPriority =(~0)
    }、
    };
    
    /*
    === timer_config ====
    */
    const Timer_Config Timer_config[CONFIG_TIMER_COUNT]={
    /* CONFIG_TIMER_0 */
    {
    .fxnTablePtr =&TimerCC32XX_fxnTable、
    .object =&timerCC32XX 对象[CONFIG_TIMER_0]、
    hwAttrs =&timerCC32XXHWAttrs[CONFIG_TIMER_0]
    }、
    /* CONFIG_TIMER_1 */
    {
    .fxnTablePtr =&TimerCC32XX_fxnTable、
    .object =&timerCC32XX 对象[CONFIG_TIMER_1]、
    hwAttrs =&timerCC32XXHWAttrs[CONFIG_TIMER_1]
    }、
    };
    
    const uint_least8_t Timer_count = CONFIG_TIMER_COUNT;
    
    

    谢谢、

    Artemis

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

    是的、

    但这些应该已经在您的项目中定义。 在编译工程时、请确保包含 launchxl.c 和.h。

    BR、

    Vince