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.

[参考译文] TM4C129ENCPDT:QEI:索引中断未触发

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/665108/tm4c129encpdt-qei-index-interrupt-not-triggering

器件型号:TM4C129ENCPDT
主题中讨论的其他器件:TM4C123AH6PM

一段时间前、我发布了以下帖子:

https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/607014

这基本上从未得到答复。

我遇到了一个永远不会生成 QEI 索引中断的问题、即 QEIRIS.INTINDEX 永远不会变为1。

这是用于初始化 QEI 和处理中断的已拆分代码:

void IsrQe0Handler (void)
{
uint32_t 状态;

状态= MAP_QEIIntStatus (QEI0_BASE、TRUE);
MAP_QEIIntClear (QEI0_BASE、状态);

if (Status & QEI_INTERROR){
//处理 QEI 错误
//...
}

if (Status & QEI_INTINDEX){
//句柄索引脉冲
//-->如果


(Status & QEI_INTDIR){
//句柄方向更改
//...
},此条件永远不会触发<--}
}


bIDInitQei (void)
{
if (!map_SysCtlPeripheralPresent (SYSCTL_Periph_QEI0)
)返回 false;

//重置并启用外设
map_SysCtlPeripheralDisable (SYSCEI_PERIPH_QE0);
map_SysCtlPeripheralReset (SysCtl_Periptl

);//将 GPIO0_GPIO0_GPIO0_GP0_GP0_GPIO0_PIN_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_PIN_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0









MAP_GPIOPinTypeQEI (GPIO_PORTL_base、GPIO_PIN_2);
MAP_GPIOPINTypeQEI (GPIO_PORTL_base、GPIO_PIN_3);

//配置 QEI 外设
MAP_QEIConfigure (QEI0_BASE、QEI_CONFIG_CAPTURE_A_B | QECONFIG_SIMPLE_RESET_QE0);QEIV0 (QECONFIG_SION_RESET_SION_SIMP_QE0_RESET_QETOSION_SIMP_QE0_SIMP_QE0_SIMPLE_QE0_CONFIG、QE0_SIMP_QE0_QETOSION_SIMP_SIMP_SI

QEI_VELDIV_1、Global. SysClockFreqHz/100);
MAP_QEIVelocityEnable (QEI0_BASE);
MAP_QEIEnable (QEI0_BASE);
MAP_QEIIntEnable (QEI0_BASE、 (QEI_INTERROR | QEI_INTINDEX | QEI_INTDIR);
MAP_IntPrioritySet (INT_QEI0、0x20);
MAP_IntEnable (INT_QEI0);

返回 TRUE;
} 

未触发的条件为 Status = QEI_INTINDEX 、如注释中标记的那样。  

我已经验证了我们的正交编码器确实在按预期产生索引脉冲、并且信号被路由到(并到达)正确的 MCU 引脚。

因此、我测试了另一种方法:

void IntGpioPortLHandler (void)
{
uint32_t Status;

Status = GPIOIntStatus (GPIO_PORTL_base、true);
GPIOIntClear (GPIO_PORTL_base、Status);

如果(状态=GPIO_INT_PIN_3){
//此条件会触发
//...
}
}


bCtlInitQei (void)
{
if (!MAP_SysCtlPeripheralPresent (SYSCTL_Periph_QEI0)
)返回 false;

//重置并启用外设
MAP_SysCtlPeripheralDisable (SYSCEI_PERIPH_QE0);MAP_SysCtlPeripalReset
(SysCtl_GPIO0_GPIO0_GP0_GP0_RESPON_GPIOR_GPIO0_GPIOR_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIOR_GPIO0_GPIOR_GPIO0_RESP0_GPIO0_GPIOR_GPIO0_GPIO0_GPIO0_GPIOR_GPIO0_GPIO0_GPIO0_GPIO0_GPIOR_GPIO0_GPIO0_GPIO0_GPIOPT_GPIO0_GPIO0_GPIOPT_GPIO0_GPIO0_GPIO0_GPIOPT_GPIOPT_GPIOPT_GPIOPT_GPIO0_GPIOPT_GPIO0_GPI










GPIO_PIN_2);

//配置 QEI 外设
映射_QEIConfigure (QEI0_BASE、QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET | QEI_CONFIG_NO_SWAP、0xFFFF);
MAP_QEIPositionSet (QEI0_BASE、
QEIV0);配置 QEIV0基本配置 QEI_VELDIV_1、Global. SysClockFreqHz/100);
MAP_QEIVelocityEnable (QEI0_BASE);
MAP_QEIEnable (QEI0_BASE);
MAP_QEIIntEnable (QEI0_BASE、 (QEI_INTERROR | QEI_INTDIR));
MAP_IntPrioritySet (INT_QEI0、0x20);
MAP_IntEnable (INT_QEI0);

//索引引脚中断
MAP_GPIOIntClear (GPIO_PORTL_BASE、GPIO_INT_PIN_3);MAP_INT_GPIOIntType3
(GPIO_INT_INT_INT_BASE);GPIO_GPIOPTL_INT_GPIOPTL_INT_INT_INT_INT_INT_INT_INTRI
GPIO_PIN_3、GPIO_RISE_EDGE);
MAP_GPIOIntEnable (GPIO_PORTL_BASE、GPIO_INT_PIN_3);
MAP_IntPrioritySet (INT_GPIOL、 0x20);
MAP_IntEnable (INT_GPIOL);

返回 true;
} 

第二个代码在没有索引引脚的情况下初始化 QEI、然后将索引引脚初始化为在上升沿发生中断的 GPIO。

在此代码中、当正交编码器通过索引脉冲时、GPIO 中断会触发。

 为什么 QEI 索引中断永远不会触发?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、12月12日下午、
    您能否通过更改为 QEI_CONFIG_RESET_IDX 而不是 QEI_CONFIG_NO_RESET 来进行实验、并让我知道这是否会对索引中断的生成产生产生产生影响?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="12ve12pm"] 为什么 QEI 索引中断永远不会触发?

    首先是"免责声明"-我和我都不是129个家庭的"粉丝"。   我们在几个基本产品中部署了123 (其他产品的 M7s 在更高级的产品中)-我将根据我们对"123的真实情况来响应-希望这会重叠-为您提供帮助。

    简而言之、我的分析与供应商的分析不同...

    您的"Status = MAP_QEIIntStatus (QEI0_BASE、TRUE);"在我看来、对于最终参数应该采用"false"。    以下是我的理由: ( QEIIntStatus()的详细信息-来自 TM4C API)

    获取当前中断状态。
    //!
    //! \param ui32Base 是正交编码器模块的基址。
    //! 如果需要原始中断状态 (我认为这是您需要的)、则\param bMasked 为 false;如果需要屏蔽中断状态、则为 true (您选择的)。
    //!
    //! 此函数返回正交编码器模块的中断状态。  可以返回原始中断状态或允许反映给处理器的中断状态。
    //!
    //! \return 返回当前中断状态、枚举为的位字段
    //! b QEI_INTERROR、\b QEI_INTDIR、\b QEI_INTTIMER 和\b QEI_INTINDEX。  (是"故障中断触发器")

    uint32_t
    QEIIntStatus (uint32_t ui32Base、bool bMsed)  // 此处我已经为您(可能)麻烦的函数提供了 API 的源代码:

    //检查参数。
    //
    assert (((ui32Base == QEI0_BASE)||(ui32Base == QEI1_base));
    //
    //返回所请求的中断状态或原始中断状态

    //
    if (bMsed)(如果(bMsed)

    RETURN (HWREG (ui32Base + QEI_O_ISC));  // 此返回不会测试 QEI_O_RIS -这是必需的-以导致 QEI_Index 中断!

    其他

    return (HWREG (ui32Base + QEI_O_RIS)); // 此 return 执行此类测试!

    现在我已经查看了'123 MCU 中的 QEI 寄存器- 3个这样的 QEI 寄存器证明了关键: "QEIRIS、QEIISC、QEIINTEN。"   '123要求 设置 QEIRIS 和 QEIINTEN 的"bit_0"、以"将"QEI_INTINDEX "升级到 MCU 的 NVIC。"    现在按照"真实副本"-直接来自"123 MCU 手册-完全支持导致此类"基于索引的中断:"的要求

    选择"true"参数而非"false"参数(可能)会阻止或以其他方式将"QEIRIS bit_0"的检查(如上所述)用于触发 QEI 索引中断...

    如果供应商 TM4C件之间的技术相似性(基于"希望"、甚至"预期")不成功、至少已经提出了一个通用的"方法或路径-成功"、并且可以"建模"、以适应" MCU 系列"之间的(不需要的)差异。   (-尤其是那些 I2C"硬板!" 班次!)

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

    感谢你的答复。

    我做了实验,更改为 QEI_CONFIG_RESET_IDX,我可以确认现在正在生成索引中断-- 但是、坏消息是、我们无法在应用中以这种方式使用 QEI、因为每当 QEI 通过索引时、它都会将位置计数重置为0。

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

    尊敬的 CB1_MOBILE:

    感谢您的回复和解释您/您公司的体验。

    123和129非常相似、但正如我们所发现的、它们的差异足以让您遇到一些"问题!" 频率都很高。 我们之所以发现这一点、是因为我们正在使用 TM4C129ENCPDT 和 TM4C123AH6PM 开发具有多种电路板模型的产品线、并且我们正在为整个产品线开发一个软件代码库。 所以... 不久(希望今天晚些时候)、我将了解123与 QEI 的行为方式、并将告诉您。

    同时(仍在129版中),根据您的建议,我尝试在调用 QEIIntStatus()时将 true 更改为 false。 遗憾的是、这似乎没有产生任何影响。

    蔡国斌在我对 QEIConfigure()的调用中要求我尝试将 QEI_CONFIG_NO_RESET 更改为 QEI_CONFIG_RESET_IDX。

    因此、我尝试了 QEI_CONFIG_NO_RESET / QEI_CONFIG_RESET_IDX 的所有四种组合、判断对错。 下面是生成的真值表:

    QEIConfigure() QEIIntStatus() 是否触发 QEI_INTINDEX?
    ----------------------------------------
    QEI_CONFIG_NO_RESET 对 没有
    QEI_CONFIG_NO_RESET 错误 没有
    QEI_CONFIG_RESET_IDX 为 true 是
    QEI_CONFIG_RESET_IDX 错误 是的
    

    换言之、无论我使用的是 true 还是 false、它都不会产生任何影响。 可能这在123上会有所不同;我会告诉您。 同时...

    您说(我同意) 3个寄存器是关键寄存器:QEIRIS、QEIISC、QEIINTEN。 我熟悉这个系统、因为大多数外设都使用它。 通常、寄存器的名称以* RIS (原始中断状态)、* MIS (屏蔽的中断状态)和* INTEN (中断启用)结尾。 对于 QEI、本应命名为 QEIMIS 的寄存器因某种原因被命名为 QEIISC。 也许这是某种线索? 或者、这可能是一些传统命名方案的疏忽或遗漏? 谁知道。

    如果我不得不解释中断是如何触发的,通常说是在不同的片上外设之间,我对行为的观察表明了如下情况:某些事件导致一个*RIS 寄存器中的位被置位; 这与*十进制中的相应位进行与运算、结果被放置在* MIS 中(对于这个 QEI 外设为* ISC); MMIS 位一起进行或运算,结果与 NVIC EN*寄存器中的一个位进行与运算,如果该位为1,则触发中断处理程序。 在中断处理程序中、我们可以检查原始状态或屏蔽状态。

    您的公司倾向于检查原始状态。

    在我们的所有中断处理程序中、我们一直在检查屏蔽的状态。 我们这样做的理由如下:无论这些事件是否为相关事件、都会为所有事件设置原始状态位。 当我们对某个事件不感兴趣时、其原始状态位可以无限期地处于设置状态并被忽略。 当我们对某个事件感兴趣时,我们的初始化/设置代码会故意设置外设*INTEN 寄存器中的该位。 如果我们希望获得中断、则需要执行此操作。 然后、这意味着我们感兴趣的事件必须反映在屏蔽的状态位中。 我们错了吗? 我要说的是、在很多中断处理程序中、这种方法一直在正常工作并提供了预期的结果。

    由于您说 QEIRIS、QEIISC、QEIINTEN 是关键字、因此我想验证 QEIINTEN 的位0实际上是否已置位-也就是说、中断实际上已启用-以排除软件错误。 我使用 QEI_CONFIG_NO_RESET 进行编译、这是我们需要的配置。 我在中断处理程序内放置了一个断点,并触发了中断处理程序--尽管我不能用索引脉冲来触发它,所以我通过改变方向来触发它。 一旦在断点处停止、我检查了寄存器、并且我可以确认位0实际上已设置(在这里被称为 QEI_INTEN 索引):

    因此、我得出结论、QEIRIS.INTINDEX 从未置位。

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

    您好、12月12日下午、

     我对过去的帖子进行了一些研究。 看起来索引中断与通过检测索引信号复位的位置计数器相关联。 如果您要对它们进行去耦、我建议您在索引输入上使用 GPIO 中断、该中断已经过尝试并证明工作正常。 请告诉我这是否是可接受的解决方案。

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

    感谢您在周日抽出时间研究这一问题。

    恐怕您会这样说。

    在 QEI 索引输入引脚上使用 GPIO 中断确实像我在上面说的那样工作——但是这会导致问题。

    我们还有另一个信号、与 QEI 索引无关、它由 GPIO 中断提供服务。 该另一个信号对时间至关重要、因此它是系统中的最高优先级中断、也是唯一允许处于该优先级的中断。 每个 GPIO 端口只有一个中断向量、因此有一个中断优先级等

    遗憾的是、由于我们希望使用 QEI 中断来处理 QEI 索引信号、因此我们的一个电路板设计将这两个信号都放置在同一个 GPIO 端口上。

    如果无法使索引中断触发(当然不会重置位置计数器)、那么正如我看到的、我们有两个选项:

    选项1:处理该最高优先级中断中的索引信号。 这可能会增加处理时间关键型中断的延迟和抖动。 这可能处于可接受的限值内、但需要进行测试才能找出。

    选项2:修改电路板设计、将时间关键型信号移至不同的 GPIO 端口(最好是具有每个引脚中断的端口)。 但是、在我要求重新旋转之前、我将消除其他选项。

    如果你有任何其他想法、我很乐意听到。

    再次感谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Twelve12pm:
    您是否有任何当前未使用且与时间关键型中断不在同一 GPIO 端口中且可被重新用于生成索引中断的其他 GPIO? 当然、此选项仍需要更改板级。 在您的选项1中、我认为您可以编写代码、以便对时间关键型中断进行优先级排序。 例如、如果中断是由时间关键型信号引起的、则在 ISR 内处理中断。 如果它是由索引中断引起的、则设置一个标志并立即退出。 根据标志处理 main()中的索引中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    正如您指出的那样、信号的任何重新布线都需要进行板级更改。 我将尝试避免这种情况、方法是按照您的建议优先处理时间关键型中断。

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

    您好、12平方、

    很棒的工作——不常见的是“两个外人”——愿意(合理)投入时间/精力——创造这样的细节。   我再次关注123、因为我们从未使用过(也没有关心) 129。   而且、任何供应商寻求"重复使用"技术方面/方法似乎都不是"不合理"、这一点已经得到证实。   此外-有人怀疑(还可以-猜测) QEI 模块是否会"得到很大的增强"。

    现在、您写了"您的公司更愿意检查原始状态。"    这不是真的!    I (唯一)为您的 QEI 状态检查 函数显示了"源代码"- 该代码显示了对"Check of RIS bit_0"的要求。   在我查看 QEI 寄存器时、我注意到这3个寄存器明显主导了 QEI 模块的中断处理。   和-该 RIS 位、"必须置位"才能发生索引中断。   (我之前的帖子通过"真实副本"直接从"123手册"中介绍了这些事实。

    现在、您/公司处理一般中断的方法(几乎)与我们/我的方法相同。   再次-我在 RIS 测试时进行了 QEI 状态检查-发现需要 RIS_bit_0 -以便传播索引中断。   (这种情况似乎是合理的)

    我同意最好使用与 QEI 索引引脚和独立 GPIO 的"并行连接"。   然而-进一步思考-由于 QEI_Index 引脚(目前)提供了“ 小(赦免)无价值”... 为什么保持这种联系?   如果您可以释放或找到这样的"free GPIO pin"、请将其用作 QEI Index 中断触发器!

    请*** 注意,我从下面的(那)中“后退”(至少有点)。   "下一个到达的帖子"(下一个)详细信息...

    我还想知道、您的"选择将指数信号与位置计数器交互的信号分离-是否"合法?"   我的理解(当然没有标准)是"索引信号"(通常)标识"开始或结束"位置。   因此、您的 MCU 的位置计数器"归零"可能会证明有效!   然而 、QEI 指数的另一个(合理)标准用法是记录"革命的数量"-这是丢失的-因此、"QEI Design Crüe "应该被拖进"审讯"。   需要注意 的是、"FREE GPIO 引脚"可能提供此类旋转计数。    (以及您的其他愿望)

    如果时间允许、明天我将让员工对2个其他/外部 ARM MCU (M4和 M7)进行测试-并进行报告。    (可能是当天晚些时候、因为这里有几位"与我一起工作-全天-今天"。)

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

    您好!

    我仍然被" 没有帮助解决这个问题、"索引信号故障"触发 QEI 中断所困扰。"   (就像你的感觉一样——这令人上瘾!   不会随另一个(180MHz M4!)一起发生    今天早些时候到达(前工作人员)、以"深入挖掘"-尝试拓展更多见解。

    今天早上早些时候、我意识到 API QEI 函数(正如朋友 Charles 所建议的)可能"有缺陷"。   我(之前)的意思是、"索引生成的中断"要求"位置计数器的重置"-这太 "笨重"(就像禁止**一样、这里)。   所以-当 API 的源代码可用时-让我们回顾一下:

    和: "\b QEI_CONFIG_NO_RESET\b QEI_CONFIG_RESET_IDX 指定在检测到索引脉冲时是否应复位位置积分器。"   因此,没有这种"重手"的意图。  (可能已经发生了这种情况、但 它是/不太可能是故意的。)   仍然存在"严重问题"-此位置复位(或不)"不应授权 "启用/禁用 "索引中断!"   这只是 反直觉的- 最后一个沟渠的"花圈"、实现"黑客"-它不是吗?   因此、正确的"索引生成的中断"被"扣为人质"(如海报所述、这会妨碍他的"代码自由和进步!"

    接下来-"您"是否完成了"协助 QEI 索引信号中断?"所需的所有操作?   再一次-到达 API 源代码-回答: (实际上-您做到了!)

    QEIIntEnable (uint32_t ui32Base、uint32_t ui32IntFlags)

    //
    //检查参数。
    //
    assert (((ui32Base == QEI0_BASE)||(ui32Base == QEI1_base));
    //
    //启用指定的中断。
    //
    HWREG (ui32Base + QEI_O_INTEN)|= ui32IntFlags;

    并归档 qei.h 注释:

    "可传递给 QEIEnableInts、QEIDisableInts 和 QEIClearInts  // CB1的值注意: 这些函数的名称在这里被"否定"!   QEIIntEnable 是正确的名称。

    //作为 ui32IntFlags 参数、并由 QEIGetIntStatus 返回。
    //
    //
    #define QEI_INTERROR 0x00000008 //检测到相位错误
    #define QEI_INTDIR 0x00000004 //方向改变
    #define QEI_INTTIMER 0x00000002 //速度计时器过期
    #define QEI_INTINDEX 0x00000001 //检测到索引脉冲

    和"您的代码"非常正确-遵循 API 的规范。   "MAP_QEIIntEnable (QEI0_BASE、(QEI_INTERROR | QEI_INTINDEX | QEI_INTDIR);

    所以-这就证明了您已经完成了、"所有操作都由用户提供电源"-尝试启用 QEI_INTINDEX……   (您已根据需要在 QEIINTEN 中设置 bit_0)

    *** 为什么信号到达@“Pin QEI_Index ”...  不触发 QEI 中断?    QEI 模块采用"滤波器功能"-您似乎没有使用它-它是否"默认"为"太严重 A 电平"-从而导致您的"QEI 索引"信号(假定脉冲)丢失?   毫无疑问,这证明了: “在领域中!”   (以及"快速/轻松"生成不同脉宽-测试/确认!)

    正如我之前的"诊断帖子"所述- 两个 QEI 寄存器的"内部索引位"(位0)QEIINTEN  QEIRIS  必须置位-对于、"QEI 中断触发-通过"索引信号到达"。    

    然后、该问题必须解决为 "bit_0"-  w/in 寄存器 QEIRIS -设置--如果该位确实设置-"QEI  模块中断机制中存在故障!"

    怀疑寄存器"QEIRIS"中的"bit_0"由其相应引脚上的脉冲到达设置的。   12_squared 已确保此类脉冲确实到达-在直接响应中、是否注意到"RIS bit_0"的设置  ?

    [编辑4C123手册的另一读揭示了(可悲的是):“当 RESMODE 为0时,位置计数器限制在[0:M]范围内,其中 M 是 可编程的最大值。   在此 模式下、位置计数器将忽略索引脉冲。"    因此、 "高压"(之前被怀疑)似乎仍然存在/良好-您"注定"会使用(可能)另一个 GPIO 引脚-以实现"高度请求"(此处为"已删除")索引中断!

    如果《财富》微笑-非常明亮-您可以通过使用与  GPIO 相同的"QEI Index Pin"(相反)配置来"保存您的电路板"-与 QEI 分离(  因此愿意/能够 中断!) - 有时“逃脱”大哥的“逃跑”(可疑/即 无类)手动  -和 不需要对 PCB 进行任何更改!    这将证明是一流的-对您(同样地、请其他人!)   

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

    [引用 USER="CB1_MOBILE"]

    您好、12平方、

    很棒的工作——不常见的是“两个外人”——愿意(合理)投入时间/精力——创造这样的细节。   我再次关注123、因为我们从未使用过(也没有关心) 129。   而且、任何供应商寻求"重复使用"技术方面/方法似乎都不是"不合理"、这一点已经得到证实。   此外-有人怀疑(还可以-猜测) QEI 模块是否会"得到很大的增强"。

    [/报价]

    '129与'123非常相似、不同 MCU 模型之间的预期差异以及一些稍大的差异、例如大幅改进的 UDMA。 (123确实是我见过的最奇怪的机制、软件可以与 DMA 完成同步;129有一个更好的"机制"。 但这是另一天的故事。) 哦、还有系统时钟。 这也有了很大的改进。

    我们有'123和'129。 不久我将测试'A指标 的'A?Q 指数的行为,尽管我们都怀疑,它很可能会提供相同的行为。 (我已经并排浏览了两个数据表、除了章节编号、页码等、数据表的这一部分似乎是两个 IC 之间的逐字复制。 例如、任何寄存器中似乎都没有任何额外的位、这意味着在一个部分中保留且在另一个部分中有效的位。)

    [引用 USER="CB1_MOBILE"]

    现在、您写了"您的公司更愿意检查原始状态。"    这不是真的!

    [/报价]

    对误解表示歉意。

    [引用 USER="CB1_MOBILE"]

       I (唯一)为您的 QEI 状态检查 函数显示了"源代码"- 该代码显示了对"Check of RIS bit_0"的要求。   在我查看 QEI 寄存器时、我注意到这3个寄存器明显主导了 QEI 模块的中断处理。   和-该 RIS 位、"必须置位"才能发生索引中断。   (我之前的帖子通过"真实副本"直接从"123手册"中介绍了这些事实。

    [/报价]

    正如我们两人都发现的、我们可以全天检查 RIS 位、但如果它从未设置、则永远不会设置!

    [引用 USER="CB1_MOBILE"]

    现在、您/公司处理一般中断的方法(几乎)与我们/我的方法相同。   再次-我在 RIS 测试时进行了 QEI 状态检查-发现需要 RIS_bit_0 -以便传播索引中断。   (这种情况似乎是合理的)

    我同意最好使用与 QEI 索引引脚和独立 GPIO 的"并行连接"。   然而-进一步思考-由于 QEI_Index 引脚(目前)提供了“ 小(赦免)无价值”... 为什么保持这种联系?   如果您可以释放或找到这样的"free GPIO pin"、请将其用作 QEI Index 中断触发器!

    [/报价]

    这是我的想法。 在我看来、除非在每次转速时使用索引脉冲来重置位置计数器、否则索引脉冲不能用于此 QEI 实现中的任何其他目的。 例如、速度捕获使用计时器、似乎不会"查看"Index 脉冲。 位置计数器仅对 A 和 B 通道进行计数。 因此,我看不出有任何伤害,使这种不快乐的婚姻在 QEI 和它的指数信号之间失效。 实际上、如果我们确实进行了板级更改、我想我会将索引引脚保持在正确的位置、并将另一个信号移至其他位置。 这样、在我们将来不可能希望 QEI 出现索引脉冲的情况下、可以选择将其配置为这样的脉冲。 实际上、到目前为止、我已经假设为了将该引脚用作 GPIO、必须将其从外设控制中移除。 但也许情况并非如此? 我需要运行一些测试来确定是否可以吃蛋糕、方法是在使用 GPIO 端口触发中断时让 QEI 具有其索引信号。 遗憾的是、我仍然需要将另一个时间关键型信号移至另一个 GPIO 端口。

    [引用 USER="CB1_MOBILE"]

    请*** 注意,我从下面的(那)中“后退”(至少有点)。   "下一个到达的帖子"(下一个)详细信息...

    我还想知道、您的"选择将指数信号与位置计数器交互的信号分离-是否"合法?"   我的理解(当然没有标准)是"索引信号"(通常)标识"开始或结束"位置。   因此、您的 MCU 的位置计数器"归零"可能会证明有效!   然而 、QEI 指数的另一个(合理)标准用法是记录"革命的数量"-这是丢失的-因此、"QEI Design Crüe "应该被拖进"审讯"。   需要注意 的是、"FREE GPIO 引脚"可能提供此类旋转计数。    (以及您的其他愿望)

    如果时间允许、明天我将让员工对2个其他/外部 ARM MCU (M4和 M7)进行测试-并进行报告。    (可能是当天晚些时候、因为这里有几位"与我一起工作-全天-今天"。)

    [/报价]
    Crüe 到我们对 SPI Crüe 的了解(即没有人知道他们是谁(或者也许没有人在说话)、我不认为有人知道"QEI Design "是谁。 他们可能已经搬迁了... 对没有引渡条约的国家:-p
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE"]

    您好!

    我仍然被" 没有帮助解决这个问题、"索引信号故障"触发 QEI 中断所困扰。"   (就像你的感觉一样——这令人上瘾!   不会随另一个(180MHz M4!)一起发生    今天早些时候到达(前工作人员)、以"深入挖掘"-尝试拓展更多见解。

    今天早上早些时候、我意识到 API QEI 函数(正如朋友 Charles 所建议的)可能"有缺陷"。   我(之前)的意思是、"索引生成的中断"要求"位置计数器的重置"-这太 "笨重"(就像禁止**一样、这里)。   所以-当 API 的源代码可用时-让我们回顾一下:

    和: "\b QEI_CONFIG_NO_RESET\b QEI_CONFIG_RESET_IDX 指定在检测到索引脉冲时是否应复位位置积分器。"   因此,没有这种"重手"的意图。  (可能已经发生了这种情况、但 它是/不太可能是故意的。)   仍然存在"严重问题"-此位置复位(或不)"不应授权 "启用/禁用 "索引中断!"   这只是 反直觉的- 最后一个沟渠的"花圈"、实现"黑客"-它不是吗?   因此、正确的"索引生成的中断"被"扣为人质"(如海报所述、这会妨碍他的"代码自由和进步!"

    [/报价]

    我同意----职位重置不应成为索引中断的人质。 我想说的是、这可能是由以下假设引起的、即除非使用指数脉冲来重置位置计数器、否则就不可能有其他可想象的用途! 直到我来了。

    但是、我想再次提请您注意数据表中不相关但类似的内容...

    在附件"A"中,我们有寄存器10:QEI 原始中断状态寄存器(QEIRIS),偏移量0x024……

    我要讨论的位不是 INTINDEX、而是 INTERROR:

    请注意"注意"、其内容为:" INTERROR 位仅在...时适用。"

    现在、让我们在相同的寄存器说明中看看 INTINDEX。。。

    如我们所发现的那样、如果没有位置复位选项会阻止接收 INTINDEX 的可能性、那么在与 INTERROR 类似的注释中说明这一点可能并不谨慎? 我是说、只是为了让其他人在将来不会遇到同样的问题?

    [引用 USER="CB1_MOBILE"]

    接下来-"您"是否完成了"协助 QEI 索引信号中断?"所需的所有操作?   再一次-到达 API 源代码-回答: (实际上-您做到了!)

    "无效

    QEIIntEnable (uint32_t ui32Base、uint32_t ui32IntFlags)

    //
    //检查参数。
    //
    assert (((ui32Base == QEI0_BASE)||(ui32Base == QEI1_base));

    //
    //启用指定的中断。
    //
    HWREG (ui32Base + QEI_O_INTEN)|= ui32IntFlags

    并归档 qei.h 注释:

    "可传递给 QEIEnableInts、QEIDisableInts 和 QEIClearInts  // CB1的值注意: 这些函数的名称在这里被"否定"!   QEIIntEnable 是正确的名称。

    //作为 ui32IntFlags 参数、并由 QEIGetIntStatus 返回。
    //
    //
    #define QEI_INTERROR 0x00000008 //检测到相位错误
    #define QEI_INTDIR 0x00000004 //方向改变
    #define QEI_INTTIMER 0x00000002 //速度计时器过期
    #define QEI_INTINDEX 0x00000001 //检测到索引脉冲

    和"您的代码"非常正确-遵循 API 的规范。   "MAP_QEIIntEnable (QEI0_BASE、(QEI_INTERROR | QEI_INTINDEX | QEI_INTDIR);

    所以-这就证明了您已经完成了、"所有操作都由用户提供电源"-尝试启用 QEI_INTINDEX……   (您已根据需要在 QEIINTEN 中设置 bit_0)

    *** 为什么信号到达@“Pin QEI_Index ”...  不触发 QEI 中断?    QEI 模块采用"滤波器功能"-您似乎没有使用它-它是否"默认"为"太严重 A 电平"-从而导致您的"QEI 索引"信号(假定脉冲)丢失?   毫无疑问,这证明了: “在领域中!”   (以及"快速/轻松"生成不同脉宽-测试/确认!)

    正如我之前的"诊断帖子"所述- 两个 QEI 寄存器的"内部索引位"(位0)QEIINTEN  QEIRIS  必须置位-对于、"QEI 中断触发-通过"索引信号到达"。    

    然后、该问题必须解决为 "bit_0"-  w/in 寄存器 QEIRIS -设置--如果该位确实设置-"QEI  模块中断机制中存在故障!"

    怀疑寄存器"QEIRIS"中的"bit_0"由其相应引脚上的脉冲到达设置的。   12_squared 已确保此类脉冲确实到达-在直接响应中、是否注意到"RIS bit_0"的设置  ?

    [/报价]
    您在这里提出了一个非常好的观点。 我们目前不使用滤波、但我可能应该使用滤波器设置。 也许我们会通过启用"不必要的"(?!!)来发现这一点。 滤波器时、索引信号开始通过?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢——最棒的——你远远超过那些在这里出现“不起作用”的人(多种)!   (就像论坛的错一样!)

    请回顾我(最新)上一篇帖子的末尾-我添加了一个编辑-我认为这是"最好的解决"您的问题:

    • 允许在"索引脉冲"到达时发生中断
    • 涉及到 PCB 的无改动/零改动!  (为什么我"赚取"大价钱!)

    只需将"QEI_Index_PIN"配置为远离错误行为/偏置、 即 QEI 的"不功能"。   相反-将其设置为 GPIO 输入-您有一个额外的中断需要处理-但电路板没有/零变化。

    事实上——您的观点是:在演示中缺乏一致性、 "关键细节"(正如您在"INTERROR"中所指出的那样)表明技术写作人员"累了"和/或"受欢迎的"营销"破解了他们的鞭子!   (我们会受苦!)

    Crack 员工是"鹅"的"关键措辞"...   一旦您申请/实施了-您是否会对我的"宣言"中的一个(甚至几个)授予"已验证"?    Mercî μ A。

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

    [引用 USER="CB1_MOBILE"]

    非常感谢——最棒的——你远远超过那些在这里出现“不起作用”的人(多种)!   (就像论坛的错一样!)

    请回顾 我(最新)上一篇帖子的末尾 -我添加了一个编辑-我认为这是"最好的解决"您的问题:

    • 允许在"索引脉冲"到达时发生中断
    • 涉及到 PCB 的无改动/零改动!  (为什么我"赚取"大价钱!)

    只需将"QEI_Index_PIN"配置为远离错误行为/偏置、 即 QEI 的"不功能"。   相反-将其设置为 GPIO 输入-您有一个额外的中断需要处理-但电路板没有/零变化。

    事实上——您的观点是:在演示中缺乏一致性、 "关键细节"(正如您在"INTERROR"中所指出的那样)表明技术写作人员"累了"和/或"受欢迎的"营销"破解了他们的鞭子!   (我们会受苦!)

    Crack 员工是"鹅"的"关键措辞"...   一旦您申请/实施了-您是否会对我的"宣言"中的一个(甚至几个)授予"已验证"?    Mercî μ A。

    [/报价]

    以下是"Edit":

    [引用 USER="CB1_MOBILE"]

    [编辑4C123手册的另一读揭示了(可悲的是):“当 RESMODE 为0时,位置计数器限制在[0:M]范围内,其中 M 是 可编程的最大值。   在此 模式下、位置计数器将忽略索引脉冲。"    因此、 "高压"(之前被怀疑)似乎仍然存在/良好-您"注定"会使用(可能)另一个 GPIO 引脚-以实现"高度请求"(此处为"已删除")索引中断!

    如果《财富》微笑-非常明亮-您可以通过使用与  GPIO 相同的"QEI Index Pin"(相反)配置来"保存您的电路板"-与 QEI 分离(  因此愿意/能够 中断!) - 有时“逃脱”大哥的“逃跑”(可疑/即 无类)手动  -和 不需要对 PCB 进行任何更改!    这将证明是一流的-对您(同样地、请其他人!)   

    [/报价]
    啊、" 在 这个 模式中、位置计数器忽略索引脉冲"、但是为什么、哦、为什么它们不允许索引中断通过呢? 我确信我在数据表中读过这一说法、但我的脑海中并未产生巨大的危险信号、因为 QEI 提供的位置计数器和辅助中断在我看来是两个独立和独特的东西。 我说:"完美! Index 脉冲将对位置计数器没有影响、这正是我想要的、看起来! 有一个方便的索引中断!"
    也许更好的说法是:"Index 脉冲在此模式下被 QEI 外设完全忽略。" 此外、寄存器位描述中缺少 QEIRIS、QEIISC 和 QEIINTEN 寄存器的注释也会有所帮助。
    顺便说一下、如果我们没有类似按钮、 然后、我建议使用一个不喜欢的按钮、这样当有人打破坏消息、即 MCU 不是为了达到我们试图放置它的某些目的时、我们就能够按下该不喜欢的按钮、并让我们的不喜欢被告知! :- p
    解决方案正如您所说的、但(在我们的特定情况下)确实需要稍微修改电路板级。 索引输入从此用作 GPIO 引脚。 正如您所指出的、这不需要任何电路板级更改。 但是、需要更改板级的问题、 我希望避免这种情况、这就是我首先启动该线程的原因、它是另一个不相关的输入、该输入当前路由到同一 GPIO 端口、因此会受到与 QEI 索引输入共享中断矢量和(更重要的)中断优先级的影响。  我需要索引中断具有较低(er)的优先级、并且我需要其他不相关输入的中断具有特定延迟/抖动要求、因此需要成为系统中的最高优先级。 如果 QEI 外设支持触发索引中断而不需要位置计数器的手动振荡、这就不会是问题、并且两个信号都可以在同一 GPIO 端口上存在而不会相互抖动、 因为另一个信号的高优先级中断将来自 GPIO 端口外设、而 QEI 索引信号的低(er)优先级中断将来自 QEI 外设。 唉、QEI 不会屈从于我的意志。 因此、虽然按照我的喜好处理索引引脚不需要更改板级、但需要更改板级以获取当前位于同一 GPIO 端口上的其他信号并将其移动到不同的 GPIO 端口、从而使我的"全新改进!" 处理 QEI 索引不会导致这个与此不相关的信号出现问题。
    有任何问题吗?
    现在、我将授予令人垂涎的绿盒子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    用“国王”的不朽的话(但在这里/现在都有诚意)“谢谢——非常感谢。”

    然而、"通过 QEI 的索引信号自动重置位置计数器"可能是(有点)标准-您(和我的)期望和愿望-接收这样的"QEI 索引"中断 "自由、并且不带输出限制"已被静音!    更糟糕的是, 不是"一个短句----"埋葬"了23页以上 的"QEI 详细情况"-- --(有些)缺乏?   (同时"吞噬"用户的时间/精力!)

    您之前提到过、 "假设除非使用索引脉冲来重置位置计数器、 否则无法 再使用其他可想象的方法来实现此目的!   直到我来了!"   

    然而-其他用途是否可能大量存在(即使不能立即得到承认)-在这里?   作为一个(快速)示例-可以将" 位置计数器设置为一个极值"(此类计数几乎"永远不会"到达)设置为能够很好地启用/增强"线性传动器的已知行程?"   (如果索引信号始终且仅导致此类(不需要的)位置计数器重置、则会"丢失"(这种情况)!)

    如果"了解"的预期用途-以及...

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

    [引用 USER="CB1_MOBILE"]

    用“国王”的不朽的话(但在这里/现在都有诚意)“谢谢——非常感谢。”

    然而、"通过 QEI 的索引信号自动重置位置计数器"可能是(有点)标准-您(和我的)期望和愿望-接收这样的"QEI 索引"中断 "自由、并且不带输出限制"已被静音!    更糟糕的是, 不是"一个短句----"埋葬"了23页以上 的"QEI 详细情况"-- --(有些)缺乏?   (同时"吞噬"用户的时间/精力!)

    您之前提到过、 "假设除非使用索引脉冲来重置位置计数器、 否则无法 再使用其他可想象的方法来实现此目的!   直到我来了!"   

    然而-其他用途是否可能大量存在(即使不能立即得到承认)-在这里?   作为一个(快速)示例-可以将" 位置计数器设置为一个极值"(此类计数几乎"永远不会"到达)设置为能够很好地启用/增强"线性传动器的已知行程?"   (如果索引信号始终且仅导致此类(不需要的)位置计数器重置、则会"丢失"(这种情况)!)

    如果"了解"的预期用途-以及...

    [/报价]

    我们将 QEI 用于位置和速度反馈。 TM4C 上的 QEI 非常好。 除了位置和速度反馈、它还提供错误检测和交换 A 和 B 信号的功能。 所有这些都是我们的重要因素、因为这样就省去了很多昂贵的 IC。 我们遇到的唯一缺点是我们无法获得该索引中断、但考虑到 QEI 能够实现的所有其他功能、这会带来一些不便。