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.

[参考译文] SK-TDA4VM:无法修改时钟的中断周期

Guru**** 2563960 points
Other Parts Discussed in Thread: SK-TDA4VM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1564501/sk-tda4vm-unable-to-modify-the-interrupt-period-of-the-clock

器件型号:SK-TDA4VM


工具/软件:

hy、TI 开发人员、

我正在使用一个类似 SK-TDA4VM 的定制电路板、该电路板在功能上与 TI 参考设计相同 Processor SDK RTOS (ti-processor-sdk-rtos-j721e-evm-09_02_00_05)

我的目标是配置 MCU GPT 计时器 在上 MCU R5F 内核 执行不同的任务。 目前、我使用的是 MCU_TIMER4 、时钟源设置为 wkup_rcosc_12p5m AT 12.5MHz

问题:修改时 TLDR 则中断间隔不会改变。

静态寄存器值如下:

  • TIDAR: 0x50003900

  • TLDR: 0x0000000F

  • TIOCP: 0x00000004

  • TMAR: 0x00000000

  • TCLR: 0x00000043

有任何建议吗?  
此致

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

    您好、

    您使用的是哪个 MCU 内核?

    请注意、为特定内核分配了特定的计时器来处理 RTOS 节拍。 我随附了有关为哪些内核分配计时器的文档:

    RTOS 节拍计时器分配

    谢谢、

    Neehar

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

    您好、

    我正在使用 MCU1_0 内核、

    此致

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

    尊敬的 NER:

    感谢您提供此信息。

    您能否为计时器配置提供代码? 您是否能够将计时器初始化为各种中断间隔?

    谢谢、

    Neehar

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

    您好、

    是的、我会在此处通过我的代码:

    static Own_timer timers[MAX_GPT_CHNL_INITIALIZED] = {
        {
            .baseAddr       = CSL_MCU_TIMER0_CFG_BASE,
            .timerStatus    = GPT_UNINITIALIZED,
            .channelMode    = GPT_CH_MODE_CONTINUOUS,
            .timerId        = TISCI_DEV_MCU_TIMER0,
            .timerClkSrc    = TISCI_DEV_MCU_TIMER0_TIMER_TCLK_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler = (uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum    = CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER0_INTR_PEND_0,
            .channelId      = GPT_CH_GPTIMER1,
            .timerIsr       = timer_mcu_isr_chnl1
        },
        {
            .baseAddr       = CSL_MCU_TIMER1_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER1,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER1_CLKSEL_VD_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= (uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER1_INTR_PEND_0,
            .channelId     = GPT_CH_GPTIMER2,
            .timerIsr      = timer_mcu_isr_chnl2
        },
        {
            .baseAddr       = CSL_MCU_TIMER2_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER2,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER2_TIMER_TCLK_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= (uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER2_INTR_PEND_0,
            .channelId     = GPT_CH_GPTIMER3,
            .timerIsr      = timer_mcu_isr_chnl3
        },
        {
            .baseAddr       = CSL_MCU_TIMER3_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER3,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER3_CLKSEL_VD_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= (uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER3_INTR_PEND_0,
            .channelId     = GPT_CH_GPTIMER4,
            .timerIsr      = timer_mcu_isr_chnl4
        },
        {
            .baseAddr       = CSL_MCU_TIMER4_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER4,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER4_TIMER_TCLK_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= (uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER4_INTR_PEND_0,
            .channelId     = GPT_CH_GPTIMER5,
            .timerIsr      = timer_mcu_isr_chnl5
        },
        {
            .baseAddr       = CSL_MCU_TIMER5_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER5,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER5_CLKSEL_VD_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= (uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER5_INTR_PEND_0,
            .channelId     = GPT_CH_GPTIMER6,
            .timerIsr      = timer_mcu_isr_chnl6
        },
        {
            .baseAddr       = CSL_MCU_TIMER6_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER6,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER6_TIMER_TCLK_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= (uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER6_INTR_PEND_0,
            .channelId     = GPT_CH_GPTIMER7,
            .timerIsr      = timer_mcu_isr_chnl7
        },
        {
            .baseAddr       = CSL_MCU_TIMER7_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER7,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER7_CLKSEL_VD_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= (uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER7_INTR_PEND_0,
            .channelId     = GPT_CH_GPTIMER8,
            .timerIsr      = timer_mcu_isr_chnl8
        }
    };    
    
            
    status = TIMERReset(timers[i].baseAddr);
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in resetting timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERDisable(timers[i].baseAddr);
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in disabling timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERModeConfigure(timers[i].baseAddr, TIMER_AUTORLD_CMP_ENABLE);
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in configuring timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERReloadSet(timers[i].baseAddr,  0xFFFFFFF0); //0x000095FD
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in setting reload for timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERCompareSet(timers[i].baseAddr, 0xFFFFFFFF - 0x000095FD);
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in setting compare for timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMEREmuModeConfigure(timers[i].baseAddr, 2U);
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in setting emu mode for timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERIdleModeConfigure(timers[i].baseAddr, TIMER_NO_IDLE);
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in setting idle mode for timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERPostedModeConfig(timers[i].baseAddr, TIMER_POSTED);
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in setting posted mode for timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERReadModeConfig(timers[i].baseAddr, TIMER_READ_MODE_POSTED);
    if (status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in setting read mode for timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERPreScalerClkEnable(timers[i].baseAddr, timers[i].timerPrescaler);
    if( status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in setting no prescaler for timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    
    status = TIMERIntRawStatusSet(timers[i].baseAddr, TIMER_INT_MAT_EN_FLAG);
    if( status != SW_OK)
    {
        snprintf(buffer, sizeof(buffer),
            "\nGPT_ERR(Timer_Init): Error in setting raw status for timer %d !!!", i);
        uart_write(DEBUG_UART,buffer);
    }
    

    此致

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

    尊敬的 NER:

    我会重新检视您的代码、明天回来给您。

    谢谢、

    Neehar

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

    嗨、Neehar、

    是否有任何更新?

    此致

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

    尊敬的 NER:

    我仍在研究这个问题、我会跟进。

    谢谢、

    Neehar

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

    您好、

    是否对此主题进行了任何更新?

    此致

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

    尊敬的 NER:

    写入 TLDR 寄存器并进行验证后、您是否能够回读? 此外、在进行更改之前和之后 TCRR 计数器值的行为是什么?

    您能否详细介绍一下为什么要尝试动态更改 TLDR 寄存器?

    谢谢、

    Neehar

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

    您好、

    是、我在问题说明中给出的值是在初始化后读取的寄存器值。

    整个系统启动并运行后、我想使用 MCU_TIMER4 来发布 A 二进制信标 。 下面是我使用的初始化和启动序列(之前分享了代码;这里总结了相关步骤)。

    初始化序列

    1. 构建计时器配置结构。

    2. 禁用计时器。

    3. 重置计时器配置。

    4. 将计数器设置为TIMER_MAX_RESOLUTION - 0x000095FD

    5. 将重新加载值设置为TIMER_MAX_RESOLUTION - 0x000095FD

    6. 将模拟模式设置为TIMER_FREE

    7. 将空闲模式设置为 智能空闲

    8. 配置 RAW 状态位 (TIMER_INT_MAT_EN_FLAG)。

    9. 请求静态寄存器。

    启动序列(在启动计时器的函数中)

    1. 使用启用计时器中断TIMER_INT_MAT_EN_FLAG

    2. 启用计时器。

    3. 阅读 TOWR 寄存器值。

    问题

    我是否缺少任何步骤来触发匹配中断、以便可以从 ISR 发布二进制信标? 请提供有关我应该为 MCU_TIMER4 配置或验证的任何其他内容的指针。

    此致

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

    尊敬的 NER:

    您的引导模式是什么? 设置仿真模式和智能空闲模式的原因是什么?

    谢谢、

    Neehar

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

    您好、

    我使用 SPL 引导模式。 我将 IDLE 模式设置为 Smart IDLE 的原因是因为根据 J721E_register5.pdf 文档、只应使用智能空闲模式、其他模式仅用于调试:

    此致

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

    尊敬的 NER:

    让我更深入地研究一下、然后回到您的身边。

    谢谢、

    Neehar

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

    您好、

    是否有任何更新?

    此致

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

    尊敬的 NER:

    [报价 userid=“574070" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1564501/sk-tda4vm-unable-to-modify-the-interrupt-period-of-the-clock/6040299

    此外、在进行更改之前和之后 TCRR 计数器值的行为是什么?

    [/报价]

    是否有更新?

    将 reload 值设置为TIMER_MAX_RESOLUTION - 0x000095FD.
    [quote userid=“600131" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1564501/sk-tda4vm-unable-to-modify-the-interrupt-period-of-the-clock
    • TIDAR: 0x50003900

    [/报价]

    问题是否未设置重新加载值? 并保持该值?

    谢谢、

    Neehar

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

    嗨、Neehar、

    是否有更新?

    我应该每秒检查一次该值吗?

    问题是否未设置重新加载值? 并保持该值?

    我会详细解释我的目的。  我有一个任务被二进制信标阻止。 我想使用 2kHz 计时器来发布该信标。 问题 在于我 将 计时器配置为所需的频率、但是计时器仅以 200Hz 的频率运行(通过切换 GPIO 引脚来管理计时器测试,并且此引脚连接到逻辑分析仪)。 即使我尝试为 TLDR 设置另一个值、计时器也会以相同的 200Hz 频率运行。

    此致、
    NER

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

    所以,这是我的代码:

    static My_timer timers[MAX_GPT_CHNL_INITIALIZED] = {
        {
            .baseAddr       = CSL_MCU_TIMER0_CFG_BASE,
            .timerStatus    = GPT_UNINITIALIZED,
            .channelMode    = GPT_CH_MODE_CONTINUOUS,
            .timerId        = TISCI_DEV_MCU_TIMER0,
            .timerClkSrc    = TISCI_DEV_MCU_TIMER0_TIMER_TCLK_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler = TIMER_PRESCALER_CLK_DIV_BY_64, //(uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum    = GPT_MCU_0_INT,
            .channelId      = GPT_CH_GPTIMER1,
            .timerIsr       = timer_mcu_isr_chnl1
        },
        {
            .baseAddr      = CSL_MCU_TIMER1_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER1,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER1_CLKSEL_VD_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= TIMER_PRESCALER_CLK_DIV_BY_64, //(uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = GPT_MCU_1_INT,
            .channelId     = GPT_CH_GPTIMER2,
            .timerIsr      = timer_mcu_isr_chnl2
        },
        {
            .baseAddr       = CSL_MCU_TIMER2_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER2,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER2_TIMER_TCLK_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= TIMER_PRESCALER_CLK_DIV_BY_64, //(uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = GPT_MCU_2_INT,
            .channelId     = GPT_CH_GPTIMER3,
            .timerIsr      = timer_mcu_isr_chnl3
        },
        {
            .baseAddr       = CSL_MCU_TIMER3_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER3,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER3_CLKSEL_VD_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= TIMER_PRESCALER_CLK_DIV_BY_64, //(uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = GPT_MCU_3_INT,
            .channelId     = GPT_CH_GPTIMER4,
            .timerIsr      = timer_mcu_isr_chnl4
        },
        {
            .baseAddr       = CSL_MCU_TIMER4_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER4,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER4_TIMER_TCLK_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= TIMER_PRESCALER_CLK_DIV_BY_64, //(uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = GPT_MCU_4_INT,
            .channelId     = GPT_CH_GPTIMER5,
            .timerIsr      = timer_mcu_isr_chnl5
        },
        {
            .baseAddr       = CSL_MCU_TIMER5_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER5,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER5_CLKSEL_VD_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= 0xFFU, //(uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = GPT_MCU_5_INT,
            .channelId     = GPT_CH_GPTIMER6,
            .timerIsr      = timer_mcu_isr_chnl6
        },
        {
            .baseAddr       = CSL_MCU_TIMER6_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER6,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER6_TIMER_TCLK_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= TIMER_PRESCALER_CLK_DIV_BY_64, //(uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = GPT_MCU_6_INT,
            .channelId     = GPT_CH_GPTIMER7,
            .timerIsr      = timer_mcu_isr_chnl7
        },
        {
            .baseAddr       = CSL_MCU_TIMER7_CFG_BASE,
            .timerStatus   = GPT_UNINITIALIZED,
            .channelMode   = GPT_CH_MODE_CONTINUOUS,
            .timerId       = TISCI_DEV_MCU_TIMER7,
            .timerClkSrc   = TISCI_DEV_MCU_TIMER7_CLKSEL_VD_CLK_PARENT_J7_WAKEUP_16FF_WKUP_0_WKUP_RCOSC_12P5M_CLK,
            .timerPrescaler= TIMER_PRESCALER_CLK_DIV_BY_64, //(uint32_t) GPT_PRESCALER_NO_PRESCALER,
            .timerIntNum   = GPT_MCU_7_INT,
            .channelId     = GPT_CH_GPTIMER8,
            .timerIsr      = timer_mcu_isr_chnl8
        }
    };
    
    static int32_t intern_registerISR(uint32_t intNum, void f(uintptr_t))
    {
       int32_t configStatus = SW_OK;
        OsalRegisterIntrParams_t    intrPrms;
        OsalInterruptRetCode_e      osalRetVal;
        HwiP_Handle                 hwiHandle = NULL;
    
        /* Enable CPU Interrupts and register ISR */
        Osal_RegisterInterrupt_initParams(&intrPrms);
        /* Populate the interrupt parameters */
        intrPrms.corepacConfig.arg              = (uintptr_t) NULL;
        intrPrms.corepacConfig.isrRoutine       = f;
        intrPrms.corepacConfig.priority         = 2U;
        intrPrms.corepacConfig.corepacEventNum  = 0U;
        intrPrms.corepacConfig.intVecNum        = intNum;
    
        /* Register interrupts */
        osalRetVal = Osal_RegisterInterrupt(&intrPrms, &hwiHandle);
        if(OSAL_INT_SUCCESS != osalRetVal)
        {
            uart_log("\nDEBUG_ERROR(Reg_ISR): Error in regis ISR");
            uart_log("intNum: %d!!!", intNum);
            configStatus = osalRetVal;
        }
        return configStatus;
    }
    
    void timer_init()
    {
        int32_t status = SW_OK;
        HwiP_Handle hwiHandle;
        OsalRegisterIntrParams_t    intrPrms;
        OsalInterruptRetCode_e      osalRetVal;
        struct tisci_msg_rm_irq_set_req     rmIrqReq;
        struct tisci_msg_rm_irq_set_resp    rmIrqResp;
        
    
        /** Check Clck module and set the desired Clck freq */
        for ( size_t i = 4; i < 5; i++ )
        {
            /**< Reset the timer */
            status = TIMERReset(timers[i].baseAddr);
            if (status != SW_OK)
            {
                uart_log("\nGPT_ERR(Timer_Init): Error in resetting timer %d !!!", i);
            }
            
            status = TIMERResetConfigure(timers[i].baseAddr, TIMER_SFT_RESET_ENABLE);
            if (status != SW_OK)
            {
                uart_log("\nGPT_ERR(Timer_Init): Error in resetting config timer %d !!!", i);
            }
    
            status = TIMERPostedModeConfig(timers[i].baseAddr, TIMER_NONPOSTED);
            if (status != SW_OK)
            {
                uart_log("\nGPT_ERR(Timer_Init): Error in setting posted mode for timer %d !!!", i);
            }
    
            status = TIMERReadModeConfig(timers[i].baseAddr, TIMER_READ_MODE_NONPOSTED);
            if (status != SW_OK)
            {
                uart_log("\nGPT_ERR(Timer_Init): Error in setting read mode for timer %d !!!", i);
            }
    
            status = TIMERModeConfigure(timers[i].baseAddr, TIMER_AUTORLD_NOCMP_ENABLE);
            if (status != SW_OK)
            {
                uart_log("\nGPT_ERR(Timer_Init): Error in configuring timer %d !!!", i);
            }
            
            status = TIMEREmuModeConfigure(timers[i].baseAddr, TIMER_FREE);
            if (status != SW_OK)
            {
                uart_log("\nGPT_ERR(Timer_Init): Error in setting emu mode for timer %d !!!", i);
            }
            
            status = intern_registerISR(timers[i].timerIntNum, timers[i].timerIsr);
            if (status != SW_OK)
            {
                uart_log("\nGPT_ERR(Timer_Init): Error in registering interrupt for timer %d !!!", i);
            }
    
            uart_log("\nDEBUG_INFO(Timer_init): %d timer init done!", i);
    
            timers[i].timerStatus = GPT_INITIALIZED;
        }
    
        uart_log("\nDEBUG_INFO(Timer_init): Timer initialization done !!!");
    
    }
    
    void timer_mcu_isr_chnl5(uintptr_t arg) 
    {   
        uart_log("\nTimer 5 interrupt");
        gpio_set(TDA4VM_GPIO_PROFILING_IMU);
        uart_log("\nDuring toggle");
        gpio_reset(TDA4VM_GPIO_PROFILING_IMU);
        uart_log("\nAfter toggle");
    }
    
    void timer_start(uint8_t index)
    {
        int32_t status = SW_OK;
    
        //TIMERIntStatusClear(timers[index].baseAddr, TIMER_INT_MAT_IT_FLAG);
        //TIMERIntStatusClear(timers[index].baseAddr, TIMER_INT_OVF_IT_FLAG);
    
        status = TIMEREnable(timers[index].baseAddr);
        if (status != SW_OK)
        {
            uart_log("\nGPT_ERR(Timer_Init): Error in enabling timer %d !!!", index);
        }
    
        /**< Setting up the data  structure of the timers */
        status = TIMERIntEnable(timers[index].baseAddr, TIMER_INT_OVF_EN_FLAG);
        if (status != SW_OK)
        {
            uart_log("\nGPT_ERR(Timer_Init): Error in enabling interrupt for timer %d !!!", index);
        }
    }

    在中main()、我仅初始化 UART 和 GPIO 外设。 计时器处于溢出 (OVF) 模式(如果 I 设置为) TIMERReloadSet
    TIMER_MAX_RESOLUTION - 0xFFF095FD

    计时器会切换 GPIO 引脚、I measure a 240Hz 切换。 但是、如果我增加TIMERReloadSet
    TIMER_MAX_RESOLUTION - 0x000095FD

    尽管 UART 打印仍然有效、但 GPIO 不再切换且 Linux 报告处理器崩溃消息。

    此致、
    NER