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.

[参考译文] RTOS/MSP432P401R:MSP432P401R

Guru**** 2535750 points
Other Parts Discussed in Thread: MSP432WARE

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/757973/rtos-msp432p401r-msp432p401r

器件型号:MSP432P401R
主题中讨论的其他器件: MSP432WARE

工具/软件:TI-RTOS

我的以下代码工作正常。 如果我的声纳传感器附近有物体、则读取 ADC 读数并打开 LED;如果物体远离、则关闭 LED。 它还具有2个应更改阈值的板载按钮中断、这来自示例代码、我不使用它。 这里我的问题是...我有7个声纳传感器。 我想为每个声纳传感器设置一个 ISR,该 ISR 将根据每个传感器的指定范围触发(这样,如果物体接近,我就可以控制电机)。 我的问题是如何根据我指定的范围在 ADC 读数上设置中断。 我正在尝试构建一个高效的系统、在这个系统中、我有一个无限循环、不执行任何操作、如果任何声纳传感器检测到某个范围内的物体、我指定它将触发自己的 ISR 并改变电机速度等。 我确信我可以为改变电机速度的每个读数执行一系列 if else 语句、但我觉得这是一个效率低下的缓慢系统。 如果我错了、请告诉我。 有关如何实现这一点的示例代码或 API 说明将非常有用。 我正在使用 Simplelink   TI 驱动程序实验室 GPIO 中断中的参考代码。

 /*

  * ==== empty.c ======

  *

 /* for usleep()*/

 #include

 #include

 #include

 /*驱动程序头文件*/

 #include

 #include

 #include

 //#include

 //#include

 //#include

 //#include

 //#include

 /*板头文件*/

 #include "Board.h"

 /* GUI Composer 的全局变量*/

 uint16_t adcValue = 0;

 uint16_t 阈值= 500;

 uint16_t 触发= 0;

 /*

  * ==== gpioButtonFxn0 ===

  * Board_GPIO_BUTTON0上 GPIO 中断的回调函数。

  *

 void gpioButtonFxn0 (uint_least8_t 索引)

 {

  /*清除 GPIO 中断并递减阈值*/

  if (threshold < 250){//确保阈值不会低于零

    阈值= 0;

  }否则{

    阈值-= 250;//递减250

  }

 }

 /*

  * ==== gpioButtonFxn1 =========

  * Board_GPIO_Button1上 GPIO 中断的回调函数。

  * 并非所有电路板都使用此功能。

  *

 void gpioButtonFxn1 (uint_least8_t 索引)

 {

  /*清除 GPIO 中断并增加阈值*/

  if (threshold > 16133){//确保阈值不会超出最大 ADC 范围

    阈值= 16383;

  }否则{

    阈值+= 250;//递增250

  }

 }

 /*

  * ==== mainThread ====

  *

 void * mainThread (void * arg0)

 {

  /*~10个循环/秒*/

  uint32_t 时间= 100000;

  /*调用驱动程序初始化函数*/

  GPIO_init();

  adc_init();

  // I2C_init ();

  // SDSPI_init ();

  // spi_init();

  // uart_init();

  // Watchdog_init();

  /*打开显示驱动程序*/

  Display_Handle  displayHandle;

  Display_Params  displayParams;

  Display_Params_init (&displayParams);

  DisplayHandle = Display_open (Display_Type_UART、NULL);

  /*打开 ADC 驱动程序*/

  ADC_Handle ADC;

  ADC_Params 参数;

  ADC_PARAMS_INIT (params);

  ADC = ADC_open (Board_ADC6、params);

  if (ADC == NULL){

    //初始化 ADC 通道0时出错

    while (1);

  }

  /*安装按钮回调..... 2个参数、即将要执行的 IO

   *触发我们想要的中断和回调函数

   *在中断发生时执行。  *

  GPIO_setCallback (Board_GPIO_BUTTON0、gpioButtonFxn0);

  GPIO_setCallback (Board_GPIO_Button1、gpioButtonFxn1);

  /*启用中断*/

  GPIO_enableInt (Board_GPIO_BUTTON0);

  GPIO_enableInt (Board_GPIO_Button1);

  while (1){

    int_fast16_t res;

    RES = ADC_convert (ADC、&adcValue);

    if (res == ADC_STATUS_SUCCESS){

      Display_printf (displayHandle、1、0、"ADC 读取%d"、adcValue);

      if (adcValue < threshold){

        GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);

        触发= 1;

      }否则{

        GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_OFF);

        触发= 0;

      }

    }

    usleep(时间);

  }

 }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADC14以窗口比较器的形式提供您所需的一些内容。 [参考 TRM (SLAU356H)秒 22.2.9]使用它、您只能在某些读取超过某个阈值时使其中断。

    对于每一批读数、只有2个阈值对(每个阈值对为高/低)和1个中断对(每个高/低)、因此在实际情况下、您必须浏览批次中的所有读数、以查看哪一个(s)触发比较器。

    但是、您仍然可以通过将阈值设置为所有传感器阈值的最小或最大值(视情况而定)来获得某种结果、因此您只需在即将发生碰撞等情况下处理读数即可。

    这是硬件的一项功能;我不知道您使用的驱动程序库是否/如何提供对它的访问。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此、为了确保我理解。 使用此 ADC14、仍然只有1个 ISR、当任何传感器读数超出我的指定阈值时、就会触发该 ISR。 一旦发生这种情况、我仍然需要编写代码来确定哪个代码被设置以及原因、然后以 if else 语句或函数等形式编写每个案例的所有代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、差不多就是这样。 您可以使用比较器"无人值守"运行 ADC 以监视(2个可能的)阈值、但一旦触发 ADC、您必须确定触发 ADC 的通道。 这会在大多数时间为您带来好处、但您仍然需要代码来检查每个通道。

    我认为、如果您通过为每个通道发出启动(SC)来测量 CPU 中的 ADC (CONSEQ=3、MSC=0、SHS=0)、您将知道触发了哪个通道(刚刚启动的通道)、但这种方法挫败了"无人值守"的想法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我想我理解、我可以看到在这种情况下仍然使用、即使额外的代码在那里、它将允许在没有触发任何操作的情况下"睡眠"。 如果您不介意帮助我、我有几个关于如何使用这种方法的问题。 我读的是"已解决
    MSP432P401R:多通道不重复采样仅返回您参与的前两个值"帖子。 我复制了您的代码、运行正常、但我想知道如何准确地添加您正在讨论的这些"比较器"。 我对不同的 CCR#、CAPTURECOMPARE 寄存器_#和 MM#与我使用的 ADC 引脚有何关系感到困惑。 此外、我是否还使用计时器捕获来实现此目的或使用比较器功能? 这些 API 的顺序和使用有点令人困惑。 非常感谢您提供有关使用哪种方法的任何指导或说明! 我认为我了解它的工作原理(resultsBuffer[#]保存每个 ADC 的值、因此一旦 ISR 命中、只需检查它们)、只需帮助设置即可。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ADC 窗口比较器位于 ADC 内部、与计时器 CCR 无关。
    ----------------------------
    MSP432Ware Driverlib 可使用 ADC14_setComparatorWindowValue 和 ADC14_enableComparatorWindow 来设置比较器。 您可以使用参数的高32位将 IER1位置为 ADC14_enableInterrupt。

    您似乎在使用"TI 驱动程序"包(我认为这就是它的名称)、我对此非常了解。 您可能需要自行确定它是否可以与比较器配合使用。

    我还应该提到的是、我没有使用 MSP432完成此操作。 我已经使用具有类似机制的 MSP430完成了这项工作。
    ----------------------------
    正如 TRM 第22.2.9节所描述的、您可以在 ADC14LO0寄存器中将低阈值设置为一个值。 (还有一个 ADC14HI0寄存器、但我假设您对声纳/碰撞的低阈值感兴趣。)

    在每个 ADC14MCTL0-6寄存器中设置 ADC14WINC。 使 ADC14WINCTH=0选择 LO0。

    然后、通过设置 ADC14IER1:ADC14LOIE 来启用中断[请参阅表22-14.] 如果您想要"无人值守"、则可能需要关闭 ADC14IER0中设置的位[参考表22-13]

    照常设置 ISR、并检查 ADC14IFGR1:ADC14LOIFG [参考表22-16]。 还有一个 ADC14IV 条目(=8)[参考表22-19。]

    要运行"无人值守"、您可能需要连续扫描(CONSEQ=3且 MSC=1 -比您需要的速度快、但操作简单)或计时器起搏的单次扫描(CONSEQ=1、MSC=1、SHS >0)。

    [编辑:忘记 MCTL 的内容。]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    /* DriverLib 包括*/
    #include 
    
    /*标准包括*/
    #include 
    #include 
    
    /* TI-RTOS 头文件*/
    #include 
    
    /* statics */
    uint16_t resultsBuffer[7];
    uint8_t resPos;
    
    int main (void)
    {
    //暂停 WDT */
    MAP_WDT_A_HOLDTimer ();
    MAP_Interrupt_enableSlepOnIsrExit ();
    resPos = 0;
    
    //设置 WDCC_LAG_CLK
    
    =
    
    
    
    0
    ;* INIT_ADC_CLK_CLK_CLK = 0;* INITCLADC_CLADC_CLK_CLK_CLK_CLK_CLK = 0;* INIT_CLADC_CLK_CLK_CLK_CLK = 0;* INIT_CLADC_CLADC_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK =
    
    /*配置 GPIO (5.5 A0)*/
    MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3 |
    GPIO_PIN4 | GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7、GPIO_TIVE_MODULE_GPIO_OUTPUT_0;GPIO_PUTPSIT_PORT_OUTPUT_OUTPUT_0;
    GPIO_OUTPUT_OUTPUT_OUTPUT_0 (GPIO_OUTPUT_OUTPUT_OUTPUT_OUTPUT_OUTPUT_0)
    GPIO_PIN1);
    // map_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN2);
    //配置 ADC 内存(ADC_MEM0 - ADC_MEM7 (A6 - A12)(不重复)
    (具有内部2.5V 基准)*//
    MAP_ADC14_CONFIGureM6多序列模式(ADC_MEM0 - ADC_MEM7 (A6 - ADC_REF_ADC_REVC_IN0)、ADC_REVC_ADC_REVC_ADC_REU0
    
    
    、ADC_ADC0_ADC_ADC0_TRUVC_AD_ADC14_ADC0、ADC14_ADC0、ADC12_AD_ADC0、ADC0、ADC_ false);
    map_ADC14_configureConversionMemory (ADC_MEM1、
    ADC_VREFPOS_INTBUF_VREFNEG_VSS、
    ADC_INPUT_A7、false);
    MAP_ADC14_configureConversionMemory (ADC_MEM2、
    ADC_VREFPOS_INTBUF_VREFNEG_VSS、
    ADC_INPUT_A8、false);
    MAP_ADC14_CONFIGureConversionMemory (ADC_MEM3、
    ADC_VREFPOS_INTBUF_VREFNEG_VSS、
    ADC_INPUT_A9、false);
    MAP_ADC14_CONFIGureConversionMemory (ADC_MEM4、
    ADC_VREFPOS_INTBUF_VREFNEG_VSS、
    ADC_INPUT_A10、false);
    MAP_ADC14_configureConversionMemory (ADC_MEM5、
    ADC_VREFPOS_INTBUF_VREFNEG_VSS、
    ADC_INPUT_A11、 false);
    map_ADC14_configureConversionMemory (ADC_MEM6、
    ADC_VREFPOS_INTBUF_VREFNEG_VSS、
    ADC_INPUT_A12、false);
    
    /*将采样计时器设置为自动单步执行序列
    * convert.*/
    MAP_ADC14_enableSampleTimer (ADC_AUTOMODIFICE_DEACTURN);
    
    //触发采样开始*/
    MAP_ADC14_enableConversion();
    MAP_ADC14_TOGLEConversionTriggerTM
    
    ;ADC14_Comparator_ADC_WMEM0 | ADC_ADC_MEM4 | ADC_ADC_ADC_W0 | ADC_MEM4 | ADC_DOMEM4 | ADC_W0 | ADC_DOMEM4 | ADC_DOMEM4 (ADC_W0、ADC_DOMEM4)| ADC_DOMEM4 | ADC_DOMEM4 | ADC_DOMEM4 | ADC_DOMEM4 | ADC_DOMEM4 (ADC_W0
    
    
    
    
    /*在通道7 (序列结束)上的转换
    完成时启用中断*并启用转换*/
    MAP_ADC14_enableInterrupt (ADC_IN_INT);
    
    /*启用中断*/
    MAP_Interrupt_enableInterrupt (INT_ADC14);
    MAP_Interrupt_enableMaster ();
    
    /*进入睡眠*/
    while (1)
    {_gotoPM0}
    
    
    }
    
    //此中断在转换完成后被触发,并放置在
    * ADC_MEM0 */
    void ADC14_IRQHandler (void)
    {
    uint64_t status;
    uint64_t currentvalue;
    
    status = MAP_ADC14_getEnabableInterruptStatus ();
    MAP_ADC14_clearInterputFlag (status);ONTOP_PORT_GPIO_OutruptPin
    
    GPIO_PIN0);
    
    if (status & ADC_INT6)
    {
    MAP_ADC14_getMultiSequenceResult (resultsBuffer);
    resultsBuffer[0]= MAP_ADC14_getResult (ADC_MEM0);
    resultsBuffer[1]= MAP_ADC14_Result (ADC_MEM1);results14_ADCM2[ADCM_ADCM2]
    ;getResult (ADCMEM2_ADCM_ADCM_ADCMEM2]= ADCMEM2_ADCMEM2_);getResult
    (ADCMEM2_ADCME= ADCME= ADCMEM2_ADCME= ADC14_ADCM
    当前 Buffer[4]= MAP_ADC14_getResult (ADC_MEM4);
    resultsBuffer[5]= MAP_ADC14_getResult (ADC_MEM5);
    resultsBuffer[6]= MAP_ADC14_getResult (ADC_MEM6);
    当
    
    GPIO_OUT_PORT_OUT0_GPIO_OUT0_GPIO_OUT0_GPIO_OUT_PORT_OUT0
    
    时、GPIO_OUT/ OUT_OUT0_GPIO_OUT0_GPIO_OUT_OUT0_GPIO_OUTLEP0
    
    
    
    (AD_GPIO_OUT_OUT_OUT_OUT_GPIO_OUT0)
    
    
    
    

    好的、您所解释的方式似乎相当简单、但我无法使其正常工作。 我认为我的比较器甚至根本不会触发 ISR。 我将高值和低值设置为直接从声纳传感器读取的值。 我发布的原始代码显示、近声纳传感器读数低于700、远距离读数为2000+、因此我想对这些值进行处理、而不是转换为电压或类似的值。 我不确定是否为此错误设置了 MAP_ADC14_configureConversionMemory。 如果触发了 ISR、并且 LED 永远不会从 ON 变为 ON、则代码会切换 LED。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > MAP_ADC14_enableConversion();
    > MAP_ADC14_toggleConversionTrigger ();
    TRM 图22-19以蓝色显示了 ADC14WINC、这意味着当 ENC=1 (也称为 ADC14_enableConversion)时无法更改它。 我建议您移动该调用(也包括 ADC14_toggleConversionTrigger)、以便按照其余设置进行操作。

    实际阈值寄存器(LO0/HI0)不是蓝色、因此您可以假定随时更改它们(ADC14_setComparatorWindowValue)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于我一直在使用 API 来执行我的所有 CCS 代码、因此很难遵循寄存器级说明。 似乎不需要太多代码、但我似乎仍然无法获得  

    ADC14_IRQHandler 运行。 我让它打开、代码中的 LED 一直亮起、LED 永远不会亮起。 我觉得我没有设置引脚来读取声纳读数本身。 我可以找到的所有示例代码都使用1.5-2.5 [V]的内部基准、而我只想为比较器使用精确的声纳读数。 我不确定您是否可以提供帮助、因为您说过您不熟悉 TI 驱动程序。

    P.S. 圣诞节快乐  

    /*将采样计时器设置为自动单步执行序列
    *转换。*/
    MAP_ADC14_enableSampleTimer (ADC_AUTOMATE_DIOTIVation);
    
    ADC14_enableComparatorWindow (ADC_MEM0 | ADC_MEM1 | ADC_MEM2 | ADC_MEM3 | ADC_MEM4 | ADC_MEM5 | ADC_MEM6、
    ADC_COMP_WINDOW0);
    
    ADC14_setComparatorWindowValue (ADC_COMP_WINDOW0、700、2000);
    
    /*当通道降至低于或高于比较器阈值时启用中断*/
    MAP_ADC14_enableInterrupt (ADC_IN_INT);
    
    /*启用中断*/
    MAP_Interrupt_enableInterrupt (INT_ADC14);
    MAP_Interrupt_enableMaster();
    
    /*触发样本开始*/
    MAP_ADC14_enableConversion();
    MAP_ADC14_toggleConversionTrigger ();
    
    /*正在休眠*/
    while (1)
    {
    MAP_PCM_gotoLPM0 ();
    }
    }
    
    //此中断在转换完成后被触发,并放置在
    * ADC_MEM0 */
    void ADC14_IRQHandler (void)
    {中
    uint64_t status;
    // uint64_t currentvalue;
    
    STATUS = MAP_ADC14_getEncableInterruptStatus();
    MAP_ADC14_clearInterruptFlag (status);
    
    MAP_GPIO_setOutputHighOnPin (GPIO_PORT_P1、GPIO_PIN0);//LED1
    
    if (status & ADC_INT6)
    {
    MAP_ADC14_getMultiSequenceResult (resultsBuffer);
    resultsBuffer[0]= MAP_ADC14_getResult (ADC_MEM0);
    resultsBuffer[1]= MAP_ADC14_getResult (ADC_MEM1);
    resultsBuffer[2]= MAP_ADC14_getResult (ADC_MEM2);
    resultsBuffer[3]= MAP_ADC14_getResult (ADC_MEM3);
    resultsBuffer[4]= MAP_ADC14_getResult (ADC_MEM4);
    resultsBuffer[5]= MAP_ADC14_getResult (ADC_MEM5);
    resultsBuffer[6]= MAP_ADC14_getResult (ADC_MEM6);
    }
    
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能够以 ADC_IN_INT 状态触发 Launchpad 上的 ISR。 我没有一种简单的方法来生成信号、因此我只需将手指放在引脚上、直到发生任何情况。
    --------------------
    我在 ISR 条目处设置一个断点。 如果您使用 LED 向您发出信号、请记住、P1->OUT 寄存器在复位时未定义、因此您应在设置方向时将 P1.0设置为低电平(我认为这是 MAP_GPIO_setOutputLowOnPin)。 在我的案例中、它在 main 中立即启动、所以它不是很重要的指示器。
    --------------------
    > if (status & ADC_INT6)
    这将检查 MEM6完成状态。 您可能需要:
    > if (status & ADC_IN_INT)
    --------------------
    您正在使用 IN 中断(ADC_IN_INT)、该中断会检查读数是否在"in"范围内、而不是高电平或低电平。 如果它与您的测试用例相匹配、那就没问题。 我知道您对 ADC_LO_INT 或 ADC_HI_INT 感兴趣。
    --------------------
    > MAP_ADC14_getMultiSequenceResult (resultsBuffer);
    此函数位于 ROM 中、因此我希望它(仍然)损坏。 它后面的行会替换该调用、因此只需删除该行。
    --------------------
    > MAP_ADC14_configureConversionMemory (ADC_MEM2、ADC_VREFPOS_INTBUF_VREFNEG_VSS、ADC_INPUT_A8、false);
    如果您不需要2.5V 电压基准、我猜您需要使用 VCC (3.3V)作为基准:
    > MAP_ADC14_configureConversionMemory (ADC_MEM2、ADC_VREFPOS_AVCC_VREFNEG_VSS、ADC_INPUT_A8、false);
    --------------------
    我想您几乎在那里、您只需要正确地获得输入电平。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢! 终于开始工作了! 我像您说的那样将所有输入正确匹配在一起,但我缺少 MAP_ADC14_enableModule();

    使其正常工作。 非常感谢您的耐心和快速回答! 知识非常渊博、即使您不熟悉

    TI 驱动程序示例。 我将为任何希望完成此操作的其他人发布我的代码。 我使用了来自 CCS 的示例:

    Resource Explorer > MSP432P401R LaunchPad -红色2.x (红色)> SimpleLink MSP432P4 SDK - v:2.30.00.14 >示例>开发工具>

    MSP432P401R LaunchPad -红色2.x (红色)> DriverLib > adc14_single_converation_repeer_timera_source.c

    复制并粘贴此代码、它应该可以正常工作、并且可以针对个人应用更改引脚。

    ( 启动程序********
    /*DLUG = MSP432_DriverLib_Users_Guide-MSP432P4xx-2_20_00_08*/
    
    * DriverLib 包含*/
    #include 
    /*标准包括*/
    #include 
    #include 
    /* TI-RTOS 头文件*/
    #include 
    /*静态*/
    uint16_t resultsBuffer[7];//缓冲器以保存每个声纳传感器的 ADC 读数
    /* DLUG 部分:2.6.2.25 |注册 ADC 中断的中断处理程序。 //
    void ADC14_registerInterrupt (void (* ADC14_IRQHandler)(void));
    int main (void)
    {
    /*停止 WDT */
    MAP_WDT_A_HOLDTimer();
    MAP_Interrupt_enableSlepOnIsrExit();
    /* DLUG 部分:2.6.2.14 |这将启用 ADC 块的运行。 *
    MAP_ADC14_enableModule ();
    //MAP_ADC14_initModule (ADC_CLOCKSOURCE_ADCOSC、ADC_PREDIVIDER_1、ADC_DIVIDER_1、
    //0);
    /*在端口4引脚1-7 (包括*/)上为第三功能和输入配置 GPIO
    MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3 |
    GPIO_PIN4 | GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7、GPIO_TICE_MODULE_FUNCTION);
    /*将板载 LED1和 LED2设置为输出并将其初始化为低电平*/
    MAP_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0);//LED1 (左侧和红色)
    MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN1);
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN1);//LED2 (右侧和绿色)
    //MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN2);
    /* DLUG 部分:2.6.2.3 |配置 ADC 存储器(ADC_MEM0 - ADC_MEM6 (A6 - A12)、不再重复)
    *使用内部3.3[V]基准*/
    MAP_ADC14_configureMultiSequenceMode (ADC_MEM0、ADC_MEM6、TRUE);
    /* DLUG 部分:2.6.2.2 |为每个 ADC 模块配置单独的存储器位置。
    *(内存位置、电压基准类型、所使用的通道
    * ADC 采样、非差分输入为 false)*/
    //ADC_VREFPOS_INTBUF_VREFNEG_VSS (提供2.5[V]基准电压)
    MAP_ADC14_configureConversionMemory (ADC_MEM0、
    ADC_VREFPOS_AVCC_VREFNEG_VSS、ADC_INPUT_A6、false);//ADC6 = P4.7 = MEM0
    MAP_ADC14_configureConversionMemory (ADC_MEM1、
    ADC_VREFPOS_AVCC_VREFNEG_VSS、ADC_INPUT_A7、false);//ADC7 = P4.6 = MEM1
    MAP_ADC14_configureConversionMemory (ADC_MEM2、
    ADC_VREFPOS_AVCC_VREFNEG_VSS、ADC_INPUT_A8、false);//ADC8 = P4.5 = MEM2
    MAP_ADC14_configureConversionMemory (ADC_MEM3、
    ADC_VREFPOS_AVCC_VREFNEG_VSS、ADC_INPUT_A9、false);//ADC9 = P4.4 = MEM3
    MAP_ADC14_configureConversionMemory (ADC_MEM4、
    ADC_VREFPOS_AVCC_VREFNEG_VSS、ADC_INPUT_A10、false);//ADC10 = P4.3 = MEM4
    MAP_ADC14_configureConversionMemory (ADC_MEM5、
    ADC_VREFPOS_AVCC_VREFNEG_VSS、ADC_INPUT_A11、false);//ADC11 = P4.2 = MEM5
    MAP_ADC14_configureConversionMemory (ADC_MEM6、
    ADC_VREFPOS_AVCC_VREFNEG_VSS、ADC_INPUT_A12、false);//ADC12 = P4.1 = MEM6
    /* DLUG 部分:2.6.2.16 |将采样定时器设置为自动单步执行序列转换
    *一个采样/转换完成后,ADC 模块将自动继续到下一个采样。*/
    MAP_ADC14_enableSampleTimer (ADC_AUTOMATE_DIOTIVation);
    /*DLUG 部分:2.6.2.11 |启用指定的内存通道掩码以使用指定的比较器窗口。 。
    ADCC 模块有两个不同的比较器窗口、可通过此功能进行设置。*/
    ADC14_enableComparatorWindow (ADC_MEM0 | ADC_MEM1 | ADC_MEM2 | ADC_MEM3 | ADC_MEM4 | ADC_MEM5 | ADC_MEM6、
    ADC_COMP_WINDOW0);
    //ADC14_enableComparatorWindow (ADC_MEM0 | ADC_MEM1 | ADC_MEM2 | ADC_MEM3 | ADC_MEM4 | ADC_MEM5 | ADC_MEM6、
    //ADC_COMP_WINDOW1);
    /* DLUG 部分:2.6.2.26 |设置指定窗口比较器的下限和上限。
    *(窗口0或窗口1、下限、上限)*/
    ADC14_setComparatorWindowValue (ADC_COMP_WINDOW0、550、2000);
    //ADC14_setComparatorWindowValue (ADC_COMP_WINDOW1、550、2000);
    /* DLUG 部分:2.6.2.13 |当通道降至比较器阈值以下时启用中断、
    *如果使用 ADC_HI_INT 在通道高于比较器或的阈值时启用中断
    *当通道处于超薄阈值时、ADC_IN_INT 启用中断通道*
    MAP_ADC14_enableInterrupt (ADC_LO_INT);
    //MAP_ADC14_enableInterrupt (ADC_HI_INT);
    //MAP_ADC14_enableInterrupt (ADC_IN_INT);
    /* DLUG 部分:12.4.2.4 - 12.4.2.5 |启用中断*/
    MAP_Interrupt_enableInterrupt (INT_ADC14);
    MAP_Interrupt_enableMaster();
    /* DLUG 部分:2.6.2.12和2.6.2.32|启用 ADC 数据转换。 触发采样开始。
    *通过切换触发软件位来切换 ADC 模块转换的触发器。*/
    MAP_ADC14_enableConversion();
    MAP_ADC14_toggleConversionTrigger ();
    /*正在休眠*/
    while (1)
    {
    MAP_PCM_gotoLPM0 ();
    }
    }
    /*只要 Sonar Reading 是比较器所说的内容,并且 MAP_ADC14_enableInterrupt (X)所说的内容,就会触发此中断。 */
    void ADC14_IRQHandler (void)
    {
    uint64_t status;
    STATUS = MAP_ADC14_getEncableInterruptStatus ();//获取中断状态以进行比较
    MAP_ADC14_clearInterruptFlag (status);//清除中断标志以进行下一次中断检查
    IF (STATUS & ADC_LO_INT)//
    {
    //map_ADC14_getMultiSequenceResult (resultsBuffer);
    resultsBuffer[0]= MAP_ADC14_getResult (ADC_MEM0);//P4.7
    resultsBuffer[1]= MAP_ADC14_getResult (ADC_MEM1);//P4.6
    resultsBuffer[2]= MAP_ADC14_getResult (ADC_MEM2);//P4.5
    resultsBuffer[3]= MAP_ADC14_getResult (ADC_MEM3);//P4.4
    resultsBuffer[4]= MAP_ADC14_getResult (ADC_MEM4);//P4.3
    resultsBuffer[5]= MAP_ADC14_getResult (ADC_MEM5);//P4.2
    resultsBuffer[6]= MAP_ADC14_getResult (ADC_MEM6);//P4.1
    }
    //map_GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0);
    如果(resultsBuffer[0]< 550){//LED 1 on when objects are close (当对象关闭时打开)(红色)
    MAP_GPIO_setOutputHighOnPin (GPIO_PORT_P1、GPIO_PIN0);//LED1 (左侧)
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN1);
    }
    其他{//LED 2在物体较远时亮起(绿色)
    MAP_GPIO_setOutputHighOnPin (GPIO_PORT_P2、GPIO_PIN1);//LED2 (右侧)
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0);
    }
    }