请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432P401R 工具/软件:Code Composer Studio
我想使用 MSP432 SDK 中提供的 DriverLib 同时读取多个 ADC 值。
我编辑了 adc14_multiple_channel_no_repex.c 以重复相同的操作。
我在示例代码中更改的所有内容都是
MAP_ADC14_configureMultiSequenceMode (ADC_MEM0、ADC_MEM7、false);
更改为
MAP_ADC14_configureMultiSequenceMode (ADC_MEM0、ADC_MEM7、TRUE);
我认为这就是要对示例代码进行的所有更改。
我在下面添加了完整代码。
/*-版权所有-、BSD *版权所有(c) 2017、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 *--/版权--*/ * MSP432 ADC14 -多通道无重复采样 * 说明:在此代码示例中、 用户 A 演示了能够扫描多个* ADC 通道的功能 DriverLib API。 转换 *内存寄存器 ADC_MEM0 - ADC_MEM7被配置为分别从 A0-A7读取转换*结果。 转换被启用、然后使用 一个软件切换来*切换采样。 重复模式未启用、仅采样 *发生一次(用户应暂停调试器以观察 *结果)。 在获取最终样本后 、* ADC_MEM7的中断被触发、结果存储在 resultsBuffer 缓冲区中。 * * MSP432P401 * ---------- * /|\| | * || | * -|RST P5.5 |<-- A0 (模拟输入) * | P5.4 |<-- A1 (模拟输入) * | P5.3 |<-- A2 (模拟输入) * | P5.2 |<-- A3 (模拟输入) * | P5.1 |<-- A4 (模拟输入) * | P5.0 |<-- A5 (模拟输入) * | P4.7 |<-- A6 (模拟输入) * | P4.6 |<-- A7 (模拟输入) * | | * | | * (小部分 /* DriverLib 包括*/ #include /*标准包括*/ #include #include 静态 uint16_t resultsBuffer[8]; int main (void) { /*停止 WDT */ MAP_WDT_A_HOLDTimer(); MAP_Interrupt_enableSlepOnIsrExit(); /*零填充缓冲器*/ memset (resultsBuffer、0x00、8); //![简单 REF 示例] /*将基准电压设置为2.5并启用基准*/ MAP_REF_A_setReferenceVoltage (REF_A_VREF2_5V); map_REF_A_enableReferenceVoltage(); //![简单 REF 示例] /*初始化 ADC (MCLK/1/1)*/ MAP_ADC14_enableModule(); MAP_ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_1、ADC_DIVIDER_1、 0); /*在*/中为模拟配置 GPIO MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P5、 GPIO_PIN5 | GPIO_PIN4 | GPIO_PIN3 | GPIO_PIN2 | GPIO_PIN1 | GPIO_PIN0、GPIO_TICE_MODULE_FUNCTION); MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、 GPIO_PIN7 | GPIO_PIN6、GPIO_Terti_MODULE_FUNCTION); /*配置 ADC 存储器(ADC_MEM0 - ADC_MEM7 (A0 - A7)、无需重复) *具有内部2.5V 基准* MAP_ADC14_configureMultiSequenceMode (ADC_MEM0、ADC_MEM7、TRUE); MAP_ADC14_configureConversionMemory (ADC_MEM0、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A0、false); MAP_ADC14_configureConversionMemory (ADC_MEM1、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A1、false); MAP_ADC14_configureConversionMemory (ADC_MEM2、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A2、false); MAP_ADC14_configureConversionMemory (ADC_MEM3、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A3、false); MAP_ADC14_configureConversionMemory (ADC_MEM4、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A4、false); MAP_ADC14_configureConversionMemory (ADC_MEM5、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A5、false); MAP_ADC14_configureConversionMemory (ADC_MEM6、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A6、false); MAP_ADC14_configureConversionMemory (ADC_MEM7、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A7、false); /*在通道7 (序列结束)上进行转换时启用中断 *已完成并启用转换*/ MAP_ADC14_enableInterrupt (ADC_INT7); /*启用中断*/ MAP_Interrupt_enableInterrupt (INT_ADC14); MAP_Interrupt_enableMaster(); /*将采样计时器设置为自动单步执行序列 *转换。 * MAP_ADC14_enableSampleTimer (ADC_AUTOMATE_DIOTIVation); /*触发样本开始*/ MAP_ADC14_enableConversion(); MAP_ADC14_toggleConversionTrigger (); /*正在休眠*/ while (1) { MAP_PCM_gotoLPM0 (); } } //每当转换完成并放置在 * ADC_MEM7中时,就会触发此中断。 这表示转换结束、结果数组 被*抓取并放置在 resultsBuffer */ void ADC14_IRQHandler (void) {中 uint64_t status; STATUS = MAP_ADC14_getEncableInterruptStatus(); MAP_ADC14_clearInterruptFlag (status); if (status & ADC_INT7) { MAP_ADC14_getMultiSequenceResult (resultsBuffer); } }
这似乎是正确的、但 ADC 不会连续读取所有引脚、即使在给定输入下、P5.4等某些引脚甚至也不显示采样。
结果仅显示在 resultsBuffer[]的前两个索引中,而不显示在其它任何索引上。
我有什么问题吗? 我不熟悉 MSP432。
谢谢你。
Viswanath。