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.

[参考译文] CCS/MSP430FR2353:ADC 重复通道序列

Guru**** 2577385 points
Other Parts Discussed in Thread: MSP430FR2353

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/831337/ccs-msp430fr2353-adc-repeat-sequence-of-channels

器件型号:MSP430FR2353

工具/软件:Code Composer Studio

尊敬的团队

我的客户正在使用 MSP430FR2353和 ADC12。  他们希望使用序列模式。

但我无法在 ADCMCTL0寄存器中找到 EOS 位。 那么、我如何配置它呢? MSP430FR2353仅具有 ADCMCTL0、ADC12MCTL0~x 与往常一样。 为什么?

此外、我们 在示例中以以下代码的形式对 A2/A1/A0进行采样。 但我的客户希望使用 A8和 A12。 有可能吗? 如何配置它?

BR、

Susan

/*-版权所有-、BSD_EX
*版权所有(c) 2016、德州仪器(TI)公司
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在

*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、

不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
*
***
*
* MSP430代码示例免责声明
*
* MSP430代码示例是自包含的低级程序
,通常*以
高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
值*寄存器值和时钟配置等设置、
并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
*。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
*了解外设配置的 API 函数库方法。
*
*--/版权--*
//*********
// MSP430FR235x 演示- ADC、样片 A2/A1/A0、内部2V 参考
//
//说明:此示例在通道序列模式下工作。
// A2/A1/A0以2V 为基准对16ADCclks 进行采样。
//内部振荡器乘以采样(16x)和转换(13x)。
//在 ADC_ISR A2/A1/A0内将采样值放入数组 ADC_Result [3]。
// ACLK =默认 REFO ~32768Hz、MCLK = SMCLK =默认 DCODIV ~1MHz。
//
//
//////// MSP430FR2355
// --------
// /|\| |
// || |
// -|RST |
// | |
// --|P1.2/A2 |
// --|P1.1/A1 |
// --|P1.0/A0 |
//

//// Cash Hao
// Texas Instruments Inc.
// 2016年11月
//使用 IAR 嵌入式工作平台 v6.50.0和 Code Composer Studio v6.2.0构建
//*********
#include 

unsigned int adc_result[3]; // 12位 ADC 转换结果数组
unsigned char i;

int main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止 WDT

//配置 ADC A1~2引脚
P1SEL0 |= BIT1 + BIT2;
P1SEL1 |= BIT1 + BIT2;

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

//配置 ADC
ADCCTL0 |= ADCSHT_2 | ADCMSC | ADCON; // 16ADCclks、MSC、ADC 打开
ADCCTL1 |= ADCSHP | ADCCONSEQ_1 | ADCSSEL_1; // ADC 时钟 ACLK、采样计时器、s/w trig、单序列
ADCCTL2 &=~ADCRES; //清除 ADCCTL 中的 ADCRES
ADCCTL2 |= ADCRES_2; // 12位转换结果
ADCMCTL0 |= ADCINCH_2 | ADCSREF_1; // A0~2 (EOS);Vref=2V
ADCIE |= ADCIE0; //启用 ADC 转换完成中断

//配置引用
PMMCTL0_H = PMMPW_H; //解锁 PMM 寄存器
PMMCTL2 |= INTREFEN | REFVSEL_1; //启用内部2V 基准
_DELAY_CYCLES (400); //基准趋稳延迟
__no_operation();

while (1)
{
I = 2;
while (ADCCTL1和 ADCBUSY); //等待 ADC 内核处于活动状态
ADCCTL0 |= ADCENC | ADCSC; //采样和转换开始
_bis_SR_register (LPM0_bits | GIE); //输入带中断的 LPM0
__no_operation(); //仅用于调试
_delay_cycles (5000);
__no_operation();
}
}

// ADC 中断服务例程
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
#pragma vector=adc_vector
__interrupt void adc_isr (void)
#elif defined (__GNU__)
void __attribute__((interrupt (adc_vector))))) adc_isr
#else error
编译器#void (void)!
#endif
{
switch (__evo_in_range (ADCIV、ADCIV_ADCIFG))
{
案例 ADCIV_NONE:
中断;
ADCIV_ADCOVIFG 案例:
中断;
案例 ADCIV_ADCTOVIFG:
中断;
ADCIV_ADCHIIFG 案例:
中断;
ADCIV_ADCLOIFG 案例:
中断;
ADCIV_ADCINIFG 案例:
中断;
ADCIV_ADCIFG 案例:
ADC_RESULSE[i]= ADCMEM0;
if (i ==0)
{
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); //存在 LPM0
}
其他
{
i--;
}
中断;
默认值:
中断;
}
}

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

    您好 Susan、

    ADC 模块在 FR2353中没有 EOS 位、您可以通过参阅用户指南中的说明来关闭 ADC 采集、如下所示:

    和其他引脚还可以通过 ADCINCHx 寄存器(如 A8、A12)配置为 ADC。有关详细信息、请参阅用户指南和数据表:

    http://www.ti.com/lit/ug/slau445i/slau445i.pdf

    http://www.ti.com/lit/ds/symlink/msp430fr2353.pdf

    此致

    Johnson

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

    简短答案:对于您提到的特定情况(它们只需要 A8和 A12)、它们可以通过两个单次转换步骤来实现更好的效果。

    1) 1)正如您提到的、FR2 ADC (与其他器件中的 ADC12和 ADC14不同)只有一个 MCTL/MEM、只有一英寸、并且没有 DMA。 它始终从 INCH 向下计数到0。 如果您对该序列中的某些通道数不感兴趣、一种方法是对所有通道进行采样并丢弃您不感兴趣的结果。

    2) 2)由于只有一个 MEM 寄存器、因此在 CONSEQ=0之外的任何模式下、在下一次转换完成之前都会进行竞争以获取 MEM0中的值。 使用快速 ADC 时钟(ADCOSC 或 SMCLK)、这可能很难(/不可能)。 这里的权变措施是使用慢时钟(示例中为 ACLK)和/或增加采样/保持时间(SHT)、或使用 MSC=0的计时器触发器来降低步速。

    对于您提到的非常稀疏的情况、您会减慢转换序列并放弃大部分(13项中的11项)的结果。 切换英寸实际上并不需要很长时间、并且可能比非常稀疏的13序列模式更快地获得两个通道结果。

    我想他们无法将(2个)输入重新定位到更接近 A0的位置?