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.

[参考译文] TMS570LS3137:尝试针对0级中断从 N2HET1激活 IRQ

Guru**** 2482105 points
Other Parts Discussed in Thread: TMS570LS3137, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/715329/tms570ls3137-trying-to-activate-irq-from-n2het1-for-level-0-interrupt

器件型号:TMS570LS3137
主题中讨论的其他器件: HALCOGEN

大家好、

我试图激活针对0级(高优先级)的 N2HET1中断生成、但无法将其到达定义的 ISR。

我有以下设置:

L00 CNT...
L01 WCAP、IRQ = on
L02 WCAP、IRQ = on 

希望在输入信号的上升沿从 L01和 L02生成中断。 HET1 RAM 已正确编程(请参阅调试器中的全部3条指令)。

当在调试器(IAR EWARM v7.x)下中断时、我具有以下寄存器设置:

REQENASET0 = 0x0018080F (在中断通道10上启用 HET1 0级中断)

HET1PFR = 0x00000200 (VCLK2=100MHz:HR=1、LR=4) 
HET1PRY = 0x00000006 (L01和 L02为高优先级- 0级) HET1INTENAS = 0x00000006 (L01和 L02为中断启用) HET1FLG = 0x00000002 (中断 L01/L32/L64... 已生成) HET1OFF1 = 0x00000002 (确认 L01中断挂起)

所有其它中断(正常 IRQ 和 FIQ)运行良好。

我在某个地方遗漏了什么吗?

感谢您的支持。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我所期望的是、当所有这些 HET1寄存器按这种方式设置时、它应该进入我的 ISR (断点集)、但从未进入。

    此外,TMS570LS3137器件数据表 spns162c 介绍 N2HET1 0级(通道10)和1级(通道24)中断(表6-31),而其 TRM spnu499c HETPRY 寄存器则介绍 N2HET1优先级1和优先级2…… 有问题吗?

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

    通道10在 VIM 中未启用。 您正在设置通道0 - 3、11、19和20的启用位。

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

    您好、Sunil、

    感谢您指出这一点、我的错。 出于某些原因、我在96个条目表中交换了 ISR 名称#10和#11的行位置 、该表用于确定 REQENASET0寄存器内容。 现在、这要简单得多、因为我已经禁用了其他未使用的 ISR、 并且 REQENASET0=0x00100405、现在启用了 N2HET1 0级的 ISR #10。

    但是、一旦我通过将 HET1GCR 的位0置位为1来开启 N2HET1机器。为了实现寄存器1、即使没有针对 WCAP 指令的任何上升沿、N2HET1中断也会针对 L01和 L02 (N2HET1标志寄存器)进行声明。 奇怪的是、我的代码在这之后丢失了、即使我手动清除了"目标"位并读取了 HET1FLG 以清除中断。 我的 ISR #10代码如下所示、断点已在"dummy=HET1FLG "行上设置、但调试器停止在"_IRQ _ARM void IRQHandler_N2Het1Level0 (void)"上、并且停留在那里、无法使用"run"命令继续、并且从未在 dummy=处达到断点:

    _IRQ __ARM void IRQHandler_N2Het1Level0 (void)
    {
    虚拟= HET1FLG;
    }
    

    下面是我的原始 N2HET 代码(程序 RAM 包含由 TI NHET IDE 生成的相应代码):

    L00 CNT {NEX=L01、ANGAL_COUNT=OFF、REG=A、max=0x01FFFFFF}
    L01 WCAP{NEX=L02、REG=A、PIN=CC16、IRQ=ON、EVENT_RISE、 HR_LR=HIGH、DATA=0}
    L02 WCAP{NEX=L00、REG=A、PIN=CC20、IRQ=ON、EVENT=RISE、 HR_LR=HIGH、DATA=0}
    

    您是否可以将此主题保持打开状态、以便我稍后可以提供有关该问题的更多详细信息?

    另外、您能否确认我的第二个帖子的问题、即级别0是否为高优先级、级别1是否为低优先级?

    谢谢!

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

    我当然可以让帖子保持开放状态、直到您的所有问题得到解答。 高/低优先级由中断请求连接到的 VIM 上的通道编号决定。 中断管理器(VIM)对通道编号较低(0最高、127最低)的通道进行优先级排序。 这就是为什么 HET 中断0是一个更高优先级的中断、因为它连接到 VIM 通道10、而 HET 中断1是一个较低优先级的中断、因为它连接到 VIM 通道24。

    至于在第一次执行 WCAP 时产生的中断、当您启用 HET 时、通道 CC16和 CC20是否被驱动为低电平?

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

    现在只有引脚 CC20连接到函数发生器、CC16的 N2HET1中断被禁用、只有 CC20/L02被启用。 发生器输出一个100Hz 的方波、并且 L02应该在每个上升边沿上发出 IRQ。 我看到针对 L02行的 HET1FLG = 0x00000004是正确的、但我的调试器只是在我的代码中的某个位置中断(恰好在设置 HET1GR.TO=1之后、并且不能继续执行(即、调试器运行命令无效、并且反汇编仍然在同一条不是循环命令的指令上)。

    N2HET1被配置为以100MHz 运行(每条指令10ns、LR=4、持续40ns、时隙数=4)。

    有什么想法我应该在哪里寻找?

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

    我使用的是早期版本的 TI HDK、MCU 标记为 TMX570LS3137BZWTQ1YFB - 25ASX4WGI。

    请注意、它不是 TMS570、而是 TMX570。 想知道这是否会产生影响(该 MCU 中存在缺陷???) (笑声)

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

    现在、我已经从 N2HET1定时器机器(L01和 L02都具有 IRQ=OFF)、HET1INTENAS=0中删除了 IRQ 生成、所以 H2HET 应该完全独立(HET1FLG 总是=0)。 但是、一旦我打开 N2HET1机器、代码就会丢失、并可能在任何指令处停止、并保持在那里!

    可能与我的 N2HET 代码无关、而是 N2HET 定时器机器的配置。

    您能建议您在哪里查找吗?

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

    N2HET 处理引擎与主 CPU 相当独立。 您是否可以上传您的代码项目以便复制您的观察结果? 您的 main()例程是什么样的?

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

    您好、Sunil、

    当然、谢谢您! 请找到与项目相关的随附代码和 N2HET 初始化代码、它们与我最新帖子的配置相对应。

    在 McuDevices.cpp 中,从 main()调用的入口点是 void tagMcuPeripheral::InitAllDevices()。 在调用 N2HET1.Init()(其中最后一条指令将 N2HET1定时器机器打开)之后、以及在执行 VIM.enable1()之前、冻结(丢失)会立即发生。 请注意、此配置不会产生 N2HET1中断。

    谢谢!

    e2e.ti.com/.../3404.FreqSampling.zip

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

    如果 CPU 在运行该测试之前进入调试状态、CCMR4自检不运行、也不会完成、因此代码执行会丢失。 您能否确保仅在 CCMR4自检完成后设置调试断点?

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

    您好、Sunil、

    感谢您的建议。 它可能会解释该行为。 但是、无论我是否设置了断点、只要 HET 机器被打开、它就会丢失。

    我在我的末尾继续尝试、我在将 memcpy()连接到 HET RAM 之后打开 HET 机器(以位表示)之前插入了5ms 的延迟、猜猜是什么、它正常工作并且不再丢失。

    //启用引脚结构的输出缓冲器、保护程序字段
    //忽略挂起=0、N2HET 是主器件(单个 N2HET 配置)、关闭 N2HET
    
    HET1GCR = 0x01050000;
    
    //将压力采样程序设置为 N2HET RAM
    
    memcpy ((void *)&HET1P_RAM_base、HET_INIT0_PST、sizeof (HET_INIT0_PST));
    Clock.WaitDelayM(5);
    
    //打开 N2HET:立即开始采样
    
    HET1GCR = 0x01050001;
    

    您对此有什么解释吗? 我必须错过 TRM 中的某个位置的这个延迟。 但上帝,我在其他项目中没有这种拖延,所有项目都运转正常!!!

    奇怪!

    谢谢。

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

    很抱歉、我太快地庆祝了我的发现。

    在几个复位周期后、同样的问题再次出现。 现在、即使延迟了5ms、仍然不幸运。

    我对 CCMR4F.RunTests ()的调用进行了注释、并将 HET1INTENAS 设置为0:仍然不幸运。

    我可以从代码丢失问题中找出的唯一方法是:在 memcpy()存储到 HETP RAM 后、在5ms 的等待延迟处建立断点、在此期间、我手动转到 HETP RAM 位置并清除 L00、L01和 L02中的所有代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这意味着、如果我在没有程序的情况下打开 N2HET、就不会出现代码丢失问题。 否则、即使我没有从 N2HET 生成 IRQ 来消除与 CPU 的交互、仍然不工作。

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

    Sunil、

    一旦 N2HET 机器被启用并"运行"、 在停止执行之后、即使在发出多个"run"命令之后、调试器始终保持在非常相同的指令上、在这种情况下、它处于 N2HET 0级的 IRQ 处理程序的入口点、如下所示(从未到达红色的断点):

    您能告诉我原因是什么、我应该查看哪些寄存器吗?

    谢谢。

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

    您能否向我发送一个可执行文件或整个代码项目、而不仅仅是您项目的 HALCoGen 文件? 将程序复制到 HET RAM 后、不需要延迟。 在跳转到 main()例程之前,代码是否经过系统初始化? 是否所有时钟和外设都已初始化?

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

    Sunil、

    我已经找到了一个非常具体的问题位置、如果这仍然对我们没有帮助、我将毫无问题地转发您请求的数据、并提前感谢。 此外、我只想告诉大家、时钟和域应该都很好、因为我的 RS232 @57600bps 和我的1ms 系统节拍中断(RTI)都按预期运行。

    在今天的所有故障排除中、我确定 HDK TMX570 H2HET1引脚 CC16 (MCU 引脚 A4或 HDK J11引脚54) 不能满足我的要求。 每当我使用该引脚时、软件都会丢失并始终保持在一条指令上、这始终是关联 ISR 的第一条指令。

    实质上、以下代码100%正常运行:

    L00 CNT {NEX=L01、ANGAL_COUNT=OFF、REG=A、max=0x01FFFFFF}
    L01 WCAP{NEX=L00、REG=A、PIN=CC20、IRQ=ON、EVENT_RISE、 HR_LR=HIGH、DATA=0}
    

    但是、当将 CC20替换为 CC16时、它会丢失:

    L00 CNT {NEX=L01、ANGAL_COUNT=OFF、REG=A、max=0x01FFFFFF}
    L01 WCAP{NEX=L00、REG=A、PIN=CC16、IRQ=ON、EVENT_RISE、 HR_LR=HIGH、DATA=0}
    

    有线索吗?

    我明天会检查、如果我发现了什么、我会告诉您。 HDK 中的这个引脚可能被保留用于其他东西、或者我未正确初始化它。

    但是、如果我不是错的话、这个引脚只有一个单一用途、HET1[16]。 请参阅 HDK 电路原理图第8和29页。

    谢谢。

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

    早上好、Sunil、

    快速问题:请告诉我、如果 LR=4指令、我是否必须为 L00、L01、L02和 L03定义所有行、或者我可以将 L03保留为未定义、因为没有行将 NEXT 设置为 L03?

    在我的示例中、只定义了3行、我在存储器中注意到、从地址0xFF460030开始、所有的行都是垃圾、这可能会解释代码丢失的原因。

    谢谢。

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

    如果需要、HET 程序中只能有三条指令。 只需确保 L02的"下一条指令"被编程为 L00。 这将完成 HET 环路。 您粘贴在上面的 HET 代码已经实现了这一点。

    我将查看您之前的帖子、并返回给您。 N2HEt1[16]信号没有任何特定的连接、只连接到连接器。

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

    您好、Sunil、

    感谢你的答复。 只是想让您知道、我设法使用 N2HET1在使用 HDK 的调试中取得了良好进展。 但是、我必须手动清除第4条指令占用的16字节空间、才能使其正常工作、正如您在下面的快照中看到的(同样、我的 VCLK=100MHz、hr=1、LR=4、请注意、从第5条指令@ 0x460040开始、 所有的垃圾-也许你可以给我一个主清除位来清除所有160条指令内存???)。 通过此修复、偶数引脚 NHET1[16]现在正常工作、永远不会丢失。 来自 L01和 L02的中断都按预期被调用。

    另一个观察结果是、即使在测试期间使用 PF=0x00001600将 L01和 L02的程序存储器跳回到 L00 (因此 L02永远不会被执行)、也会观察到两条线路都被执行、并且 IRQ 生成、ISR 被调用并被验证、计数器增加等。 这是不正常的。 这种行为让我相信、当 LR=4时、所有4条指令都在循环回路之前执行。 因此、问题就在于此。

    我知道,鼻子! 但是、这可能是因为我的 MCU 是 TMX570而不是 TMS570吗?

    如果您有适合我的东西、请告诉我。

    再次感谢!

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

    我已经使用全局硬件初始化初始化来初始化 N2HET1 RAM、因此所有未使用的指令存储器现在都被归零、这可以修复我之前发布的帖子(快照)中的垃圾问题。

    然而、LR=4、并且唯一的3条指令问题仍然存在(在我的情况下、HET 继续执行高达4的未定义指令)。

    感谢您的任何更新。