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.

[参考译文] MSP430F5658:ADC12报告错误值退出 LPM0/3/4

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1077430/msp430f5658-adc12-report-wrong-values-exit-lpm0-3-4

部件号:MSP430F5658
《线程》中讨论的其他部件:MSP430F5659

我正在对8个通道上的60Hz 信号进行多通道连续采样,
启动系统时一切正常,结果与预期完全相同。

当我关闭主电源时,当电源再次打开时,代码会进入 LPM,设备会退出 LPM,但来自 ADC 的前几个样本正确无误

-一开始我在呼叫 LPM 之前执行一些 LPM 前设置(关闭某些模块和 I/O 以节省电源),并在退出 LPM 后执行一些 LPM 后重新初始化

-要调试此问题,我取消了所有预 LPM 和后 LPM,但问题仍然相同

感谢您的帮助

while(1)
{


WDT_A_resetTimer(WDT_A_BASE);

if (PwrupDwnFromCmpr == 0x0) /// this flag indicat power down sensed by comparator
{

                                                                                                                      ///////////// below code is to ENTER LPM
WDT_A_hold(WDT_A_BASE); //turn off Watchdog during initialization

/*                                   /////////////// all Pre-LPM is commented
Healthy_OFF();
TURN_OFFLEDS_456789();
TRIP_OFF_PHASE_A();
Pick_OFF();
Analog_Disable(); ///turn off analog supply

ADC12_A_disableConversions(ADC12_A_BASE, 1);
ADC12_A_disable(ADC12_A_BASE);
Timer_A_stop(TIMER_A0_BASE);
Timer_A_stop(TIMER_A1_BASE);
USCI_A_UART_disable(USCI_A1_BASE);

GPIO_setOutputLowOnPin(GPIO_PORT_P9,GPIO_PIN0); /// LCD RST
UCB1CTL1 |= UCSWRST;                                                                                                                                // disable I2C
GPIO_setAsOutputPin(GPIO_PORT_P8,GPIO_PIN_ALL8);///GPIO_setAsOutputPin(GPIO_PORT_P8,GPIO_PIN2);
GPIO_setOutputLowOnPin(GPIO_PORT_P8,GPIO_PIN_ALL8);// GPIO_PIN2+GPIO_PIN3+GPIO_PIN5+GPIO_PIN6);// init all as Zero output

GPIO_setOutputLowOnPin(CTRL_LCD_ENABLE_PORT,CTRL_LCD_ENABLE_PIN); /// turn off lcd power


GPIO_setOutputLowOnPin(GPIO_PORT_P3,GPIO_PIN0);// Txen pin to 0 to save pwr
GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN7);// Rxen pin to 0 to save pwr


GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN0+GPIO_PIN1); /// Dinput 1 , 2 as output 0
GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN0+GPIO_PIN1+GPIO_PIN4); /// Dinput 1 , 2 & oscilator as output 0


GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN_ALL8);
GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN_ALL8);
GPIO_setAsOutputPin(GPIO_PORT_P6,GPIO_PIN_ALL8);
GPIO_setOutputLowOnPin(GPIO_PORT_P6,GPIO_PIN_ALL8);

__no_operation();


// save to flash


HWREG8(PMM_BASE + OFS_PMMCTL0_H) = 0xA5; /// unlock PMM password
HWREG8(PMM_BASE + OFS_PMMCTL0_L) |= 0x10;//// disabl PMM regulator
UCS_turnOffXT2();                                                                                           /// if timer is not stopped and timer is drivern from XT2 dependent clock i.e SMCLK/MCLK xt2 will not stop

*/ //Comp_B_disable(COMP_B_BASE);

if(PwrupDwnFromCmpr == 0)
{
__bis_SR_register(LPM3_bits | GIE); /// with disabled regulator it's LPM3.5
}
                                                                                                        ///////////// below code is to exit LPM
/*                                                                 ////////////////////  all Post-LPM commented for debug

WDT_A_hold(WDT_A_BASE); //turn off Watchdog during initialization



GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P7, GPIO_PIN2+GPIO_PIN3);// P7.2 & P7.3 are Xtl2 and
Clk_Init();

GPIO_Init_();
Analog_Enable(); /// turn on analog supply

#ifdef LCD_ON
{
initI2C();
}
#endif
InitPhStruct(HALF_CHANNELS);///////////we need to init the structure for PhaseTripStruct[4] and tripConfig
 TimerTa0_Init(); //no need to reinit timer just start it in the A2D_Init()
// __delay_cycles(300000);                                                                                       ///  delay teseted at different delays  BUT it approved to be is useless 
A2D_Init(); /// this function start the timer


Timer_A1_10ms_Init();
/////////////////////////////// UART RE INIT
serial_Interlock = UNLOCKED;
UartTx_Buf_index = 0;
UartTx_Buf_State = EMPTY;
Init_Urat0();

/////////////////////////////// LCD RE INIT
//GPIO_setOutputHighOnPin(CTRL_LCD_ENABLE_PORT,CTRL_LCD_ENABLE_PIN); /// turn ON lcd power
//GPIO_setOutputHighOnPin(GPIO_PORT_P8, GPIO_PIN2+GPIO_PIN3+GPIO_PIN5+GPIO_PIN6);// init all as Zero output
initialized = 0; /// LCD is not initialized
lcd_handle = 0;
writeByteLock = 0;
ST7032_init_state = ST7032_RESET;
ST7032_disp_state = ST7032_DISPLAY;
ST7032_sub_state = ST7032_SUB_IDLE;
WDT_A_start(WDT_A_BASE);
//A2D_Init(); /// this function start the timer
*/
}



正常代码继续  

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

    有一点难判断您在做什么,因为这里只有大约3行(可执行)代码。

    如果需要说明:从 LPM3.5唤醒并不是在 LPM 之后的行发生的,而是在重置矢量(main()的顶部)发生的。 [参考用户指南(SLAU208Q)第1.4.2节]。 TI 示例 msp430f665x_LPM35_RTC.c 说明了这一点:

    https://dev.ti.com/tirex/explore/node?node=AIz.eYhqJHW1HBKPAb1eKQ__IOGqZri__LATEST

    关于 ADC,我的第一个猜测是,您正在使用内部参考,但您并不在等待它启动-- 75US 可能包含一些 CONSEQ=3样本。 TI 示例 msp430f665x_ADC_02.c 说明了(尽管我可能使用__delay_cycles()而不是用于循环):

    https://dev.ti.com/tirex/explore/node?node=ABT0Wn622Mi0KVB49IrTjQ__IOGqZri__LATEST

    您能否显示 ADC 初始化?

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

    您好 Mohammed,

    在论坛上发布代码时,请使用“插入”-> “代码”功能正确格式化代码,以确保论坛上的可读性。 我已经编辑过您的帖子以反映此更改。  

    我也同意布鲁斯在这里的观点,你很可能不在等待你的推荐,在从 LPM 开始采样之前就解决问题。 如果您使用的是 LPM3.5,则在设备恢复时执行的操作基本上是在设备恢复时执行的。 如果您需要更快的响应,请尝试更高级别的 LPM,让您参考,并加快唤醒速度。 这将消耗比处于较低状态更多的功率,但您必须补偿处于较低状态的计时。  

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

    @Jace h

    非常感谢您的回复和编辑帖子
    我使用的是外部参考
    从主帖子中可以看出,我在启动 ADC 之前增加了一个巨大的延迟,但这没有帮助
    我在进入 LPM 之前和之后对所有代码进行注释,这是为了消除对模块启动问题的所有疑虑
    我保证每次通电时代码都能正常工作,只要它是从重置开始。

    void A2D_Init(){
    
         /* disable all ADC interrupts
          * clear all ADC interrupt flags
          * select conversion clock source (MODclk = 5Mhz)
          * set conversion clk dividers (ADC12DIVx= 00 >> DIVx =1)
          * predive (ADC12PDIV = 0 >> predive =1 )
          * set ADC resolution to 12 bits
          * ADC12MEM0 WILL hold first conversion result
          */
    
    S_index = 0;
    start_fft = false;
         //  init ADC  for timer as SC signal, Clock source is MODclk = 5Mhz, divider is 1
         ADC12_A_init(ADC12_A_BASE,
                      ADC12_A_SAMPLEHOLDSOURCE_1,
    #ifdef ADC_CLK_is_MODOSC_5Mhz
             ADC12_A_CLOCKSOURCE_ADC12OSC,
             ADC12_A_CLOCKDIVIDER_1
    #else           
                      ADC12_A_CLOCKSOURCE_SMCLK,
                      ADC12_A_CLOCKDIVIDER_5
    #endif                    
             );
    
    
         /* TURN ON ADC ADC12ON=1
          *
          */
    
         ADC12_A_enable(ADC12_A_BASE);
    
    
         /*
          * Base address of ADC12_A Module
          * For memory buffers 0-7 sample/hold for 8 clock cycles
          * For memory buffers 8-15 sample/hold for 8 clock cycles (default)
          * Enable Multiple Sampling
          */
         ADC12_A_setupSamplingTimer(ADC12_A_BASE,
             ADC12_A_CYCLEHOLD_8_CYCLES,
             ADC12_A_CYCLEHOLD_8_CYCLES,
             ADC12_A_MULTIPLESAMPLESENABLE);
    
    	 /*ADC12_A_setupSamplingTimer(ADC12_A_BASE,
    								ADC12_A_CYCLEHOLD_16_CYCLES,
    								ADC12_A_CYCLEHOLD_16_CYCLES,
    	          ADC12_A_MULTIPLESAMPLESENABLE);*/
    
    
         //Configure Memory Buffer
         /*
          * Base address of the ADC12_A Module
          * Configure memory buffer 0
          * Map input A0 to memory buffer 0
          * Vref+ = VeREF+ (ext)     Internal 2.5v for test on LunchPad
          * Vref- = AVss
          * Memory buffer 0 is not the end of a sequence
          */
         ADC12_A_configureMemoryParam param = {0};
         param.memoryBufferControlIndex = ADC12_A_MEMORY_0;
         param.inputSourceSelect = ADC12_A_INPUT_A0;
    
    //#ifdef Xtrnl_Ref
    #if defined (__MSP430F5659__)
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_EXT;
    #else
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_INT;                            //
    #endif
    
         param.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    #ifdef channel0
         param.endOfSequence = ADC12_A_ENDOFSEQUENCE;  // END SEQUENCE
    #else
         param.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;
    #endif
    
         ADC12_A_configureMemory(ADC12_A_BASE ,&param);
    
    
    
          //param = {0};
         param.memoryBufferControlIndex = ADC12_A_MEMORY_1;
         param.inputSourceSelect = ADC12_A_INPUT_A1;
    
    #if defined (__MSP430F5659__)
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_EXT;
    #else
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_INT;                            //
    #endif
    
         param.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    #ifdef channel1
         param.endOfSequence = ADC12_A_ENDOFSEQUENCE;  // END SEQUENCE
    #else
         param.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;
    #endif
         ADC12_A_configureMemory(ADC12_A_BASE ,&param);
    
    
          //param = {0};
         param.memoryBufferControlIndex = ADC12_A_MEMORY_2;
         param.inputSourceSelect = ADC12_A_INPUT_A2;
    
    #if defined (__MSP430F5659__)
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_EXT;
    #else
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_INT;                            //
    #endif
    
         param.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    #ifdef channel2
         param.endOfSequence = ADC12_A_ENDOFSEQUENCE;  // END SEQUENCE
    #else
         param.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;
    #endif
         ADC12_A_configureMemory(ADC12_A_BASE ,&param);
    
          //param = {0};
         param.memoryBufferControlIndex = ADC12_A_MEMORY_3;
         param.inputSourceSelect = ADC12_A_INPUT_A3;
    
    #if defined (__MSP430F5659__)
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_EXT;
    #else
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_INT;                            //
    #endif
    
         param.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    #ifdef channel3
         param.endOfSequence = ADC12_A_ENDOFSEQUENCE;  // END SEQUENCE
    #else
         param.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;
    #endif
         ADC12_A_configureMemory(ADC12_A_BASE ,&param);
    
    
          //param = {0};
         param.memoryBufferControlIndex = ADC12_A_MEMORY_4;
         param.inputSourceSelect = ADC12_A_INPUT_A4;
    
    #if defined (__MSP430F5659__)
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_EXT;
    #else
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_INT;                            //
    #endif
    
         param.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    #ifdef channel4
         param.endOfSequence = ADC12_A_ENDOFSEQUENCE;  // END SEQUENCE
    #else
         param.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;
    #endif
         ADC12_A_configureMemory(ADC12_A_BASE ,&param);
    
    
          //param = {0};
         param.memoryBufferControlIndex = ADC12_A_MEMORY_5;
         param.inputSourceSelect = ADC12_A_INPUT_A5;
    
    #if defined (__MSP430F5659__)
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_EXT;
    #else
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_INT;                            //
    #endif
    
         param.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    #ifdef channel5
         param.endOfSequence = ADC12_A_ENDOFSEQUENCE;  // END SEQUENCE
    #else
         param.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;
    #endif
         ADC12_A_configureMemory(ADC12_A_BASE ,&param);
    
    
          //param = {0};
         param.memoryBufferControlIndex = ADC12_A_MEMORY_6;
         param.inputSourceSelect = ADC12_A_INPUT_A6;
    
    #if defined (__MSP430F5659__)
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_EXT;
    #else
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_INT;                            //
    #endif
    
         param.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    #ifdef channel6
         param.endOfSequence = ADC12_A_ENDOFSEQUENCE;  // END SEQUENCE
    #else
         param.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;
    #endif
         ADC12_A_configureMemory(ADC12_A_BASE ,&param);
    
    
    
          //param = {0};
         param.memoryBufferControlIndex = ADC12_A_MEMORY_7;
         param.inputSourceSelect = ADC12_A_INPUT_A7;
    
    #if defined (__MSP430F5659__)
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_EXT;
    #else
         param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_INT;                            //
    #endif
    
         param.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    #ifdef channel7
         param.endOfSequence = ADC12_A_ENDOFSEQUENCE;  // END SEQUENCE
    #else
         param.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;
    #endif
         ADC12_A_configureMemory(ADC12_A_BASE ,&param);
    
    
    
         ADC12_A_clearInterrupt(ADC12_A_BASE,
             ADC12IFG1);
         ADC12_A_enableInterrupt(ADC12_A_BASE,
             ADC12IE1);
         //Enable memory buffer 7 interrupt
             ADC12_A_clearInterrupt(ADC12_A_BASE,
                 ADC12IFG7);
             ADC12_A_enableInterrupt(ADC12_A_BASE,
                 ADC12IE7);
    
             //Enable/Start first sampling and conversion cycle
             /*
              * Base address of ADC12_A Module
              * Start the conversion into memory buffer 0
              * Use the repeated sequence of CHANNELS
              */
             ADC12_A_startConversion(ADC12_A_BASE,
                 ADC12_A_MEMORY_0,
                 ADC12_A_REPEATED_SEQOFCHANNELS);
            /* HWREG8(ADC12_A_BASE + OFS_ADC12CTL0_L) |= ADC12SC;
             HWREG8(ADC12_A_BASE + OFS_ADC12CTL0_L) &=~ADC12ENC;
             HWREG8(ADC12_A_BASE + OFS_ADC12CTL0_L) |= ADC12ENC;*/
    
             ///  START TA0 IN UPMODE AS THE START CONVERSION SOURCE
             Timer_A_startCounter(TIMER_A0_BASE,TIMER_A_UP_MODE);  // START THE TIME IN THE UP MODE
             //Timer_A_stop (TIMER_A0_BASE);
     }


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

    >#IF 定义(__MSP430F5659__)

    您使用的是 F5659还是 F5658? 如果您的项目配置为 F5658,我很确定没有定义此项。

    此外,您是否使用 ADC12OSC 或 SMCLK 为 ADC 计时? (即 是否定义 ADC_CLK_is_MODOSC_5MHz?) ADC12OSC 将在 LPM3中运行,但 SMCLK 不会运行。

    未经请求:这两种设置冲突:

     >          ADC12_A_SAMPLEHOLDSOURCE_1,

     >   ADC12_A_MULTIPLESAMPLESENABLE);

    使用 CONSEQ=3和 MSC=1时,一旦第一次转换开始,ADC 就会连续运行 ,且计时器触发器无关紧要。 这可能与您的症状有关,也可能与您的症状无关。

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

    感谢您的回复

    我使用的是 F5659,它在链接器文件(IAR)中定义,我还使用断点对其进行了测试,它的定义和工作都符合预期。
    - ADC12OSC 未使用 SMCLK (定义 ADC_CLK_is_MODOSC_5MHz)

    我正在使用 Repee-Sequence-of Channels Mode (重复通道序列模式)(当触发时,它会对8个通道进行采样,并将数据存储在每个通道 ADC MEM 中,然后等待下一个通道  
      再次触发)。 我正在做 DFT,所以必须以特定速率采集样本。
      我通过在 ADC 中断内部切换引脚对其进行了测试,测试效果非常好。

    我相信 TI 数据表中对这种模式的描述不是很好(SLAU208Q–2008年6月–2018年3月修订版,第742页),我花了几天时间来使其 正常工作。

    诀窍 是您必须在每个序列结束前清除 ADC12ENC,然后在序列的最后一个通道之后再次设置它。

     数据表中从 ASIC 实施角度( SLAU208Q–2008年6月–2018年3月修订版,第742页 ) 描述了这一点,而不是用户的观点,这会造成混淆。

    在我的代码中,我为通道1 (可以是2,3,4,5)和7启用中断在 CH1中断中 ,我只禁用  ADC12ENC (我在序列采样和转换过程的早期执行此操作,以便 MCU 状态机可以捕获并在序列结束前处理)

    在 CH7中断中 ,I
    处理8通道数据并启用  ADC12ENC,以便 MCU ADC 状态机等待下一个触发器


    只是为了强调它


    该代码在每个条件下都能正常工作,只有当电源关闭并进入 LPM,电源返回并退出 LPM 时,我大约有2-3 个循环(((32-48)*8个样本)来自 ADC 的错误数据  

    此外,为了测试目的,我只能在断电的情况下进入 LPM,在 通电的情况下退出 LPM,而无需接触任何 I/O,clk 或模块配置。

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

    好的,你在 ISR 中的 ENC 操纵并不明显,因为你所展示的是什么。 似乎您已经使用 CONSEQ=3有效实施了 CONSEQ=1。 您没有使用 CONSEQ=1的原因是什么?

    您使用什么时钟来处理 TA0? 它是否在 LPM3中运行? 我想知道您看到的是传感器系统断电时采集的不新鲜样本。

    此外,您获得了哪些“错误”值(而不是“正确”值)? 这些人会告诉你什么吗?

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

    -我使用了 CONSEQ =3,因为这是重复的序列,我理解 CONSEQ =1不重复  
    - TA0克是 SMCLK,但我也尝试了 ACLk (衍生于 xtl1 32768Khz),我面临同样的问题
    ——它不是过时的样本,因为我可以跟踪 ADC 中断被触发,样本缓冲区被访问并填充。

    关于时钟问题,我尝试了所有 LPM0,LPM2和 LPM2  
     进入 LPM 并退出 LPM 而无需任何预处理或后处理,我还确保专用 CLK 在 LPM 期间运行  

    P.S.

    我使用以24MHz 运行的 XTL2作为具有 DIR_0的 MCLK 和 SMCLK 的源,因此 MCLK 和 SMCLK 都是24MHz  
    ADC 以 MODOSC 速率=5MHz 运行

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

    我首先要说的是,在 LPM 中运行 ADC 是一种非常标准的做法,所以我想猜测您的行为有何不同。

    进入 LPM 后,如何唤醒?

    CONSEQ=1是非重复的,这是您(通常)想要的计时器触发器,每个新触发 器都运行完整(MSC=1)序列。 您所描述的内容会将 ADC 置于重复模式,但随后会阻止它重复。 (使用 CONSEQ=1,您必须为每个批次切换 ENC (=0,然后=1),但您已经在这样做了。) 我没有尝试过您使用的方法,尽管我不明白它为什么会出现故障。

    [编辑:我忘了问:您的外部参考来自哪里?]

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

    亲爱的各位,

    非常感谢您的所有回复,我找到了这个问题。  
    我有一个3D 阵列来采集样本,其中一个阵列的索引在 LPM 退出后未重置。
    重置后,索引功能就会很好。  非常感谢

    尊敬的布鲁斯:  
    我将根据您的建议再次讨论 CONSEQ 问题

    非常感谢