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/MSP430FR6989:具有重复序列的多通道ADC

Guru**** 2609955 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/659772/ccs-msp430fr6989-multi-channel-adc-with-repeated-sequence

部件号:MSP430FR6989

工具/软件:Code Composer Studio

你(们)好

我尝试使用TI示例MSP430F55xx_ADC_06.c读取12位ADC A4,A5,A6,A7,进行了一些更改,但程序似乎卡在 __bis_sr_register(GIE)。  下面是代码。


#include <msp430fr6989.h>
#define Num_of_results 8

volatile unsigned int A0结果[Num_of_results];
volatile unsigned int A1results[Num_of_results];
volatile unsigned int A2results[Num_of_results];
volatile unsigned WDint A3results[Num_of_results];

void main(void)
{
DTTCTTL = WDTPW+WHOLD; //停止监视计时器
P8SEL0 = 0x0F;
P8SEL1 = 0x0F; //启用A/D通道输入
ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8;//打开ADC12,延长采样时间
//为了避免结果溢出
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3; //使用采样计时器,重复序列
ADC12MCTL0 = ADC12INCH_4; // ref+=AVcc,通道= A0
ADC12MCTL1 = ADC12INCH_5; // ref+=AVcc,channel = A1
ADC12MCTL2 = ADC12INCH_6; // ref+=AVcc,通道= A2
ADC12MCTL3 = ADC12INCH_7+ADC12EOS; // ref+=AVcc,channel = A3,end seq.
ADC12IFGR0 = 0x08; //启用ADC12IFG.3
ADC12CTL0 |= ADC12ENC; //启用转换
ADC12CTL0 |= ADC12SC; //开始转换-软件触发器

__bis_sr_register (LPM0_Bits + GIE); //输入LPM0,启用中断
__no_operation(); //用于调试器

}

#pragma vector=ADC12_vector
__interrupt void ADC12ISR (void)
{
静态无符号int索引=0;

switch(__偶 数_in_range(ADC12IV,34))
{
案例0:中断; //矢量0:无中断
情况2:中断; //矢量2:ADC溢出
情况4:中断; //矢量4:ADC计时溢出
情况6:中断; //向量6:ADC12IFG0
案例8:中断; //矢量8:ADC12IFG1
案例10:中断; //矢量10:ADC12IFG2
案例12: //向量12:ADC12IFG3
A0results[index]= ADC12MEM0; //移动A0结果,IFG被清除
A1results[index]= ADC12MEM1; //移动A1结果,IFG被清除
A2results[index]= ADC12MEM2; //移动A2结果,IFG被清除
A3results[index]= ADC12MEM3; //移动A3结果,IFG被清除
索引++; //递增结果索引,模数;在此处设置断点1

如果(索引=8)
{
(索引=0);
}
判例14:中断; //矢量14:ADC12IFG4
案例16:中断; //矢量16:ADC12IFG5
案例18:中断; //矢量18:ADC12IFG6
案例20:中断; //矢量20:ADC12IFG7
案例22:中断; //矢量22:ADC12IFG8
案例24:中断; //矢量24:ADC12IFG9
案例26:中断; //矢量26:ADC12IFG10
案例28:中断; //矢量28:ADC12IFG11
案例30:中断; //矢量30:ADC12IFG12
案例32:中断; //矢量32:ADC12IFG13
案例34:中断; //矢量34:ADC12IFG14
默认:中断;
}

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

    你(们)好

    我进行了以下更改,并使其与2.048V的外部参考电压配合使用。 但现在ADC引脚的读数变化很大。

    #include <msp430fr6989.h>
    
    volatile int A4结果;
    volatile int A5结果;
    volatile int A6结果;
    volatile int A7结果;
    
    void main (void)
    {
    WDTCTL = WDTPW+WDTHOLD; //停止监视计时器
    P8SEL0 = 0x0F;
    P8SEL1 = 0x0F; //启用A/D通道输入
    ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8;//打开ADC12,延长采样时间
    //为了避免结果溢出
    ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3; //使用采样计时器,重复序列
    ADC12MCTL0 = ADC12VRSEL_4 + ADC12INCH_4; // ref+=AVcc,通道= A0
    ADC12MCTL1 = ADC12VRSEL_4 + ADC12INCH_5; // ref+=AVcc,通道= A1
    ADC12MCTL2 = ADC12VRSEL_4 + ADC12INCH_6; // ref+=AVcc,通道= A2
    ADC12MCTL3 = ADC12VRSEL_4 + ADC12INCH_7 + ADC12EOS; // ref+=AVcc,channel = A3,end seq.
    ADC12IFGR0 = 0x08; //启用ADC12IFG.3
    ADC12CTL0 |= ADC12ENC; //启用转换
    ADC12CTL0 |= ADC12SC; //开始对流-软件在
    
    (1)
    {
    同时(!(ADC12IFGR0和ADC12IFG3));
    A4Results = ADC12MEM0;
    A5结果= ADC12MEM1;
    A6Results = ADC12MEM2;
    A7结果= ADC12MEM3; 
    }

    }

    输出

    A4:109
    A5:63.
    解答6:74
    解答7:55
    A4:0
    A5:0
    A6:0
    A7:0
    A4:20
    A5:24.
    解答6:20
    解答7:22
    A4:0
    A5:22.
    解答6:2.
    A7:21
    A4:103.
    A5:67
    A6:66
    A7:57
    A4:45.
    A5:30.
    解答6:27
    解答7:25
    A4:0
    A5:0
    A6:0
    A7:0
    A4:0
    A5:0
    A6:0
    解答7:6.
    A4:114
    A5:63.
    解答6:55
    A7:53
    A4:118
    A5:67
    解答6:71
    A7:53
    A4:0
    A5:0
    A6:0
    A7:0
    A4:0
    A5:0
    A6:0
    解答7:9
    A4:75
    A5:43
    解答6:39
    A7:40

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Vijay,
    最好在MSP论坛上与专家讨论此主题。 我将把它移到那里。

    谢谢
    KI
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    A7至A4分别位于引脚8.4 至8.7 上,因此P8SEL[0&1]应为0xF0。 然后,您至少可以从正确的通道进行采样。 第一个代码示例不起作用,因为您不应该设置ADC12IFG0,因为这些是标志位,ADC12IER0应该设置为ADC12IE3。

    此致,
    Ryan