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.

[参考译文] TMS320F28P650DK:为什么 QEP 的软件索引标记在调试期间可以正常工作、但使用 Uniflash 烧录的程序无法正常工作?

Guru**** 2609955 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1561384/tms320f28p650dk-why-does-the-software-index-marker-of-qep-work-properly-during-debug-but-the-program-burned-using-uniflash-does-not-work-normally

器件型号:TMS320F28P650DK
Thread 中讨论的其他器件:UNIFLASH

工具/软件:

工程师、您好!

当我使用完全相同的程序时、QEP 的软件索引标记只能在调试模式期间正常工作、但通过 uniflash 编程时无法正常工作。 在调试模式期间、QEP 的索引事件标记锁存器/软件索引标记锁存器 (QEPCTL[IEL]= 11) 正常运行、换向时的 Z 脉冲锁存器位置偏差为 1、这与数据表一致。

但是、使用 uniflash 编程后、换向时的 Z 脉冲锁存位置偏差变为 5。 我检查了 QEPCTL 寄存器并发现其配置没有问题、这与调试模式期间相同。 即使重新打开系统电源、问题仍然存在。

在图片中,我得到了 QEPCTL 寄存器的值,以及 QBearbLAT 值与之前的 QBearbLAT 值之间的差异。 据我推测、出现这个问题的原因是 QEP 的索引判断有问题、这变成了上升沿锁存器。
这一问题对我们来说极为紧迫。 我们希望相关工程师能够提供帮助。

此致、

林浩南

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

    此外、我已经测试了 ABZ 编码器硬件、没有发现任何问题。 当手动旋转编码器一次时、QEPCNT 值的变化约为线值的四倍。

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

    LIN、

    我对响应延迟非常抱歉。 基于此说明、我立即想到器件处于错误的引导模式和 prev。 正在执行代码的版本。

    如果您完全确定情况并非如此、那么我的另一个想法是整个系统上电会导致问题 、即固件中有一些例程在上电时运行。 连接调试器时、用户必须手动经过一个断点、为系统提供启动后稳定的时间、但当调试器未连接时、启动未正确进行。

    有道理吗?

    此致、
    Jason Osborn

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

    您好 Jason、

    我很高兴收到你的答复。

    关于第一点,我认为不会执行以前版本的代码。 因为在调试期间、引导加载也将被擦除。 断电和重新上电后、DSP 不会执行与调试相对应的程序。

    至于第二点、我认为这是可能的。 因此、我进行了进一步的测试。 这是我的配置程序、您能帮助我检查与索引相关的配置是否有任何问题吗?

    void InitEQep(void)
    {
        EALLOW;
    
        EQep5Regs.QUPRD = EQEP_QUPRD - 1;             // 配置系统时钟频率为200M时,单位定时为 200M / 12500 = 16KHz   即单位定时时间为62.5us   12500
    
        EQep5Regs.QDECCTL.bit.QSRC = 00;      // 00:正交计数模式
                                              // 01:直接计数模式
                                              // 10:向上计数模式
                                              // 11:向下计数模式
        EQep5Regs.QEPCTL.bit.FREE_SOFT = 2;   //仿真控制位,位置计数器、看门狗计数器和捕获定时器不受影响
        EQep5Regs.QEPCTL.bit.PCRM = 01;       // 位置计数器复位模式:
                                              // PCRM=00 :当索引事件发生时复位
                                              // PCRM=01 :当达到最大位置时复位
        //EQep5Regs.QEPCTL.bit.IEI = 0;
        EQep5Regs.QEPCTL.bit.IEL = 1;         //3:所有Z脉冲只会与第一个Z脉冲的相同方向变化才会锁存
    
        EQep5Regs.QEPCTL.bit.UTE = 1;         // QEP单位定时器使能:0禁止,1使能
        EQep5Regs.QEPCTL.bit.QCLM = 1;        // QEP捕捉锁存模式:
                                              // 当CPU读位置计数器时,锁存数据
                                              // 当单位时间事件发生时,锁存数据
        EQep5Regs.QPOSMAX = 0xFFFFFFFF;
        EQep5Regs.QEPCTL.bit.QPEN = 1;        // QEP使能
        EQep5Regs.QCAPCTL.bit.UPPS = 0;       // 单位位置事件分频系数:2^-0 = 1  ->  1个脉冲触发一次
        EQep5Regs.QCAPCTL.bit.CCPS = 0;       // 捕获时钟分频系数:2^0 = 1
        EQep5Regs.QCAPCTL.bit.CEN = 1;        // QEP捕获使能
    
        EDIS;
    
        InitEQep5Gpio();
    
    }

    当 EQep5Regs.QEPCTL.bit.IEL 在上电初始化配置程序中设置为 3(软件索引标记)且芯片重新上电时、无论编码器当前位于何处、一旦编码器旋转、QEP 就会错误地识别索引事件触发器、并且 QFLG 寄存器中的 IEL 位变为高电平。 之后、当编码器再次旋转时、位置和索引事件判断正常。 每次重新施加电源时都会发生这种情况。

    当 EQep5Regs.QEPCTL.bit.IEL 在上电初始化配置程序中设置为 1 或 2(上升沿或下降沿触发)并且芯片重新上电时、会设置一个断点、发现在执行 QEP 初始化程序后 QFLG 中的 IEL 位为高电平。 当编码器旋转时、位置和索引事件判断正常。

    对于这种现象、我认为不是由系统启动引起的。 Jason、您可以尝试查看是否发生了同样的情况。 现在、我只能使用上升沿或下降沿索引触发器、尽管这会导致更大的错误。 我希望我们能尽快找出问题。

    此致、
    林浩南

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

    LIN、

    根据您看到的内容和发布的代码、您是否可以尝试在 eQEP 寄存器配置之前移动第 30 行 (InitEQep5Gpio ();)? eQEP 读取的脉冲可能由于 IO 配置过程而错误。

    为了安全起见、在启动后清除相关的 QFLG 寄存器位也不是一个坏事。

    此致、
    Jason Osborn

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

    您好、Jason、

    我在 eQEP 寄存器配置前尝试移动第 30 行 (InitEQep5Gpio ();)、并在末尾添加了 QFLG 清除程序、但 eQEP 的软件索引标记仍然无法正常工作。 当重新连接电源且旋转编码器时、该器件在 eQEP 检测到第一个 A 或 B 脉冲后仍会生成索引事件、但未检测到索引脉冲。

    void InitEQep(void)
    {
        InitEQep5Gpio();
        
        EALLOW;
    
        EQep5Regs.QUPRD = EQEP_QUPRD - 1;             // 配置系统时钟频率为200M时,单位定时为 200M / 12500 = 16KHz   即单位定时时间为62.5us   12500
    
        EQep5Regs.QDECCTL.bit.QSRC = 00;      // 00:正交计数模式
                                              // 01:直接计数模式
                                              // 10:向上计数模式
                                              // 11:向下计数模式
        EQep5Regs.QEPCTL.bit.FREE_SOFT = 2;   //仿真控制位,位置计数器、看门狗计数器和捕获定时器不受影响
        EQep5Regs.QEPCTL.bit.PCRM = 01;       // 位置计数器复位模式:
                                              // PCRM=00 :当索引事件发生时复位
                                              // PCRM=01 :当达到最大位置时复位
        //EQep5Regs.QEPCTL.bit.IEI = 0;
        EQep5Regs.QEPCTL.bit.IEL = 1;         //3:所有Z脉冲只会与第一个Z脉冲的相同方向变化才会锁存
    
        EQep5Regs.QEPCTL.bit.UTE = 0;         // QEP单位定时器使能:0禁止,1使能
        EQep5Regs.QEPCTL.bit.QCLM = 1;        // QEP捕捉锁存模式:
                                              // 当CPU读位置计数器时,锁存数据
                                              // 当单位时间事件发生时,锁存数据
    //    EQep3Regs.QEINT.bit.UTO = 1;          //使能单位时间事件中断使能
    //    EQep5Regs.QPOSMAX = (unsigned int)(Par_Enc1LineNrPerRev << 2) - 1;           //最大位置计数器寄存器,0x270f = 2500*4 -1 = 9999
        EQep5Regs.QPOSMAX = 0xFFFFFFFF;
        EQep5Regs.QEPCTL.bit.QPEN = 1;        // QEP使能
        EQep5Regs.QCAPCTL.bit.UPPS = 0;       // 单位位置事件分频系数:2^-0 = 1  ->  1个脉冲触发一次
        EQep5Regs.QCAPCTL.bit.CCPS = 0;       // 捕获时钟分频系数:2^0 = 1
        EQep5Regs.QCAPCTL.bit.CEN = 1;        // QEP捕获使能
    
        EQep5Regs.QCLR.bit.IEL = 1;//清除Z脉冲事件中断标志
        EDIS;
    
    }
    

    此致、
    林浩南

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

    LIN、

    能否在 main 函数中显示整个初始化例程、以及 InitEQep5Gpio() 函数的内容? 似乎 eQEP 在初始化期间注册了索引脉冲、但到目前为止、我看不到发生这种情况的任何原因、也没有看到任何原因、只会在调试器断开连接的情况下发生这种情况。

    此致、
    Jason Osborn

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

    Jason、

    非常感谢您的支持。 我的初始化配置程序如下所示:

    //-----------------------------------------------------------------------
    // private functions
    //-----------------------------------------------------------------------
    void InitProcessor(void)
    {
          // Initialize the System Control registers.
          InitSysCtrl();
    
          // Initialize the GPIO list
          InitGpio();
        InitBoardVersion();
          // Initialize the PIE control registers to their default state. Begin with DINT
          InitPieCtrl();
          // Disable CPU interrupts and clear all CPU interrupt flags:
          IER = 0x0000;
          IFR = 0x0000;
          // Initialize the PIE vector table with pointers to the default Interrupt
          InitPieVectTable();
    
          // Load the Interrupt Vector
          EALLOW;
          PieVectTable.EPWM1_INT = &SystemSchedule;
          PieVectTable.EPWM1_TZ_INT = &XInt1Entry;
          EDIS;
    
        CLA_ConfigClaMemory();
        CLA_InitCPU1Cla1();
          // RamfuncsLoadStart ... was defined in flash cmd file  only release mode
          MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
    
          // Initialize the Flash Control registers.
          InitFlash();
    
          // Timer1 used as system timer control Us timer Ms timer
          InitTimer1();
    
          InitXintf();  //要在访问FPGA之前初始化
    
    //    // Initialize the EQEP.
          InitEQep();
    
    // Initialize the SCI
          InitSci();
    //Initialize the SPI
          InitSpi();
          InitLedTube();
    //Initialize the I2c
          InitI2c();
    // Initialize the ADC
          InitAdc();
    // Initialize the EPWM.
          InitEPwm();
    //  EnableEQEP  与PWM同步
          EQepEnable();
    
          InitPowerUnit();
    
          InitEeprom();//read data from eeprom
    
          InitI2cEeprom();
    }

    //
    // InitEQep5Gpio - Initialize EQEP-5 GPIOs
    //
    void InitEQep5Gpio(void)
    {
        GPIO_SetupPinOptions(74,FALSE,NULL);
        GPIO_setPinConfig(GPIO_74_EQEP5_A);
    
        GPIO_SetupPinOptions(75,FALSE,NULL);
        GPIO_setPinConfig(GPIO_75_EQEP5_B);
    
        GPIO_SetupPinOptions(77,FALSE,NULL);
        GPIO_setPinConfig(GPIO_77_EQEP5_INDEX);
    }

    void InitEQep(void)
    {
        InitEQep5Gpio();
       
        EALLOW;
    
        EQep5Regs.QUPRD = EQEP_QUPRD - 1;             // 配置系统时钟频率为200M时,单位定时为 200M / 12500 = 16KHz   即单位定时时间为62.5us   12500
    
        EQep5Regs.QDECCTL.bit.QSRC = 00;      // 00:正交计数模式
                                              // 01:直接计数模式
                                              // 10:向上计数模式
                                              // 11:向下计数模式
        EQep5Regs.QEPCTL.bit.FREE_SOFT = 2;   //仿真控制位,位置计数器、看门狗计数器和捕获定时器不受影响
        EQep5Regs.QEPCTL.bit.PCRM = 01;       // 位置计数器复位模式:
                                              // PCRM=00 :当索引事件发生时复位
                                              // PCRM=01 :当达到最大位置时复位
        //EQep5Regs.QEPCTL.bit.IEI = 0;
        EQep5Regs.QEPCTL.bit.IEL = 3;         //3:所有Z脉冲只会与第一个Z脉冲的相同方向变化才会锁存
    
        EQep5Regs.QEPCTL.bit.UTE = 1;         // QEP单位定时器使能:0禁止,1使能
        EQep5Regs.QEPCTL.bit.QCLM = 1;        // QEP捕捉锁存模式:
                                              // 当CPU读位置计数器时,锁存数据
                                              // 当单位时间事件发生时,锁存数据
    //    EQep3Regs.QEINT.bit.UTO = 1;          //使能单位时间事件中断使能
    //    EQep5Regs.QPOSMAX = (unsigned int)(Par_Enc1LineNrPerRev << 2) - 1;           //最大位置计数器寄存器,0x270f = 2500*4 -1 = 9999
        EQep5Regs.QPOSMAX = 0xFFFFFFFF;
        EQep5Regs.QEPCTL.bit.QPEN = 1;        // QEP使能
        EQep5Regs.QCAPCTL.bit.UPPS = 0;       // 单位位置事件分频系数:2^-0 = 1  ->  1个脉冲触发一次
        EQep5Regs.QCAPCTL.bit.CCPS = 0;       // 捕获时钟分频系数:2^0 = 1
        EQep5Regs.QCAPCTL.bit.CEN = 1;        // QEP捕获使能
    
        EQep5Regs.QCLR.bit.IEL = 1;//清除Z脉冲事件中断标志
        EDIS;
    
    
    
    }

    此致、
    林浩南

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

    您好 Lin、

    我很乐意帮助解决这个问题。 根据您的说明、在非调试模式下、eQEP 无法正常工作。 eQEP 在调试模式下工作时。  

    您能否确认您的引导引脚是否设置为闪存引导(如果从闪存运行)?  

    您能否确认所连接调试器的 QEP 寄存器设置、以及在未连接调试器时、这些设置的配置是相同的?  

    当调试器未连接且您从闪存运行时、您是否可以重新连接到器件并转储 eQEP 寄存器、然后将其与正在运行的连接的调试会话进行比较?  

    此致、

    Ryan Ma  

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

    您好、Ryan、

    我在测试过程中发现了一种新情况:当程序中的 QEP 索引配置为软件触发器(软件索引标记)时、引导加载和编译的十六进制文件通过 Uniflash 编程到 DSP 中、然后进行电源复位。
    • 期间  首次加电 、QEP 索引锁存存在问题:索引事件由每个 Z 脉冲的上升沿触发。
    • 在我再次执行下电上电(断电,然后再次上电)后、QEP 索引锁存功能正常:只有在每个后续 Z 脉冲的方向与第一个 Z 脉冲的方向匹配时、才会锁存索引事件。
    多次重复下电上电后、结果表明软件触发模式(软件索引标记)下的 QEP 索引可正常工作  有一定的概率 ;在大多数情况下,索引事件仍然只是由 Z 脉冲的上升沿触发。

    此外、上电后、当编码器略微旋转并且 QEPCNT 首次增加或减少时、QFLG 寄存器中的 IEL 位会直接从 0 变为 1。 我确认此时硬件上没有 Z 脉冲(我在编码器上标记了 Z 脉冲位置,并且距离仍然很远)。 这导致对第一个 Z 脉冲事件的判断不正确。 每次打开电源时都会发生这种情况。

    您能请 Ryan 再次为我检查这个问题吗? 谢谢!

    此致、
    林浩南

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

    您好 Lin、  

    您是否可以尝试修改 eQEP init 以遵循以下注释框架?

    我用 txt 编写了此文件、但这是按照我们的 driverlib 初始化过程完成的。

    尝试一下、如果您仍然看到问题、请告诉我。

        	//
    	// Clear any flags before initializing
    	//
        	EQep5Regs.QCLR.bit.IEL = 1;//清除Z脉冲事件中断标志
    
    	//
    	// Selects the source for eQEPA/B/I signals
    	//
    	EQep5Regs.QEPSRCSEL.bit.QEPISEL = 0; // Default
    	EQep5Regs.QEPSRCSEL.bit.QEPBSEL = 0; // Default
    	EQep5Regs.QEPSRCSEL.bit.QEPASEL = 0; // Default
    
    	//
    	// Set the strobe input source of the eQEP module.
    	//
    	EQep5Regs.QEPSRCSEL.bit.QEPASEL = 1; // Tied to zero
    
    	//
    	// Sets the polarity of the eQEP module's input signals.
    	//
    	EQep5Regs.QDECCTL.bit.QAP = 0; // Default
    	EQep5Regs.QDECCTL.bit.QBP = 0; // Default
    	EQep5Regs.QDECCTL.bit.QIP = 0; // Default
    	EQep5Regs.QDECCTL.bit.QSP = 0; // Default
    
    	//
    	// Configures eQEP module's quadrature decoder unit.
    	//
        	EQep5Regs.QDECCTL.bit.QSRC = 00;      // 00:正交计数模式
    
    	//
    	// Set the emulation mode of the eQEP module.
    	//
        	EQep5Regs.QEPCTL.bit.FREE_SOFT = 2;   //仿真控制位,位置计数器、看门狗计数器和捕获定时器不受影响
    
    	//
    	// Configures eQEP module position counter unit.
    	//
        	EQep5Regs.QEPCTL.bit.PCRM = 01;       // 位置计数器复位模式:
        	EQep5Regs.QPOSMAX = 0xFFFFFFFF; // Default
    
    	//
    	// Sets the current encoder position.
    	//
    	EQep5Regs.QPOSCNT.all = 0 // Default
    	//
    	// Enables the eQEP module unit timer.
    	//
        	EQep5Regs.QEPCTL.bit.UTE = 1;         // QEP单位定时器使能:0禁止,1使能
    
    	//
    	// Disables the eQEP module watchdog timer.
    	//
    	EQep5Regs.QEPCTL.bit.WDE = 0; // Default
    	//
    	// Configures the quadrature modes in which the position count can be latched.
    	//
        	EQep5Regs.QEPCTL.bit.IEL = 3;         //3:所有Z脉冲只会与第一个Z脉冲的相同方向变化才会锁存
            EQep5Regs.QEPCTL.bit.QCLM = 1;        // QEP捕捉锁存模式:
    
    
    	//
    	// Set the quadrature mode adapter (QMA) module mode.
    	//
    	EQep5Regs.QMACTRL.all = 0; // Default
    	//
    	// Disable Direction Change During Index
    	//
    	EQep5Regs.QDECCTL.bit.QIDIRE = 0; // Default
    	//
    	// Configures the mode in which the position counter is initialized.
    	//
    	EQep5Regs.QEPCTL.bit.SEI = 0; // Default
    	EQep5Regs.QEPCTL.bit.IEI = 0; // Default
    
    	//
    	// Sets the software initialization of the encoder position counter.
    	//
    	EQep5Regs.QEPCTL.bit.SWI = 1; // Set to 1
    	//
    	// Sets the init value for the encoder position counter.
    	//
    	EQep5Regs.QPOSINIT.all = 0; // Default
    	//
    	// Enables the eQEP module.
    	//
        	EQep5Regs.QEPCTL.bit.QPEN = 1;        // QEP使能
    
    	//
    	// Configures eQEP module edge-capture unit.
    	//
        	EQep5Regs.QCAPCTL.bit.UPPS = 0;       // 单位位置事件分频系数:2^-0 = 1  ->  1个脉冲触发一次
        	EQep5Regs.QCAPCTL.bit.CCPS = 0;       // 捕获时钟分频系数:2^0 = 1
    
    	//
    	// Enables the eQEP module edge-capture unit.
    	//
        	EQep5Regs.QCAPCTL.bit.CEN = 1;        // QEP捕获使能
    

    此致、

    Ryan Ma

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

    您好、Ryan、

    我首先使用您提供的配置程序进行测试、发现 QEP 的方向计数存在问题。 当编码器正向旋转时、QEPCNT 仅在 0 和 1 之间变化。 后来、我发现这行设置不正确、需要设置为 0:

    	//
    	// Set the strobe input source of the eQEP module.
    	//
    	EQep5Regs.QEPSRCSEL.bit.QEPASEL = 0; // change to zero


    在修改程序行并进行测试后,不幸的是,上次描述的两个问题仍然存在,没有得到改善。
    最后、我发现没有在程序中配置 QUPRD。 对于程序重复测试、我将 QUPRD 配置添加为 12500-1、但结果保持不变。

    此致、
    林浩南

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

    您好 Lin、

    我们可以尝试在输入端添加 GPIO 限定吗? 我想知道是否有一些噪声或信号导致 eQEP 捕捉您仅在上电时提到的感应 Z 脉冲。

    您可通过 GPxQSEL1/2 寄存器为 3 个样本或 6 个样本启用 GPIO 限定。

    此致、

    Ryan Ma

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

    您好、Ryan、

    明天我会尝试这种方法,但干扰的可能性很小,因为我有一个由 24V 供电的控制板,电磁环境很好。

    此致、
    林浩南

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

    您好 Lin、

    好的、听起来不错、请告诉我这是否有帮助。

    此致、

    Ryan Ma

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

    您好、Ryan、

    我通过修改 GPxQSEL1/2 寄存器、为索引的 GPIO 输入启用了 3 采样去抖功能。 幸运的是、在修改后、多次上电和断电测试表明、QEP 索引的软件锁存没有问题。 只有当第一个 Index 脉冲的方向在同一方向发生变化时、所有索引事件才会发生并被锁存。 然而、在通电后、在 Index 脉冲物理到达之前、只要 AB 阶段出现脉冲变化、索引事件仍会被错误触发。

    此致、
    林浩南

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

    嗨、伙计们、

    我不是 eQEP 的专家、但在 POR 其他 C2000 类别期间、之前发现过速度引起的固件错误问题。 在 CCS 调试中的软件复位期间、当 CPU 未被调试 XDS 仿真器探测时、调试和独立固件执行速度会出现重大的时序问题。 首先、建议在 QEP 初始化代码的各个部分中添加 SysCtlDelay ()。 其次、在控制函数上方添加#pragma、以将执行速度限制在工程集优化速度之上。 这些固件计数器测量将在独立 POR 期间减慢外设初始化速度。 您可以参阅优化 C2000 编译器 PDF 中的章节、了解工程编译期间的#pragma 处理。

    祝你好运!

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

    您好 Lin、

    我很高兴 GPIO 采样对输入有帮助。 Genatco 的评论似乎有助于独立固件调试与调试固件。

    Lin、您能尝试一下 Genatco 提到的上述评论吗?

    尊敬的 Genatco:

    感谢您对此的意见。  

    此致、

    Ryan Ma