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.

[参考译文] RTOS/CC2640R2F:如何使计时器 ISR 正常工作?

Guru**** 2589265 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/601299/rtos-cc2640r2f-how-to-make-the-timer-isr-work

器件型号:CC2640R2F

工具/软件:TI-RTOS

大家好! 我尝试了以下代码并使其正常工作(不再崩溃)。 但是,回调函数 TimerISR()似乎从未调用过。 我缺少哪个部件? 是否有提示? 提前感谢。  

//定时器 ISR
无效 TimerISR (UARg a0)
{
//清除中断标志
TimerIntClear (GPT1_base、TIMER_TIMB_TIMEOUT);
//再次允许待机模式
//Power_releaseConstraint (Power_SB_disallow);
}
//timer init 函数
void TimerInit (uint32_t usec)
{
PRCMPowerDomainOn (PRCM_DOMAIN_PERIPh);
PRCMLoadSet();
PRCMPeripheralRunEnable (PRCM_Periph_Timer1);
PRCMLoadSet();

Hwi_Params HwiParams;
Hwi_Params_init (hwiParams);
hwiParams.enableInt = true;
//构建 HWI
Hwi_construction (&hwi、INT_TIMER1B、TimerISR、&hwiParams、NULL);

unsigned long timer_LOADSET = 48 * usec - 1;

//使用计时器时禁止待机模式。
POWER_setConstraint (Power_SB_Disallow);
//将 Timer-A 设置为周期计数模式
TimerConfigure (GPT1_BASE、TIMER_CFG_B_PERIODICRACRACASE);
//设置计时器的加载值
TimerLoadSet (GPT1_BASE、Timer_B、TIMER_LOADSET);
//启用中断
TimerIntEnable (GPT1_BASE、TIMER_TIMB_TIMEOUT);
//启用计时器
TimerEnable (GPT1_base、Timer_B);
}

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

    您如何确定未调用 ISR? 您可以尝试在 ISR 中切换 GPIO 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Rachel。

    我在回调函数 TimerISR()中添加了一行,但没有看到任何内容。

    voidTimerISR(UArg a0)
    {
        //clear interrupt flag
        TimerIntClear(GPT1_BASE, TIMER_TIMB_TIMEOUT);
        // count on OLED
        Board_writeStringValue("C=", count++, 10, LCD_PAGE2);
    }
    不过、另一件事是、我使用另一个 PWM 计时器进行蜂鸣:

    void board_pwm_init ()


    POWER_setDependency (Periph_GPT0);
    hPinBuzzer = PIN_OPEN (&pinState、timerPinTable);
    PINCC26XX_setMux (hPinBuzzer、PWM0_IOID、IOC_PORT_MCU_PORT_EVENT0);
    TimerConfigure (GPT0_BASE、TIMER_CFG_SPLIT_PAIR|TIMER_CFG_A_PWM|TIMER_CFG_B_CAP_COUNT);


    void board_pwm_start (unsigned long freq_Hz、uint8持续时间)

    无符号长整型 PWM_FREQ = freq_Hz;
    unsigned long PWM_DIV_factor = 48000000 /PWM_FREQ;
    unsigned long timer_LOADSET =(PWM_DIV_facter-1);
    unsigned long timer_match;

    如果(持续时间> 100)持续时间= 100;

    Timer_match =(PWM_DIV_facter*(100持续时间)/100-1);

    POWER_setConstraint (Power_SB_Disallow);

    TimerLoadSet (GPT0_BASE、TIMER_A、TIMER_LOADSET);

    TimerMatchSet (GPT0_BASE、TIMER_A、TIMER_MATCH);

    TimerEventControl (GPT0_BASE、TIMER_A、TIMER_EVENT_NEG_EDGE);


    TimerEnable (GPT0_BASE、TIMER_A);

    void board_pwm_stop ()

    TimerDisable (GPT0_BASE、TIMER_A);
    //Power_setConstraint (Power_STANDBY);

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

    PWM 计时器和回调计时器绝不会同时使用、因此我想 PWM 不应影响回调。

    此致、Young
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    电源
    我需要一个回调函数来处理周期性工作。 如果需要、我可以使硬件输出引脚闪烁。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Young、

    您是否已查看 TI-RTOS GPTimer 模块、以查看它是否更适合您、而不是直接使用 Driverlib API? 还有一个 PWM 模块。 这些文件可在 SDK 安装程序的 source->ti->drivers 文件夹中找到。

    如果必须使用 Driverlib 调用、以下是指向计时器 API 的链接: dev.ti.com/.../group__timer__api.html

    也许 TimerIntRegister 会比 Hwi 寄存器提供更好的结果、但是如果你使用计时器模块创建任何计时器、它可能与 TI-RTOS 相冲突。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rachel、

    这些文档对我来说不明确、很容易让我丢失。 只要哪个计时器模块能够生成高精度的定期回调、我就不会真正关心它。 我只需要这四个函数:

    #include "xxxxxx.h"

    空 ClockCallBack (arg A)



    空 ClockInit()



    空时钟启动(uint32 usec)



    空 ClockStop()



    那么、为了简化我的工作负载并使所有其他在处理计时器问题时遇到困难的人受益、您是否可以在方括号中填入示例代码以使其正常工作? 那么、我们不需要像这样进行通信。

    此致、Young
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    电源
    我使用的是 SimpleBLEPeripheral
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 TI Gurus:

    有人能帮我解决这个难题吗? 谢谢。

    此致、Young