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.

[参考译文] TMDS62LEVM:计时器计数器值不会从零开始计数

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1493062/tmds62levm-timer-counter-value-does-not-start-counting-from-zero

器件型号:TMDS62LEVM
主题中讨论的其他器件:AM62LSysConfig

工具/软件:

我尝试实现一个 NORTOS 计时器示例代码、该代码从0开始计数到设定的计时器周期值(例如  timerParams.periodInUsec = 0xfffff )使用 am62lx_11_00_05 SDK。 问题是、启动计时器后立即计时器计数器值(由检索  TimerP_getCount )不是从0开始、而是从非常高的开始-类似的 0xfffe67eb。 代码片段如下所示:

/* Timer setup and init here */
TimerP_Params timerParams;

/* set timer clock source */
SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MAIN, 2);
*(volatile uint32_t*)AddrTranslateP_getLocalAddr(CONFIG_TIMER2_CLOCK_SRC_MUX_ADDR) = CONFIG_TIMER2_CLOCK_SRC_HFOSC0_CLKOUT;
SOC_controlModuleLockMMR(SOC_DOMAIN_ID_MAIN, 2);

gTimerBaseAddr[CONFIG_TIMER2] = (uint32_t)AddrTranslateP_getLocalAddr(CONFIG_TIMER2_BASE_ADDR);

TimerP_Params_init(&timerParams);
timerParams.inputPreScaler = 25*10; // Brings clock down to 100KHzTimer 
timerParams.inputClkHz     = CONFIG_TIMER2_INPUT_CLK_HZ;
timerParams.periodInUsec   = 0xfffff;
timerParams.periodInNsec   = 0;
timerParams.oneshotMode    = 1;
timerParams.enableOverflowInt = 0;
TimerP_setup(gTimerBaseAddr[CONFIG_TIMER2], &timerParams);
DebugP_log("Timer initialization done . . .\r\n");

TimerP_start(gTimerBaseAddr[CONFIG_TIMER2]);
DebugP_log("Timer started . . .\r\n");

ClockP_usleep(2000); // Wait for 2ms
prev_count = TimerP_getCount(gTimerBaseAddr[CONFIG_TIMER2]);
DebugP_log("initial prev_counter:%x\r\n", prev_count);

for(i = 0; i < prev_count; i++){
    ClockP_usleep(2000);  // Wait for 2ms
    count = TimerP_getCount(gTimerBaseAddr[CONFIG_TIMER2]);
    DebugP_log("counter:%x\r\n", count);

    prev_count = count;
}
 

输出如下所示:

Timer initialization done . . .
Timer started . . .
initial prev_counter:fffe67eb
counter:fffe69f8
counter:fffe6b8e
counter:fffe6d24
counter:fffe6ebb
counter:fffe7051
counter:fffe71e7
counter:fffe737d
counter:fffe7514
counter:fffe76aa
counter:fffe7840
counter:fffe79d7
counter:fffe7b6d
counter:fffe7d03
counter:fffe7e99
counter:fffe8030
counter:fffe81c6
counter:fffe835c
counter:fffe84f3
counter:fffe8689
counter:fffe881f
counter:fffe89b5
counter:fffe8b4c
counter:fffe8ce2
counter:fffe8e78
counter:fffe900e
counter:fffe91a5
counter:fffe933b
counter:fffe94d1
counter:fffe9668
counter:fffe97fe
counter:fffe9994
counter:fffe9b2a
counter:fffe9cc1
counter:fffe9e57
counter:fffe9fed
counter:fffea184
counter:fffea31a
counter:fffea4b0
counter:fffea646
counter:fffea7dd
counter:fffea973
counter:fffeab09
counter:fffeaca0
counter:fffeae36
counter:fffeafcc
counter:fffeb162
counter:fffeb2f9
counter:fffeb48f
counter:fffeb625
counter:fffeb7bc
counter:fffeb952
counter:fffebae8
counter:fffebc7e
counter:fffebe15
counter:fffebfab
counter:fffec141
counter:fffec2d8
counter:fffec46e
counter:fffec604
counter:fffec79a
counter:fffec931
counter:fffecac7
counter:fffecc5d
counter:fffecdf4
counter:fffecf8a
counter:fffed120
counter:fffed2b6
counter:fffed44d
counter:fffed5e3
counter:fffed779
counter:fffed90f
counter:fffedaa6
counter:fffedc3c
counter:fffeddd2
counter:fffedf69
counter:fffee0ff
counter:fffee295
counter:fffee42b
counter:fffee5c2
counter:fffee758
counter:fffee8ee
counter:fffeea85
counter:fffeec1b
counter:fffeedb1
counter:fffeef47
counter:fffef0de
counter:fffef274
counter:fffef40a
counter:fffef5a1
counter:fffef737
counter:fffef8cd
counter:fffefa63
counter:fffefbfa
counter:fffefd90
counter:fffeff26
counter:ffff00bd
counter:ffff0253
counter:ffff03e9
counter:ffff057f
counter:ffff0716
counter:ffff08ac
counter:ffff0a42
counter:ffff0bd8
counter:ffff0d6f
counter:ffff0f05
counter:ffff109b
counter:ffff1232
counter:ffff13c8
counter:ffff155e
counter:ffff16f5
counter:ffff188b
counter:ffff1a21
counter:ffff1bb7
counter:ffff1d4e
counter:ffff1ee4
counter:ffff207a
counter:ffff2211
counter:ffff23a7
counter:ffff253d
counter:ffff26d4
counter:ffff286a
counter:ffff2a00
counter:ffff2b96
counter:ffff2d2d
counter:ffff2ec3
counter:ffff3059
counter:ffff31f0
counter:ffff3386
counter:ffff351c
counter:ffff36b3
counter:ffff3849
counter:ffff39df
counter:ffff3b75
counter:ffff3d0c
counter:ffff3ea2
counter:ffff4038
counter:ffff41cf
counter:ffff4365
counter:ffff44fb
counter:ffff4691
counter:ffff4828
counter:ffff49be
counter:ffff4b54
counter:ffff4ceb
counter:ffff4e81
counter:ffff5017
counter:ffff51ae
counter:ffff5344
counter:ffff54da
counter:ffff5670
counter:ffff5807
counter:ffff599d
counter:ffff5b33
counter:ffff5cca
counter:ffff5e60
counter:ffff5ff6
counter:ffff618c
counter:ffff6323
counter:ffff64b9
counter:ffff664f
counter:ffff67e6
counter:ffff697c
counter:ffff6b12
counter:ffff6ca8
counter:ffff6e3f
counter:ffff6fd5
counter:ffff716b
counter:ffff7302
counter:ffff7498
counter:ffff762e
counter:ffff77c4
counter:ffff795b
counter:ffff7af1
counter:ffff7c87
counter:ffff7e1d
counter:ffff7fb4
counter:ffff814a
counter:ffff82e0
counter:ffff8477
counter:ffff860d
counter:ffff87a3
counter:ffff8939
counter:ffff8ad0
counter:ffff8c66
counter:ffff8dfc
counter:ffff8f93
counter:ffff9129
counter:ffff92bf
counter:ffff9455
counter:ffff95ec
counter:ffff9782
counter:ffff9918
counter:ffff9aaf
counter:ffff9c45
counter:ffff9ddb
counter:ffff9f71
counter:ffffa108
counter:ffffa29e
counter:ffffa434
counter:ffffa5ca
counter:ffffa761
counter:ffffa8f7
counter:ffffaa8d
counter:ffffac24
counter:ffffadba
counter:ffffaf50
counter:ffffb0e6
counter:ffffb27d
counter:ffffb413
counter:ffffb5a9
counter:ffffb740
counter:ffffb8d6
counter:ffffba6c
counter:ffffbc02
counter:ffffbd99
counter:ffffbf2f
counter:ffffc0c5
counter:ffffc25c
counter:ffffc3f2
counter:ffffc588
counter:ffffc71e
counter:ffffc8b5
counter:ffffca4b
counter:ffffcbe1
counter:ffffcd78
counter:ffffcf0e
counter:ffffd0a4
counter:ffffd23a
counter:ffffd3d1
counter:ffffd567
counter:ffffd6fd
counter:ffffd894
counter:ffffda2a
counter:ffffdbc0
counter:ffffdd56
counter:ffffdeed
counter:ffffe083
counter:ffffe219
counter:ffffe3af
counter:ffffe546
counter:ffffe6dc
counter:ffffe872
counter:ffffea09
counter:ffffeb9f
counter:ffffed35
counter:ffffeecc
counter:fffff062
counter:fffff1f8
counter:fffff38e
counter:fffff525
counter:fffff6bb
counter:fffff851
counter:fffff9e7
counter:fffffb7e
counter:fffffd14
counter:fffffeaa
counter:0

调试时、我注意到在将 countVal 加载到中的 TCRR 计数器寄存器之前、它可能与计算 countVal 的方式有关  TimerP_SETUP 传递函数

请建议如何获取计时器计数器值以从零开始计数到设定的周期。


谢谢您、
Simeon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    相反、它的开始速度非常高-就像这样 0xfffe67eb [/报价]

    它始终以您所述的准确值开头是否一致? 还是会有所不同?

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

    是的、起始值(0xfffe67eb)始终是一致的。  

    我也注意到了  TimerP_getReloadCount  使用连续模式时、该功能也会返回如此高的值。

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

    Vaibhav Kumar 是否有任何更新?

    除了上述请求外、我们还希望以下函数返回成功或失败结果、而不是在出现问题时卡在无限 while 循环中:
    1)  void TimerP_setup (uint32_t baseAddr、TimerP_Params *params)
    2) void TimerP_START (uint32_t baseAddr)
    3) void TimerP_STOP (uint32_t baseAddr)

    谢谢  

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

    您好  Simeon、

    在 MCU+SDK 中、计时器从一个预加载值递减计数、当它们达到最大值时、触发溢出中断

    (32位计时器为0xFFFFFFFF)。

    我们在 MCU+SDK 计时器驱动程序中执行以下步骤。


    1.计时器配置:

    •计时器设置为在溢出模式下运行。
    •它从(最大值-周期)开始、而不是从0开始。
    •这意味着计数器值初始化为:
    计时器起始值= 0xFFFFFFFF -计时器周期


    2.定时器开始计数:

    •计时器每个时钟周期递增。
    •当达到0xFFFFFFFF 时、它会溢出并复位。


    3.中断在溢出时触发:

    •当计数器从0xFFFFFFFF 回滚到0时、会触发溢出中断。
    •这标志着计时器周期的结束。
    •循环将自动重复。

    您能告诉我您 从零开始运行计时器的要求是什么吗?

    如果您确实希望应用程序中的计时器中断、那么上述溢出方法也应该起作用。

    此致、

    Anil.

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

    尊敬的 Swargam:

    我们在一些测试中跟踪计数器值从0增加到设定值时的情况、因此不清楚为什么计时器从(0xFFFFFFFF -计时器周期)开始计数、而不是从0开始计数。

    此外  TimerP_getReloadCount  使用连续模式时、该函数也返回高值。

    除此之外、 如果出现问题、我们希望以下函数返回成功或失败结果、而不是被困在无限 while 循环中:
    1)  void TimerP_setup (uint32_t baseAddr、TimerP_Params *params)
    2) void TimerP_START (uint32_t baseAddr)
    3) void TimerP_STOP (uint32_t baseAddr


    谢谢
    Simeon

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

    您好 Simeon、


    AM62L SoC 中的计时器支持两种工作模式:溢出模式和匹配模式。
    溢出模式(在 MCU+SDK 中受支持)
    在此模式下、计时器计数器不会从0x0开始。 而是从开始 最大计数值-周期值。


    例如、如果用户希望每1ms 生成一个中断、并且计时器是具有225 MHz 输入时钟的32位计时器:
    •计时器计数器将从(0xFFFFFFFF -周期)开始并倒计时至0、最后产生一个中断

    要测量时间、您可以读取当前计时器计数器并使用以下公式:
    Elapsed_Time =(Max_Count_Value - Current_Count)/ 225 MHz
    这将提供经过的时间(以秒为单位)。


    匹配模式(默认情况下在 MCU+SDK 中不受支持)
    在匹配模式下、计时器始终从0x0开始计数、当达到周期值时、计时器会触发中断。
    尽管 MCU+SDK 在默认情况下不支持匹配模式、但如果您的用例需要、我可以帮助您实现它。
    但是、根据您的当前要求、溢出模式就足够了、并且应该能够可靠地工作。

    1)  void TimerP_setup (uint32_t baseAddr、TimerP_Params *params)
    2) void TimerP_START (uint32_t baseAddr)
    3) void TimerP_STOP (uint32_t baseAddr


    SDK 中的上述 API 不会创建任何死循环。
    它们会检查写入操作的完成情况、以确保 SoC 已确认写入。 这种机制是安全的、不应导致任何死锁情况。


    如果您想要实现匹配模式、还是需要进一步了解溢出模式、请告诉我。

    此致、

    Anil.

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

    尊敬的 Anil:  

    感谢您的答复、我想我们可以在下周的演示课程中进一步讨论这些问题。

    我刚注意到的另一个问题是、无论使用的输入预分频器值如何、OneshotMode 在4.2秒以上的时间段内都不能正常工作。

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

    您好 Simeon、

    我刚注意到的另一个问题是、无论使用的输入预分频器值如何、OneshotMode 在4.2秒以上的时间段内都不能正常工作。

    我可以看看这个问题、请告诉我您的应用中所需的最大计时器周期。

    此致、

    Anil.

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

    尊敬的 Anil:

    假设我们 在25MHz 上运行32位计时器、预分频器范围为1到256 、我们希望能够测量最长171.8秒(预分频器等于1时)和43,981.9秒(预分频器等于256时)。

    此外、我们还希望您实现计时器匹配模式。

    非常感谢。
    Simeon

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

    您好 Simeon、

    我可以根据您的要求提供补丁、我们不会谈论当前的计时器实现、因为此 RTOS 基本计时器主要取决于该计时器实现。

    我们可以创建新的 API 来 匹配模式、您能否分享在单次触发模式下如何配置4.5秒时间的步骤?

    如何在示例中配置超过1秒的计时器到期时间(因为 syscfg 仅支持1秒) ?

    在配置4.5秒后、发生了什么情况、计时器中断在计时器过去或最近触发之前被触发或不被触发。

    此致、

    Anil.

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

    尊敬的 Anil:

    以下是用于在 oneshotMode 下测试计时器的代码片段(gpio_led_blink.c):

    #include <drivers/gpio.h>
    #include <kernel/dpl/AddrTranslateP.h>
    #include <kernel/dpl/DebugP.h>
    #include <kernel/dpl/ClockP.h>
    #include "drivers/gpio/v0/gpio.h"
    #include "kernel/dpl/TimerP.h"
    #include "ti_drivers_config.h"
    #include "ti_drivers_open_close.h"
    #include "ti_board_open_close.h"
    
    /*
     * This example configures a GPIO pin connected to an LED on the EVM in
     * output mode.
     * The application toggles the LED on/off for 10 seconds and exits.
     */
    
     /* ----------- TimerP ----------- */
    #define CONFIG_TIMER2_CLOCK_SRC_MUX_ADDR (0x9117000u)
    #define CONFIG_TIMER2_CLOCK_SRC_HFOSC0_CLKOUT (0x0u)
    
    
    HwiP_Object gTimerHwiObj[TIMER_NUM_INSTANCES];
    uint32_t gTimerBaseAddr[TIMER_NUM_INSTANCES];
    
    uint32_t gPeriodicCount = 0;
    volatile bool int_flag = false;
    
    void gpio_led_blink_main(void *args)
    {
        uint32_t    loopcnt = 50, delaySec = 1;
        uint32_t    gpioBaseAddr, pinNum, pinNum96;
        // uint32_t    i, count = 0, prev_count = 0;
        uint32_t    count = 0;
    
        DebugP_log("GPIO LED Blink Test Started ...\r\n");
        DebugP_log("LED will Blink for %d seconds ...\r\n", (loopcnt * delaySec * 2));
    
        /* Get address after translation translate */
        gpioBaseAddr = (uint32_t) AddrTranslateP_getLocalAddr(GPIO_LED_BASE_ADDR);
        pinNum       = GPIO_LED_PIN;
        pinNum96     = CONFIG_GPIO96_PIN;
    
        GPIO_setDirMode(gpioBaseAddr, pinNum, GPIO_LED_DIR);
        GPIO_setDirMode(gpioBaseAddr, pinNum96, CONFIG_GPIO96_DIR);
    
        /* Timer setup and init here */
        TimerP_Params timerParams;
    
        /* set timer clock source */
        SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MAIN, 2);
        *(volatile uint32_t*)AddrTranslateP_getLocalAddr(CONFIG_TIMER2_CLOCK_SRC_MUX_ADDR) = CONFIG_TIMER2_CLOCK_SRC_HFOSC0_CLKOUT;
        SOC_controlModuleLockMMR(SOC_DOMAIN_ID_MAIN, 2);
    
        gTimerBaseAddr[CONFIG_TIMER2] = (uint32_t)AddrTranslateP_getLocalAddr(CONFIG_TIMER2_BASE_ADDR);
    
        DebugP_log("About to init \r\n");
        TimerP_Params_init(&timerParams);
        timerParams.inputPreScaler = CONFIG_TIMER2_INPUT_PRE_SCALER;
        timerParams.inputClkHz     = CONFIG_TIMER2_INPUT_CLK_HZ;
        timerParams.periodInUsec   = 4*1000*1000;
        timerParams.oneshotMode    = 1;
        timerParams.enableOverflowInt = 1;
        TimerP_setup(gTimerBaseAddr[CONFIG_TIMER2], &timerParams);
        DebugP_log("Timer initialization done . . .\r\n");
    
        GPIO_pinWriteLow(gpioBaseAddr, pinNum96);
        DebugP_log("Timer started . . .\r\n");
        TimerP_start(gTimerBaseAddr[CONFIG_TIMER2]);
        GPIO_pinWriteHigh(gpioBaseAddr, pinNum96);
        while((count = TimerP_getCount(gTimerBaseAddr[CONFIG_TIMER2])) != 0){
            // DebugP_log("counter:%x\r\n", count);
            // ClockP_usleep(50000);
            // DebugP_log("Reload count:%x\r\n", TimerP_getReloadCount(gTimerBaseAddr[CONFIG_TIMER2]));
        }
        GPIO_pinWriteLow(gpioBaseAddr, pinNum96);
    
        TimerP_stop(gTimerBaseAddr[CONFIG_TIMER2]);
        DebugP_log("Timer Stopped!!!\r\n");
    
        DebugP_log("GPIO LED Blink Test Passed!!\r\n");
        DebugP_log("All tests have passed!!\r\n");
    
    }
    
     

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

    您好 Simeon、

    我可以在我这边重现问题,并让你知道状态。

    此致、

    Anil.

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

    您好 Simeon、

    我发现问题的根本原因—当前计时器驱动程序在配置时间超过5秒时溢出。 要解决此问题、我们需要在驱动程序代码中应用以下更改。

    应用此更改后、请重新编译计时器驱动程序、然后重新构建应用。

             timeInNsec = (uint64_t)params->periodInUsec*1000U;

    您现在可以为计时器配置大于5秒的值、并验证计时器中断是否按预期触发。 我已经用10秒、50秒和100秒测试了此问题、似乎工作正常。

    我方面的后续行动:
    •研究为什么 Timer 驱动程序当前不支持通过 sysconfig 实现>1秒的配置。
    •添加了对匹配模式下的计时器的支持。

    如果您还有其他问题、请告诉我。

    应用:  

    /cfs-file/__key/communityserver-discussions-components-files/791/gpio_5F00_led_5F00_blink_5F00_am62lx_2D00_evm_5F00_a53ss0_2D00_0_5F00_nortos_5F00_gcc_2D00_aarch64.zip

    驱动程序:  

    /cfs-file/__key/communityserver-discussions-components-files/791/TimerP.c

    此致、

    Anil.

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

    您好 Simeon、

    计时器匹配模式积分更新
    •我已经在匹配模式下创建并验证了计时器。
    •专门为匹配模式功能开发了单独的 API。
    •预分频器值为1时、成功测试了该示例、持续时间长达170秒。

    集成的后续步骤:
    1.将更新后的计时器驱动程序更改集成到您的应用程序中。
    2.将驱动程序与应用程序一起编译。
    3.在应用程序中、配置所需的超时值。
    4.确认计时器在匹配模式下工作正常。

    如果您在集成或测试过程中遇到任何问题、请随时联系我以获得支持。

    驱动程序:  

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM62LX/11_00_00_05/exports/docs/api_guide_am62lx/ATF_INTEGRATION.html

    /cfs-file/__key/communityserver-discussions-components-files/791/4774.TimerP.c

    应用:  

    /cfs-file/__key/communityserver-discussions-components-files/791/3125.gpio_5F00_led_5F00_blink_5F00_am62lx_2D00_evm_5F00_a53ss0_2D00_0_5F00_nortos_5F00_gcc_2D00_aarch64.zip

    此致、

    Anil.

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

    尊敬的 Anil:

    我曾尝试将该补丁整合到 am62lx SDK 中、但我成功地进行了构建、但在更新和加载应用程序后、似乎没有通过计时器比较模式初始化。

    TimerP_CompareMode_setup(gTimerBaseAddr[CONFIG_TIMER2], &timerParams);

    你怎么看?

    此致、
    Simeon

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

    您好 Simeon、

    您能否确认、您是否在更新计时器中的上述更改后编译了驱动程序?

    上次、当我们连接到 ADC 集成时、您无法编译驱动程序、因为 gmake 设置没有正确完成。

    我认为、如果您无法在特定的 TimerP_CompareMode_setup API 中放置断点、那么驱动程序无法正确完成初始化。

    此致、

    Anil.

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

    尊敬的 Anil:

    感谢您的答复。 我已经成功构建了驱动程序并集成了几周前您发布的 ADC 和之前的计时器贴片。 但由于一些奇怪的原因,当我将补丁集成到  am62lx SDK 中时,我无法让计时器示例工作(即在调用 TimerP_CompareMode_setup ()后执行停止)。


    但是、我已经能够使它(计时器比较模式补丁)在我们的代码中工作、计数器值现在从0开始计数。

    我不使用硬件中断方法(来自您的示例代码)、而是设置一个一次性计时器(在比较模式下)、该计时器使用轮询来跟踪计时器周期的结束(当计时器计数器值达到设定值时)。 为此,我想我们需要一种方法来跟踪比较匹配事件发生的时间(类似于 TimerP_isCompareMatched () ),类似于 TimerP_isOverflow ()如何 用于跟踪计时器溢出。

    此致、

    Simeon

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

    您好  Simeon、

    很抱歉延迟的回复。

    我正在与您的团队持续合作、因此我无法提供回复。

    可以听到计时器匹配模式在中断模式下工作正常。

    在单次触发模式、轮询模式下测试计数器。

    您可以应用以下步骤。

    1.使用 TimerP.c 文件中的以下 API 并在 TimerP.h 文件中定义函数声明。  

    2.完成计时器驱动程序。

    3.在应用程序方面,设置以下标志以在单次触发模式和轮询模式下启用计时器。  

      timerParams.oneshotMode = 1;

      timerParams.enableOverflowInt = 0;

    4.Comment 中断设置配置代码.(从137行到143行)  

    5、完成上述更改后,编译应用程序。

    如果您遇到任何问题、请告诉我。

    计时器驱动程序文件:  

     uint32_t TimerP_isCompareMatched(uint32_t baseAddr)
     {
         uint32_t val;
     
         /* get status for overflow interrupt */
         val = *(volatile uint32_t *)(baseAddr + TIMER_IRQ_STATUS_RAW);
     
         return ((val >> TIMER_MATCH_INT_SHIFT) & 0x1U);
     }
     

    uint32_t TimerP_isCompareMatched (uint32_t baseAddr);
    应用  代码:  
    此致、
    Anil.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Anil:

    谢谢、该贴片已集成。

    此致、

    Simeon

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

    您好  Simeon、

    如果您的问题得到解决、请关闭此主题并打开新主题以进行新查询。

    此致、

    Anil.