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.

[参考译文] AM2634:AM2634 MCAL 问题:MCAL 演示工程、中断处理、VIM 错误和 GPT 计时器间隔

Guru**** 2390765 points
Other Parts Discussed in Thread: AM2634

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1495345/am2634-am2634-mcal-issues-mcal-demo-project-interrupt-handling-vim-bug-and-gpt-timer-interval

器件型号:AM2634

工具/软件:

尊敬的 TI 团队:

我使用的是 AM2634和 MCAL 软件、我遇到了以下问题。

TI 是否提供 MCAL 演示工程?

目前、 MCAL_AM263X_10.00.00.zip MCAL 演示工程。

2.读取当前正在执行的寄存器的中断号

使用 TI AM263x 时、不能通过寄存器直接读取当前执行中断的中断号。 相反、有必要首先读取另一个寄存器(存储当前正在执行中断处理程序的地址)、然后读取原始寄存器以获取中断编号。  我不确定此方法是否被视为一种权变措施。

/* Get current interrupt number */
VIM_InterruptHandler interruptHandler = (VIM_InterruptHandler)(ptrVIMRegs->irqVectorAddress);
uint32 intNum = (ptrVIMRegs->activeIrq & 0x3FFU);

3.在演示代码中使用 sys_vim.c 时遇到的问题

TI 提供的 MCAL 包括一个 VIM (矢量中断管理器)演示代码、该代码使用汇编语言来启用和禁用中断(enableDisableIrqFiq)。 但是、当启用编译器优化时、此汇编代码会导致陷阱。 这似乎是演示代码中的一个错误。 TI 是否有这个演示代码的更新版本?

4.如何计算 GPT 定时器中断间隔

目前、我们正在使用由 RTI 模块驱动的 GPT 计时器。 RTI 模块有一个根据进行分频的时钟源 ClockDivId 、得到的频率将成为实际 RTI 频率。 所有这些配置均通过设置 EB

在运行时、我们可以配置 RTI 触发事件的频率、每个事件触发 GPT 计时器一次。 StartTime()可以在运行时调用该函数来设置中断间隔。

但是、计算得出的中断间隔与测量结果不匹配。

余弦值 EB 设置:

  • GPT 计时器参考McuClockSettingConfig_RTI0McuClockReferencePoint_0(图1)。

  • McuClockReferencePoint_0进行配置 2E8. (图2)。

  • 时钟分频器为 0 (图3)。

图1.  

图2.   

图3.

运行时设置:

  • 比较递增计数器1 设置为 199 (图4)、表示每200个周期触发一次事件。

  • 这意味着 2E8 / 200 = 1E6 约为 每事件1微秒

  • 图5显示 GPT 计时器已启动、并且每次都会发生中断 20,000个事件 、这意味着它应该每被触发一次 1微秒× 20,000 = 20ms

  • 但是、使用 TSMASTER 时、实际测量的中断间隔为 0.2ms 、即 比预期短100倍

图4.   

图5.
这些是我的问题、我期待着你的答复。
谢谢。

此致、
人参 pH 值

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

    尊敬的人参:

    由于专家目前在办公室外、请预计响应会有些许延迟。

    此致、
    Shaunak

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

    您好:

    Unknown 说:
    当前 MCAL_AM263X_10.00.00.zip TI 提供的不包含 MCAL 演示工程。

     是(mcal_demo 不作为 mcal 版本的一部分提供)、是否有任何对 mcal_demo 的特定要求? 功能方面的测试是 mcal/示例的一部分。

    Unknown 说:
    2. 读取当前执行寄存器
    的中断号

    这两条线路的用途不同、与相互依赖无关。

    [quote userid="636181" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1495345/am2634-am2634-mcal-issues-mcal-demo-project-interrupt-handling-vim-bug-and-gpt-timer-interval 在演示代码中使用 sys_vim.c 时遇到的问题

    什么陷阱? 需要更清楚地了解行为。

    [quote userid="636181" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1495345/am2634-am2634-mcal-issues-mcal-demo-project-interrupt-handling-vim-bug-and-gpt-timer-interval 如何计算 GPT 计时器中断间隔

    我们将进行分析并回复您。

    谢谢、
    Gunjan

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

    您好:
    感谢您的答复、

    问题3.

    在中sys_vim.c(provided by MCAL_AM263X_10.00.00.zip)、在该vimIrqDispatcher函数中MCAL_NESTED_INTERRUPTS_IRQ_ENABLE、当启用该函数时、enableDisableIrqFiq(1)将调用该函数(图1)。 该enableDisableIrqFiq(1)函数是用汇编语言编写的(图2 ),它直接将 CPSR 存储到寄存器中r0。 这会覆盖先前存储在中的中断处理程序r0、导致在尝试调用中断处理程序时跳转到不正确的内存位置。 这会导致陷阱。

    如图3中所示、地址0x1780x18C包含的汇编代码enableDisableIrqFiq、地址中的0x194分支设置为不正确的r0值、这会导致陷阱。 图4显示在执行中的指令后0x194、将触发预取陷阱。

    此问题仅在启用编译器优化时发生-在这种情况下、寄存器r0用于临时存储中断处理程序。

    所使用的编译器 TI Clang v4.0.1 LTS

     图1.

     图2.

     图3.

     图4.

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

    关于问题2、下面是更详细的说明。 我编写了一个函数、使用两种不同的方法、通过寄存器读取当前执行的中断号。 图1显示了直接读取中断号的方法、而图3显示了先读取中断处理程序、然后读取中断号的方法。 图2和图4分别显示了相应的结果。 如图2所示、intNum为0、未能读取预期值91、而在图4中、成功读取了正确的值。
     图1.

     图2.

     图3.

     图4.

    Thannks、
    人参 pH 值

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

    尊敬的曾:

    Unknown 说:
    2. 读取当前执行寄存器
    的中断号

    您可以从 VIM 寄存器获得中断号:ACTIVEIRQ

    例如、以下设置中的中断号为0x5B:  R5FSS0_CORE0_INTR_RTI1_INTR_0

    [quote userid="636181" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1495345/am2634-am2634-mcal-issues-mcal-demo-project-interrupt-handling-vim-bug-and-gpt-timer-interval 在演示代码中使用 sys_vim.c 时遇到的问题

    优化级别是什么? 我尝试了 o=2、没有发现任何问题。

    [quote userid="636181" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1495345/am2634-am2634-mcal-issues-mcal-demo-project-interrupt-handling-vim-bug-and-gpt-timer-interval 如何计算 GPT 计时器中断间隔

    它由 来自 EB Tresos GUI 的 GptModuleXCounterBlkYFrequency 确定。 它可以是1Hz、2Hz、...

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

    我可以读取中断号(前5位):

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

    该器件具有4个 RTI 模块。 OS 计时器使用 RTI0。 GPT 使用其他模块、这些模块取决于 EB GUI 的配置。

    模块编号是 GptChannelId/4 --> RTI1 (1)、RTI2 (2)或 RTI3 (3)

    每个 RTI 模块都有两个计数器:计数器0和计数器1

    计数器通过 GptCOunterBlkId 进行选择:

    使用此 GUI 配置计时器频率:RTI0计数器0和计数器1为1Hz;RTI1计数器0为5Hz、计数器1为6Hz;RTI2计数器0为8Hz。

    您的 GPT 配置集应映射到这些设置。